老师讲的有一个问题

来源:3-2 给图片添加图片水印—操作图片

timelikesong

2015-05-02 11:58

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

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

写回答 关注

3回答

  • 王小仙
    2016-06-13 00:07:31

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

    <?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://img.mukewang.com/575d862400019ecb03570208.jpg

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

    http://img.mukewang.com/575d869b0001fe5903980342.jpg

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

    http://img.mukewang.com/575d86e70001172b03470308.jpg

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

    http://img.mukewang.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 透明。 

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

  • 王小仙
    2015-11-09 12:04:08

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

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

    王小仙 回复小王子抓猫咪

    同学,,请看一下我下面的回答,,对你的疑问做出的一些解释,,谢谢你,

    2016-06-13 00:09:04

    共 2 条回复 >

  • timelikesong
    2015-05-02 11:58:37

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

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


    小王子抓猫咪

    你是对的

    2016-06-12 22:45:42

    共 1 条回复 >

GD库实现图片水印与缩略图

带你快速高效的完成图片处理工作,还可以加深对面向对象的理解

19005 学习 · 162 问题

查看课程

相似问题