我正在使用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);
请问有人能为我解释一下这个主题吗?