我使用此脚本将图片从原始大小调整为缩略图:
<?php
function resize($newWidth, $originalFile, $targetFile) {
$info = getimagesize($originalFile);
$mime = $info['mime'];
switch ($mime) {
case 'image/jpeg':
$image_create_func = 'imagecreatefromjpeg';
$image_save_func = 'imagejpeg';
$new_image_ext = 'jpg';
break;
case 'image/png':
$image_create_func = 'imagecreatefrompng';
$image_save_func = 'imagepng';
$new_image_ext = 'png';
break;
case 'image/gif':
$image_create_func = 'imagecreatefromgif';
$image_save_func = 'imagegif';
$new_image_ext = 'gif';
break;
default:
throw Exception('Unknown image type.');
}
$img = $image_create_func($targetFile,100);
$width = $info[0];
$height = $info[1];
$newHeight = ($height / $width) * $newWidth;
$tmp = imagecreatetruecolor($newWidth, $newHeight);
imagecopyresampled($tmp, $img, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height);
if (file_exists($targetFile)) {
unlink($targetFile);
}
$image_save_func($tmp, $targetFile);
echo "<img src='$targetFile'>";
}
?>
...和
<?php
echo "<pre>"; var_dump(gd_info()); echo "</pre>";
?>
返回:
array(12) {
["GD Version"]=>
string(26) "bundled (2.1.0 compatible)"
["FreeType Support"]=>
bool(true)
["FreeType Linkage"]=>
string(13) "with freetype"
["T1Lib Support"]=>
bool(true)
["GIF Read Support"]=>
bool(true)
["GIF Create Support"]=>
bool(true)
["JPEG Support"]=>
bool(true)
["PNG Support"]=>
bool(true)
["WBMP Support"]=>
bool(true)
["XPM Support"]=>
bool(true)
["XBM Support"]=>
bool(true)
["JIS-mapped Japanese Font Support"]=>
bool(false)
}
...但它会产生黑色背景的拇指。不显示任何错误或警告。显示错误设置为“打开”。我现在正在测试的所有图像都是.jpg格式。拜托,我做错了什么?
答案 0 :(得分:1)
您实际上从未真正读过$originalFile
的图像数据。
答案 1 :(得分:0)
将此添加到您的php文件中,然后重试:
ini_set("gd.jpeg_ignore_warning", 1);
我也有这个问题。 gd库在某一点静默失败(文件编码)。如果你告诉它忽略这些无声错误,它应该可以工作。
修改强>
好像 Rob Starling 指出,您尝试读取目标文件而不是原始。如果你纠正了这个并且仍然有黑色图像,请再次尝试我的解决方案:D