题
如果图像超过尺寸604x453,我想这样做,然后将其调整为604x453。
我做到了这么远:
$org_name = stripslashes($_FILES[$upload_name]['name']);
$file_size = $_FILES[$upload_name]['size'];
$file_temp = $_FILES[$upload_name]['tmp_name'];
$file_type = $_FILES[$upload_name]["type"];
$file_err = $_FILES[$upload_name]['error'];
list($width, $height, $type, $attr) = $imageSizeInfo;
$move_me = "images/users/status/".$org_name;
if(move_uploaded_file($file_temp, $move_me)) {
echo "{";
echo "msg: '".$org_name."'";
echo "}";
}
if($width > 604 && $height > 453) {
$jpeg_quality = 90;
$src = "images/users/status/".$org_name;
$ext= pathinfo($src, PATHINFO_EXTENSION);
$targ_h = 453;
$targ_w = 604;
$path_thumbs = "images/users/status/";
$thumb_path = $path_thumbs . '/' . $newfilename;
if($ext == "jpg" OR $ext == "jpeg" OR $ext == "JPG"){
$img_r = imagecreatefromjpeg($src);
}elseif($ext == "png" OR $ext == "PNG"){
$img_r = imagecreatefrompng($src);
}elseif($ext == "gif" OR $ext == "GIF"){
$img_r = imagecreatefromgif($src);
}
$dst_r = ImageCreateTrueColor( $targ_w, $targ_h );
imagejpeg($dst_r,$thumb_path,$jpeg_quality);
unlink($move_me);
}
因此,首先,它将文件上传到原始尺寸和所有内容,然后在检查尺寸然后进行调整之后,然后取消链接(删除)原始一个。
现在我不知道什么,但是在调整大小的过程中以某种方式出错了,我只在尺寸604x453中获得一个黑色正方形作为输出。
我想念什么,我该如何解决?
解决方案
在你之间 ImageCreateTrueColor
和 imagejpeg
行,您需要这样的东西:
imagecopyresampled($dst_r, $img_r, 0, 0, 0, 0, $targ_w, $targ_h, $width, $height);
查看PHP手册 imagecopyresampled()
.
您的旧代码本质上是创建一个正确尺寸的空白帆布,然后从中创建“黑色正方形”。
你也应该使用 getimagesize()
要确定已上传了哪种类型的图像,而不是使用文件扩展名。
索引2是指示图像类型的ImageType_xxx常数之一。
这样做的原因是,上传图像是完全合理的 file.jpg
, ,但实际上是 .png
文件 - getimagesize()
检查图像内部的字节以确定其是什么格式。
不隶属于 StackOverflow