老师讲的有一个问题
用imagecopymerge();函数是混合模式的,将两个图片混合了,所以png图片的透明效果就没了
用imagecopy();函数直接合并,所有最后保留了透明效果。
用imagecopymerge();函数是混合模式的,将两个图片混合了,所以png图片的透明效果就没了
用imagecopy();函数直接合并,所有最后保留了透明效果。
2015-05-02
我的代码都实验过的,,同学,,我没有实验过,也不可能去回答的,,
<?php
//这是整体代码
$src='images/001.jpg';
$info=getimagesize($src);
$type=image_type_to_extension($info[2],false);
$fun="imagecreatefrom{$type}";
$image=$fun($src);
/*操作水印图片*/
//1.设置水印路径
$imageMark='images/logo.png';
//2.获取水印图片基本信息
$info2=getimagesize($imageMark);
//3.获取水印图片类型
$type2=image_type_to_extension($info2[2],false);
//4.创建水印图像类型
$fun2="imagecreatefrom{$type2}";
//5.把水印图片复制到内存中
$water=$fun2($imageMark);
//6.合并图片当最后一个参数设置为100时和imagecopy一样
imagecopymerge($image, $water, 20, 30, 0, 0, $info2[0], $info2[1],20);
//imagecopy($image, $water, 20, 30, 0, 0, $info2[0], $info2[1]);
//7.销毁水印图片;
imagedestroy($water);
/*输出图片*/
header('Content-type:'.$info['mime']);
$func="image{$type}";
$func($image);
imagedestroy($image);
?>imagecopymerge($image, $water, 20, 30, 0, 0, $info2[0], $info2[1],20); //最后一个参数为20时效果如下:

imagecopymerge($image, $water, 20, 30, 0, 0, $info2[0], $info2[1],50); //最后一个参数时50时的效果:

imagecopymerge($image, $water, 20, 30, 0, 0, $info2[0], $info2[1],100); //最后一个参数时100时的效果:

imagecopy($image, $water, 20, 30, 0, 0, $info2[0], $info2[1]); //使用imagecopy()的效果

所以:最后我得出的结论时:
imagecopymerge()最后一个参数是设置png图片不透明部分复制到目标图片时的透明度的吧,
当它的最后一个参数等于100时,和imagecopy()是一样的,,
php官方手册的说法是:
bool imagecopymerge ( resource $dst_im , resource $src_im , int $dst_x , int $dst_y , int $src_x , int $src_y , int $src_w , int $src_h , int $pct )
将 src_im 图像中坐标从 src_x,src_y 开始,宽度为 src_w,高度为 src_h 的一部分拷贝到 dst_im 图像中坐标为 dst_x 和 dst_y 的位置上。两图像将根据 pct 来决定合并程度,其值范围从 0 到 100。当 pct = 0 时,实际上什么也没做,当为 100 时对于调色板图像本函数和 imagecopy() 完全一样,它对真彩色图像实现了 alpha 透明。
最后:因为学习这个课程好久了,,如果有错误望指出,,大家一起学习,
举报