为什么我在 PHP 中所有自动生成的带有 GD 的缩略图都是黑色背景?

Why do all my auto-generated thumbnails with GD in PHP have black backgrounds?

提问人:Andrew G. Johnson 提问时间:5/19/2009 更新时间:7/29/2009 访问量:909

问:

好吧,我正在使用以下代码将任何旧图像转换为 160x120 缩略图,问题是如果有溢出,背景总是黑色的。我一直在窥探 PHP 文档,但这些函数似乎都没有任何颜色参数。任何想法或指示都会很棒!

$original = 'original_image.jpg';
$thumbnail = 'output_thumbnail.jpg';

list($width,$height) = getimagesize($original);
$width_ratio = 160 / $width;
if ($height * $width_ratio <= 120)
{
    $adjusted_width = 160;
    $adjusted_height = $height * $width_ratio;
}
else
{
    $height_ratio = 120 / $height;
    $adjusted_width = $width * $height_ratio;
    $adjusted_height = 120;
}
$image_p = imagecreatetruecolor(160,120);
$image = imagecreatefromjpeg($original);
imagecopyresampled($image_p,$image,ceil((160 - $adjusted_width) / 2),ceil((120 - $adjusted_height) / 2),0,0,ceil($adjusted_width),ceil($adjusted_height),$width,$height);
imagejpeg($image_p,$thumbnail,100);

另外,如果您不清楚我的意思,请拍摄这张图片并考虑它最初只是白色背景上的红色文本

PHP GD 缩略图

评论


答:

2赞 great_llama 5/19/2009 #1

imagecreatetruecolor 函数创建一个黑色画布。

使用 imagefill 函数将其涂成白色...

1赞 D. Patrick 5/19/2009 #2

在将原始文件复制到新的之前添加以下内容:

$white = ImageColorAllocate($image_p, 255, 255, 255); 
ImageFillToBorder($image_p, 0, 0, $white, $white);

编辑:

实际上,我并不知道图像填充。 。 。

$white = imagecolorallocate($image_p, 255, 255, 255); 
imagefill($image_p, 0, 0, $white);

评论

0赞 Andrew G. Johnson 5/19/2009
+1 表示好帖子,但 llama 击败了你接受的答案
0赞 Amin 7/29/2009 #3

不要使用 imagecreatetruecolor 代替 imagecreate,我认为这可以解决