在 alpha 混合图像上设置背景颜色

Set background color on an alpha blended image

像这样保存 alpha 混合图像时:

使用 imagejpeg(),使用下面的代码,我得到了黑色背景。

$sourcePath = "<path to the image above>";
$destPath = "<path to where I want to store it>";
$image = imagecreatefrompng($sourcePath);
imagejpeg($image, $destPath, 85);

我最终得到了一个黑色方块。这显然不是我需要的,背景应该是白色的。

我阅读了有关 alpha 混合的内容,尝试了 PHP 中 GD 函数的一些操作,但无法完成。也许我应该在保存之前将图像复制到新图像,但我不想这样做。

我的问题是: 使用 PHP GD 函数保存上面具有适当白色背景的图像的最简单方法是什么?输出中不需要 alpha 混合,我想要的只是白色背景。

奖金问题: 有没有办法检测图像是否有 alpha 通道?

我用这段代码复制图片时成功了:

// start with the same code as in the question
$sourcePath = "<path to the image above>";
$destPath   = "<path to where I want to store it>";
$image      = imagecreatefrompng($sourcePath);
// get image dimensions 
$width      = imagesx($image);
$height     = imagesy($image);
// create a new image with the same dimensions
$newImage   = imagecreatetruecolor($width, $height);
// get white in the new image
$white      = imagecolorallocate($newImage, 255, 255, 255);
// and fill the new image with that
imagefilledrectangle($newImage, 0, 0, $width, $height, $white);
// now copy the alpha blended image over it
imagecopy($newImage, $image, 0, 0, 0, 0, $width, $height);
// and finally the jpeg output
imagejpeg($newImage, $destPath, 85);

这确实解决了我的问题,但是真的需要这种复制吗?

我也仍然无法检测图像是否具有 alpha 通道。

您可以使用 imagealphablending and imagesavealpha 保存 alpha 通道

$imgPng = imagecreatefrompng($strImagePath);
imagealphablending($imgPng, true);
imageSaveAlpha($imgPng, true);

header("Content-type: image/png");
imagepng($imgPng);

关于 alpha 通道,您可以使用 imagecolorat 分析像素。分析 alpha 的示例在评论