我正在使用以下示例代码来调整给定图像的大小,但是有些图像(只有极少数几张照片但很多次)失败并返回黑色jpeg 而没有任何功能错误。
但是,如果我在Photoshop中打开该图像并再次将其保存为 AS IT IS 作为JPEG(相同的文件类型),那么它似乎正在工作。它正确调整新保存的图像的大小。
我想知道原件有什么问题吗?因为原始文件似乎格式正确,甚至可以在Windows照片查看器中打开。
请注意
没有问题文件不存在
文件类型......等(扩展名为jpeg)
抱歉,由于隐私原因,我无法发布样本照片。
安装了最新的GD库并且可以正常使用其他图像
其实我发现它的" $ image = imagecreatefromjpeg($ filename);"如果失败则会为失败的图像返回false,而其他的则返回"类型(gd)的资源(5)"当我做" var_dump($ image);"
进一步的调试发现我跟着错误
Warning: imagecreatefromjpeg(): gd-jpeg, libjpeg: recoverable error: Invalid SOS parameters for sequential JPEG
有什么解决方案或理由吗?
我用来调整大小的代码如下。
<?php
$thumb=resizeImage('20160612_123658_web.jpg',500,500);
// Set the content type header - in this case image/jpeg
header('Content-Type: image/jpeg');
// Output
imagejpeg($thumb);
/**
* Resize an image and keep the proportions
* @author Allison Beckwith <allison@planetargon.com>
* @param string $filename
* @param integer $max_width
* @param integer $max_height
* @return image
*/
function resizeImage($filename, $max_width, $max_height)
{
list($orig_width, $orig_height) = getimagesize($filename);
$width = $orig_width;
$height = $orig_height;
# taller
if ($height > $max_height) {
$width = ($max_height / $height) * $width;
$height = $max_height;
}
# wider
if ($width > $max_width) {
$height = ($max_width / $width) * $height;
$width = $max_width;
}
$image_p = imagecreatetruecolor($width, $height);
$image = imagecreatefromjpeg($filename);
imagecopyresampled($image_p, $image, 0, 0, 0, 0,
$width, $height, $orig_width, $orig_height);
return $image_p;
}
答案 0 :(得分:0)
在运行imagemagick的convert.exe时,我对使用手机拍摄的照片(S5)有一个类似的问题,而不是系统的问题。
使用IrfanView无损JPEG插件(快捷键“J”)清除有问题的图像后,问题停止了,选项“无(可用于优化和清洁)”。然后使用convert.exe没有导致任何警告。
因此,这可能是图像元数据的不合规问题。对我来说,这并没有引起引用的黑色图像问题。修复源JPEG文件似乎是前进的方向。