【发布时间】:2009-06-22 01:39:21
【问题描述】:
我正在使用 GD 调整图像大小和转换图像,但是在我的测试中,我发现将透明 PNG 转换为 JPEG 时出现了奇怪的行为。根据手册,ImageAlphaBlending() 默认是打开的,但为了保持透明度,我必须将 ImageSaveAlpha() 设置为 true(这反过来又要求我将 ImageAlphaBlending() 设置为 false)。所以正确的做法应该是:
$result = ImageCreateFromPNG(...);
ImageAlphaBlending($result, false);
ImageSaveAlpha($result, true);
ImageFill($result, 0, 0, IMG_COLOR_TRANSPARENT);
ImageJPEG($result);
ImageDestroy($result);
但是,如果我以“正确”的方式执行此操作,那么 JPEG 中的所有透明度区域都会变黑。这在我的测试中似乎有效(透明区域为白色背景的 JPEG):
$result = ImageCreateFromPNG(...);
ImageAlphaBlending($result, true); // true by default, but still...
ImageSaveAlpha($result, true);
ImageFill($result, 0, 0, IMG_COLOR_TRANSPARENT);
ImageJPEG($result);
ImageDestroy($result);
有人可以请教我这个问题吗?
【问题讨论】:
-
对不起! JPEG 格式的 Afaik 图像不能有“透明”背景或 Alpha 通道。
-
是的,我知道。我只想在 JPEG 输出中将原始 PNG 图像的所有透明区域转换为白色。对不起,如果我解释得不够清楚。
标签: php image png transparency gd