(1)imagecreate
(2)imagecreatetruecolor
(3)imagecopy
(4)imagecopymerge
我使用上面的PHP函数并感到困惑。
首先我准备两个png文件......
1.png http://www.capbite.com/subfolder/lion/test/1.png
具有透明背景和黑点的QR码,我是通过这些代码创建的(只有关键点,而不是全部)。
$image = imagecreate($width, $height);
imagesavealpha($image, true);
$color1 = imagecolorallocatealpha($image, 0, 0, 0, 127);
imageColorallocate($image, 0, 0, 0);
imagefill($image, 0, 0, $color1);
...
imagepng($image, $filename);
2.png http://www.capbite.com/subfolder/lion/test/2.png
我制作一个png并使用一种颜色来填充MS画颜色。
准备完成。然后代码是
<?php
//use imagecreate or imagecreatetruecolor
$image = imagecreate(50, 50);
//$image = imagecreatetruecolor(50, 50);
//save the alpha channel
imagesavealpha($image, true);
//alphablending set false, then transparent color can cover the canvas
imagealphablending($image, false);
//take a transparent color and fill it
imagefill($image, 0, 0, imagecolorallocatealpha($image, 0, 0, 0, 127));
//draw the ellipse
imagefilledellipse($image, 15, 15, 30, 30, imagecolorallocate($image, 255, 0, 0));
imagepng($image, '3.png');
imagedestroy($image);
//merge image
$im_background = imagecreatefrompng('1.png');
$im_foreground = imagecreatefrompng('3.png');
list($width, $height) = getimagesize('3.png');
//use imagecopy or imagecopymerge
imagecopy($im_background, $im_foreground, (int)35, (int)35, 0, 0, $width, $height);
//imagecopymerge($im_background, $im_foreground, (int)35, (int)35, 0, 0, $width, $height, 100);
imagepng($im_background, 'x-x.png');
imagedestroy($im_background);
imagedestroy($im_foreground);
代码制作3.png像这样www.capbite.com/subfolder/lion/test/3.png
现在如果我使用
1.png + imagecreate + imagecopy将获得http://www.capbite.com/subfolder/lion/test/4-1.png
1.png + imagecreate + imagecopymerge将获得http://www.capbite.com/subfolder/lion/test/4-2.png
1.png + imagecreatetruecolor + imagecopy将获得http://www.capbite.com/subfolder/lion/test/4-3.png
1.png + imagecreatetruecolor + imagecopymerge将获得http://www.capbite.com/subfolder/lion/test/4-4.png
2.png + imagecreate + imagecopy将获得http://www.capbite.com/subfolder/lion/test/5-1.png
2.png + imagecreate + imagecopymerge将获得http://www.capbite.com/subfolder/lion/test/5-2.png
2.png + imagecreatetruecolor + imagecopy将获得http://www.capbite.com/subfolder/lion/test/5-3.png
2.png + imagecreatetruecolor + imagecopymerge将获得http://www.capbite.com/subfolder/lion/test/5-4.png
很难描述通过不同方式制作的图像,因此我粘贴了关于图像的链接,但我的声誉不足以发布更多链接或图像... - 由Niet编辑;)
我的问题是,只是3.png,它有一个透明的背景,甚至使用不同的创建功能,但是当它复制到我创建的另一个图像或MS画面时,结果是我见面。
imagecreate和amp;之间有什么不同? imagecreatetruecolor make 4-1.png和4-3.png?
imagecopy和amp;之间有什么不同? imagecopymerge(甚至pct设置为100)make 4-3.png和4-4.png?
我创建的图像或MS绘制的图像有什么不同4-3.png和5-3.png?
非常感谢!
答案 0 :(得分:2)
我建议使用imagecreate
,而不是imagecreatetruecolor
。
使用imagecreate
时,您定义的第一种颜色将是填充整个画布的背景颜色。这通常是你的“透明”颜色,但通常更好(阅读:在文件中更有效)这样做:
imagecolortransparent($img, imagecolorallocate($img, 255, 0, 255));
通过这种方式,你没有使用alpha通道,你只是告诉它“我用粉红色绘制的任何东西都是透明的” - 顺便说一句,这就是GIF图像中透明度的工作方式,而且它也是这种做法的“传统”方式可以追溯到许多年前的旧游戏!
使用imagecreate
生成的图像,复制可以更轻松地处理批次,因为GD确切地知道什么颜色是“透明的”,因此不应该复制到目标上。使用imagecreatetruecolor
时,您会进入复杂而混乱的合成业务......
我希望这会帮助你。 GD可以成为一个棘手的野兽,但是一旦你了解了基础知识,你就应该好好去。