gpt4 book ai didi

php - imagecolortransparent() 在 PHP 中将所有黑色像素变为透明

转载 作者:搜寻专家 更新时间:2023-10-31 22:11:55 26 4
gpt4 key购买 nike

是的,所以我开始在 PHP 中构建一个函数,该函数可以将两个图像合并在一起,同时保留 PNG 文件的透明背景 - 我成功地完成了 - 使用下面的代码,

function imageCreateTransparent($x, $y) {

$imageOut = imagecreatetruecolor($x, $y);
$colourBlack = imagecolorallocate($imageOut, 0, 0, 0);
imagecolortransparent($imageOut, $colourBlack);
return $imageOut;
}



function mergePreregWthQR($preRegDir, $qrDir){

$top_file = $preRegDir;
$bottom_file = $qrDir;


$top = imagecreatefrompng($top_file);
$bottom = imagecreatefrompng($bottom_file);

// get current width/height
list($top_width, $top_height) = getimagesize($top_file);
list($bottom_width, $bottom_height) = getimagesize($bottom_file);

// compute new width/height
$new_width = ($top_width > $bottom_width) ? $top_width : $bottom_width;
$new_height = $top_height + $bottom_height;

// create new image and merge
$new = imageCreateTransparent($new_width,$new_height);
imagecopy($new, $bottom, 0, $top_height+1, 0, 0, $bottom_width, $bottom_height);
imagecopy($new, $top, 0, 0, 0, 0, $top_width, $top_height);

$filename = "merged_file.png";

// save to file
imagepng($new, $filename);

}

mergePreregWthQR("file.png", "qr.png");

这成功地合并了两个图像并保持透明背景,唯一的问题是合并图像中的任何黑色像素都变成了透明,合并的结果显示在这里 > merged image

上图是水母图,下图是二维码,只有放在非白色背景上才能看到。所以我很确定正在发生的事情是 imagecolortransparent($imageOut, $colourBlack); 将新创建的 merged_file.png 中的每个 黑色像素变为透明。我通过将 imageCreateTransparent($x, $y) 稍微更改为如下所示来测试该理论,

function imageCreateTransparent($x, $y) {

$imageOut = imagecreatetruecolor($x, $y);
$colourBlack = imagecolorallocate($imageOut, 55, 55, 55);
imagefill ( $imageOut, 0, 0, $colourBlack );

imagecolortransparent($imageOut, $colourBlack);

return $imageOut;

所以在这个函数中,我用颜色 (55, 55, 55) 填充整个图像,然后在我的 imagecolortransparent() 函数中将此颜色设置为透明。这样就可以了,我的 QR 码会按原样显示。唯一的问题是我认为这是一个快速而肮脏的黑客,如果有人在上传的图像中有颜色(55、55、55),它会变成透明的吗?所以我很想知道另一种解决方案是什么?谢谢。

最佳答案

您是否尝试过仅在顶部图像上将黑色像素设置为透明,然后进行复制?

The PHP manual states:“仅使用 imagecopymerge() 和真彩色图像复制透明度,而不使用 imagecopy() 或调色板图像。”

所以这可能是在复制其他两个之前在最终图像上应用透明度的替代解决方案。

另一件可能值得关注的事情是:imagealphablending . php 站点的评论中提到,设置不正确会影响应用了 alpha 的图像的分层。

关于php - imagecolortransparent() 在 PHP 中将所有黑色像素变为透明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11988392/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com