我正在使用 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);
有人可以请教我这个问题吗?