这是一个生成水印的例子.
<?php
header("Content-type: image/png");
$filename='source.jpg';
$sourceImg=imagecreatefromjpeg($filename);
$waterImg=imagecreatefrompng('Logo.png');
$bg_color = imagecolorat($waterImg,1,1);
imagecolortransparent($waterImg,$bg_color); #图片内某颜色的透明
$sourceX = imagesx($sourceImg);
$sourceY = imagesy($sourceImg);
$waterX = imagesx($waterImg);
$waterY = imagesy($waterImg);
$x = ($sourceX-$waterX)/2;
$y = ($sourceY-$waterY)/2;
imagecopymerge($sourceImg,$waterImg,$x,$y,0,0,$waterX,$waterY,50); #最后一个参数是合并度也就是后面那张图片的透明度.
imagepng($sourceImg);
?>
<?php
header("Content-type: image/png");
$filename='source.jpg';
$sourceImg=imagecreatefromjpeg($filename);
$waterImg=imagecreatefrompng('Logo.png');
$bg_color = imagecolorat($waterImg,1,1);
imagecolortransparent($waterImg,$bg_color); #图片内某颜色的透明
$sourceX = imagesx($sourceImg);
$sourceY = imagesy($sourceImg);
$waterX = imagesx($waterImg);
$waterY = imagesy($waterImg);
$x = ($sourceX-$waterX)/2;
$y = ($sourceY-$waterY)/2;
imagecopymerge($sourceImg,$waterImg,$x,$y,0,0,$waterX,$waterY,50); #最后一个参数是合并度也就是后面那张图片的透明度.
imagepng($sourceImg);
?>
解决方案 »
- TCPDF windows下日文显示乱码,中文不显示....
- 关于PHP的session问题和网易登录的SESSION实现。
- liunx下循环执行php文件
- 请教如何传递数组
- Email 问题,在线等。。
- 关于发送带附件的邮件的问题
- 请帮忙修改优化php代码
- 自己看vbb3的session处理的心得,写出来希望各位指点。我学php没几天,以前搞VC的。谢谢
- test.php?user_id=XXX问题!
- PHP连接https SOAP Webservice问题,请高手进。
- 我有个客户,要求按照星期几的不同,而显示完全不同的网页,不止7个网站那么简单
- 554 this mail is rejected by antispam system
header("Content-type: image/png"); # 设置输出文件头
$filename='source.jpg'; # 设置源文件地址
$sourceImg=imagecreatefromjpeg($filename); # 读取源图像
$waterImg=imagecreatefrompng('Logo.png'); # 读取水印标志
$bg_color = imagecolorat($waterImg,1,1); # 取出标志中需要设为透明的颜色
imagecolortransparent($waterImg,$bg_color); # 设置标志中需要透明的颜色
$sourceX = imagesx($sourceImg); # 取得源图像宽度
$sourceY = imagesy($sourceImg); # 取得源图像高度
$waterX = imagesx($waterImg);# 取得标志像宽度
$waterY = imagesy($waterImg);# 取得标志像高度
$x = ($sourceX-$waterX)/2;
$y = ($sourceY-$waterY)/2; #计算中心位置
imagecopymerge($sourceImg,$waterImg,$x,$y,0,0,$waterX,$waterY,50); #合并图像 合并度设置为50 .100为完全合并.相当于把第二个参数里的图像透明到原来的50/100然后贴到第一个参数的图像里
imagepng($sourceImg);#输出图像
?>
这是我参照你的代码写的$src = imagecreatefrompng("a.png"); # load 图片
$width = imagesx($src);
$height = imagesy($src);
$dst = imagecreate($width, $height); #创建一个新图片
$bgcolor = imagecolorallocate($dst,0,0,0);
imagecolortransparent($dst,$bgcolor); #抹去背景色
imagecopymerge($dst,$src,0,0,0,0,$width,$height,80); #合并图片
imagepng($dst, "b.png"); #写入文件结果背景色是黑色的,郁闷
imagecolorallocate 是用来消除第二张图片中某一颜色的,相当于镂空,然后面的图像能够被看到.
是为了实现水印的特殊效果才弄得.
$src = imagecreatefrompng("a.png"); # load 图片
$width = imagesx($src);
$height = imagesy($src);
$dst = imagecreate($width, $height); #创建一个新图片
$bgcolor = imagecolorallocate($dst,0,0,0);
imagecolortransparent($dst,$bgcolor); #抹去背景色
#到这里为止是生成一张透明的图片,如果没有下面的一行而直接保存的话是一张完全透明的图片
#不是生成黑色背景图片
imagecopymerge($dst,$src,0,0,0,0,$width,$height,80); #合并图片
imagepng($dst, "b.png"); #写入文件 另外,png图片本来有一部分是透明的,不需要镂空的,而且镂空的效果和png图片的透明效果不是一样的
而且我如果把imagecopymerge改为imagecopy的话是没有问题的,相当于复制了一张图片
<?php
$src = imagecreatefrompng("Logo.png"); # load 图片
$width = imagesx($src);
$height = imagesy($src);
$dst = imagecreate($width,$height);
imagecolorallocatealpha ($dst,255,255,255,127);
imagecopymerge($dst,$src,0,0,0,0,$width,$height,20);
imagepng($dst);
?>按手册来看,所有的施行都是没错的.
但是:<?php
$src = imagecreatefrompng("Logo.png"); # load 图片
$width = imagesx($src);
$height = imagesy($src);
$dst = imagecreate($width,$height);
imagecolorallocatealpha($dst,255,0,0,102); # 这里设背景色为102透明度(共127)
imagecopymerge($dst,$src,0,0,0,0,$width,$height,20); #这条语句会让上面那条失效.
imagepng($dst);
?>
我刚还试了下读取透明png与其合并也会出现黑色背景的现象.
Image magick Functions 能可以处理.我去看看……
我用这个函数将一个Png图片覆盖到另外一个图片的时候,本来png图片透明的部分变成黑色了