Ali*_*xel 4 php png transparency gd image
我正在使用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);
Run Code Online (Sandbox Code Playgroud)
但是,如果我以"正确"方式执行此操作,则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);
Run Code Online (Sandbox Code Playgroud)
有人可以请教我这个问题吗?
这可能取决于你的PNG.PNG文件可以包含背景颜色,可以在透明度不起作用时使用.你的PNG可能有白色背景.当您将imageaplhablending设置为true时,它会从PNG中选取背景颜色,并在编写JPEG时使用它.当您将其设置为false时,它会选择GD的默认值为黑色.
你可以自己试试.创建透明PNG并使用橙色或粉红色背景颜色保存.你的第二个例子应该显示颜色.
顺便说一句,PNG背景颜色技巧对IE6图像来说是一个不错的选择.IE6不支持透明PNG,因此它会以您保存的任何背景颜色显示它们.保存透明PNG时,请使用与网站相同的背景颜色保存它们.它看起来比IE6中的PNG图像周围的白色或黑色框更好.