为了账号安全,请及时绑定邮箱和手机立即绑定

老师讲的有一个问题

用imagecopymerge();函数是混合模式的,将两个图片混合了,所以png图片的透明效果就没了

用imagecopy();函数直接合并,所有最后保留了透明效果。

正在回答

3 回答

我的代码都实验过的,,同学,,我没有实验过,也不可能去回答的,,

<?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时效果如下:

http://img1.sycdn.imooc.com//575d862400019ecb03570208.jpg

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

http://img1.sycdn.imooc.com//575d869b0001fe5903980342.jpg

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

http://img1.sycdn.imooc.com//575d86e70001172b03470308.jpg

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

http://img1.sycdn.imooc.com//575d87480001250603300347.jpg

所以:最后我得出的结论时:

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 透明。 

最后:因为学习这个课程好久了,,如果有错误望指出,,大家一起学习,

1 回复 有任何疑惑可以回复我~

imagecopymerge()最后一个参数是设置png图片不透明部分复制到目标图片时的透明度的吧,

当它的最后一个参数等于100时,和imagecopy()是一样的,,

0 回复 有任何疑惑可以回复我~
#1

小王子抓猫咪

你自己试验过imagecopymerge()最后一个参数传100的情况吗。麻烦你自己先试验一下,看看效果,再来回答人家的问题。
2016-06-12 回复 有任何疑惑可以回复我~
#2

王小仙 回复 小王子抓猫咪

同学,,请看一下我下面的回答,,对你的疑问做出的一些解释,,谢谢你,
2016-06-13 回复 有任何疑惑可以回复我~

用imagecopymerge();函数是混合模式的,将两个图片混合了,所以png图片的透明效果就没了

用imagecopy();函数直接合并,所有最后保留了透明效果。


0 回复 有任何疑惑可以回复我~
#1

小王子抓猫咪

你是对的
2016-06-12 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

老师讲的有一个问题

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信