在 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 的示例在评论
像这样保存 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 的示例在评论