生成缩略图 - 不需要的黑色背景

时间:2014-01-21 15:29:49

标签: php gd

我使用此脚本将图片从原始大小调整为缩略图:

<?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格式。拜托,我做错了什么?

2 个答案:

答案 0 :(得分:1)

您实际上从未真正读过$originalFile的图像数据。

答案 1 :(得分:0)

将此添加到您的php文件中,然后重试:

ini_set("gd.jpeg_ignore_warning", 1);

我也有这个问题。 gd库在某一点静默失败(文件编码)。如果你告诉它忽略这些无声错误,它应该可以工作。

修改

好像 Rob Starling 指出,您尝试读取目标文件而不是原始。如果你纠正了这个并且仍然有黑色图像,请再次尝试我的解决方案:D