PHP 上传和裁剪图像
Posted
技术标签:
【中文标题】PHP 上传和裁剪图像【英文标题】:PHP Upload & Crop Image 【发布时间】:2013-10-01 15:47:20 【问题描述】:我正在尝试根据其他在线教程创建一个 php 裁剪器,但我不断出现错误,我无法理解实际错误的含义。这是我的php代码,也写了错误:
<?php
include("settings.php");
$extension = end(explode(".", $_FILES["avatar"]["name"]));
$id = mysqli_real_escape_string($con, $_POST["id"]);
$time = time();
$avatarid= time().'-'.mt_rand(1000, 9999);
$avatar = mysqli_real_escape_string($con, $_POST["avatar"]);
$w= mysqli_real_escape_string($con, $_POST["w"]);
$h= mysqli_real_escape_string($con, $_POST["h"]);
$x= mysqli_real_escape_string($con, $_POST["x"]);
$y= mysqli_real_escape_string($con, $_POST["y"]);
$rw = 300;
$rh = 300;
$path = "../uploads/avatars/";
$unlink = "$path$avatar";
$newimage = "$path$avatar";
$insert_avatar_sql = "UPDATE members SET avatar = '".$avatarid.".".$extension."' WHERE id = '$id'";
$insert_avatar_res = mysqli_query($con, $insert_avatar_sql);
if(mysqli_affected_rows($con)>0)
unlink($unlink);
move_uploaded_file($_FILES["avatar"]["tmp_name"],"$path" . $avatarid . "." . $extension);
$wratio = ($rw/$w);
$hratio = ($rh/$h);
$newW = ceil($w * $wratio);
$newH = ceil($h * $hratio);
$newimg = imagecreatetruecolor($newW,$newH);
$ext=$extension;
if($ext=="jpg" || $ext=="jpeg" )
$source = imagecreatefromjpeg($newimage); // Warning: imagecreatefromjpeg(../uploads/avatars/1380641918-4496.jpg) [function.imagecreatefromjpeg]: failed to open stream: No such file or directory in C:\AppServ\www\music.co.uk\php\avatar.php on line 34
else if($ext=="png")
$source = imagecreatefrompng($newimage);
else
$source = imagecreatefromgif($newimage);
imagecopyresampled($newimg,$source,0,0,$x1,$y1,$newW,$newH,$w,$h); // Warning: imagecopyresampled(): supplied argument is not a valid Image resource in C:\AppServ\www\music.co.uk\php\avatar.php on line 44
uploads/1380642027-5994
imagejpeg($newimg,$path.$avatarid,90);
echo "uploads/".$avatarid;
exit;
header("Location: ../edit.php?page=profile");
else
header("Location: ../404.php");
exit();
?>
请帮我解决这个问题,我已经搞砸了 3 天的头像上传,我想完成这件事,即使我必须使用不同的 php 脚本
【问题讨论】:
第一个错误意味着它找不到导致第二个错误的文件,您的站点的文件夹结构是什么? 路径是 www.website.co.uk/uploads/avatars/ (IMAGE) - 但是为此路径必须从 php 文件夹返回,然后进入上传,../uploads /头像/ 所以调用它的文件在 www.website.co.uk/php/avatar.php 它看起来仍然像一个路径问题(假设 .jpg 是有效的)。这个文件是像 example.com/php/avatar.php 一样使用,还是由另一个脚本在 require 或 include 语句中调用?给我看你用来发布到这个的代码和一个 var_dump();到此脚本的 $_POST。 感谢@Pwner,我现在已经对脚本进行了排序,并使用了与 canvas.php 完全不同的方法(调整脚本) 【参考方案1】:对于您的第一个错误,您将 $newimage 传递给 imagecreatefromjpeg()。在此过程中,$newimage 没有 imagecreatefromjpeg() 可以理解的值。所以基本上如果 $newimage 是一个文件或目录,它是无效的,所以你的问题是分配给 $newimage 的值。(确保“../uploads/avatars/ 1380641918-4496.jpg" 是有效的)不知道在第二个警告中告诉你什么。祝你好运。
【讨论】:
以上是关于PHP 上传和裁剪图像的主要内容,如果未能解决你的问题,请参考以下文章