2017/01/20 PHP/Python/Java 2 Comments php平铺水印/图片添加水印/图片合成 php图片加水印,php文字水印,php平铺水印,php图片水印,php图片添加图文 平铺水印。 **图片添加文字水印** ```php $bigImgPath = '08.jpg'; $img = imagecreatefromstring(file_get_contents($bigImgPath)); $color = imagecolorallocatealpha($img,255,255,255,60); $font = './zzgkt.ttf';//字体 $fontSize = 18; //字体大小 $circleSize = 15; //旋转角度 $left = 50; //左边距 $top = 200; //顶边距 $str = '未来往事[www.fity.cn]'; imagefttext($img, $fontSize, $circleSize, $left, $top, $color, $font, $str); //imagettftext($img,$fontSize,$circleSize,$left,$top,$color,$font,$str); header("content-type:image/jpeg"); imagejpeg($img); imagedestroy($img); ``` 效果预览: [![图片添加文字水印](https://www.fity.cn/usr/uploads/2017/03/1490000384_3298d4e5.png "图片添加文字水印")](https://www.fity.cn/usr/uploads/2017/03/1490000384_3298d4e5.png "图片添加文字水印") **图片合成 图片水印** ```php $bigImgPath = '08.jpg'; $qCodePath = 'cli.png'; $img = imagecreatefromstring(file_get_contents($bigImgPath)); //或者imagecreatefromjpeg $qCodeImg = imagecreatefrompng($qCodePath); list($qCodeWidth, $qCodeHight, $qCodeType) = getimagesize($qCodePath); $fontSize = 18; //字体大小 $circleSize = 15; //旋转角度 $left = 308; //左边距 $top = 258; //顶边距 // imagecopymerge使用注解 imagecopymerge($img, $qCodeImg, $left, $top, 0, 0, $qCodeWidth, $qCodeHight, 100); list($bigWidth, $bigHight, $bigType) = getimagesize($bigImgPath); switch ($bigType) { case 1: //gif header('Content-Type:image/gif'); imagegif($img); break; case 2: //jpg header('Content-Type:image/jpg'); imagejpeg($img); break; case 3: //jpg header('Content-Type:image/png'); imagepng($img); break; default: # code... break; } imagedestroy($img); imagedestroy($qcodeImg); ``` 效果预览: [![图片合成图片水印](https://www.fity.cn/usr/uploads/2017/03/1490000384_25587af3.png "图片合成图片水印")](https://www.fity.cn/usr/uploads/2017/03/1490000384_25587af3.png "图片合成图片水印") 关于水印图片不透明可以参考本博客另外一篇文章《[imagecopymerge合成图片 黑色背景问题解决](https://www.fity.cn/post/609.html "imagecopymerge合成图片 黑色背景问题解决")》 **文字水印平铺 图片水印平铺** **方法一:相对来说该方式较为传统~~~** ```php //echo $this->filePath; $groundImage = './p1.jpg'; if(!empty($groundImage) && file_exists($groundImage)){ $ground_info = getimagesize($groundImage); $ground_w = $ground_info[0];//取得背景图片的宽 $ground_h = $ground_info[1];//取得背景图片的高 switch($ground_info[2])//取得背景图片的格式 { case 1:$ground_im = imagecreatefromgif($groundImage);break; case 2:$ground_im = imagecreatefromjpeg($groundImage);break; case 3:$ground_im = imagecreatefrompng($groundImage);break; default:die($formatMsg); } }else{ die("需要加水印的图片不存在!"); } $logo = 'water_logo.png'; $watermark = imagecreatefrompng($logo); $x_length = $ground_w+260; //x轴总长度 $y_length = $ground_h+190; //y轴总长度 $x_padding = 15; //x轴与y轴起始位置边距 $y_padding = 15; //imagecopymerge_alpha($ground_im, $watermark, $x, $y, 0, 0, 1920, 1000, 100); for ($x=$x_padding;$x<$x_length; $x++){ for ($y=$y_padding; $y<$y_length ; $y++){ imagecopymerge_alpha($ground_im, $watermark, $x, $y, 0, 0, 108, 52, 100);//108 52为水印的长宽,100为透明度 $y += 190 ; } $x += 260 ; } //删除原图片 @unlink($groundImage); switch($ground_info[2])//取得背景图片的格式 { case 1:imagegif($ground_im,$groundImage,100);break; case 2:imagejpeg($ground_im,$groundImage,100);break; case 3:imagepng($ground_im,$groundImage,9);break; default:die($errorMsg); } //释放内存 unset($ground_info); imagedestroy($ground_im); function imagecopymerge_alpha($dst_im, $src_im, $dst_x, $dst_y, $src_x, $src_y, $src_w, $src_h, $pct){ $opacity=$pct; // getting the watermark width $w = imagesx($src_im); // getting the watermark height $h = imagesy($src_im); // creating a cut resource $cut = imagecreatetruecolor($src_w, $src_h); // copying that section of the background to the cut imagecopy($cut, $dst_im, 0, 0, $dst_x, $dst_y, $src_w, $src_h); // placing the watermark now imagecopy($cut, $src_im, 0, 0, $src_x, $src_y, $src_w, $src_h); imagecopymerge($dst_im, $cut, $dst_x, $dst_y, $src_x, $src_y, $src_w, $src_h,$opacity); } ``` **方法二:使用php_imagick扩展类库** ```php $image = new imagick('08.jpg'); $im = new imagick(); $im->newimage( 140, 80, new imagickpixel( "none" ) ); $draw = new imagickdraw(); $draw->setfillcolor(new imagickpixel( "grey" )); $draw->setgravity(imagick::gravity_northwest); $draw->annotation(10,10 ,'copyright'); $draw->setgravity(imagick::gravity_southeast); $draw->annotation(5,15 ,'copyright'); $im->drawimage( $draw); $image = $image->textureimage($im); $image->compositeimage($image,imagick::composite_copy,0,0); header( "content-type: image/{$image->getimageformat()}" ); $image->writeimage('wmark_text_tiled.jpg'); $image->clear(); $image->destroy(); ``` 效果预览: [![平铺水印](https://www.fity.cn/usr/uploads/2017/03/1490000384_87932caa.png "平铺水印")](https://www.fity.cn/usr/uploads/2017/03/1490000384_87932caa.png "平铺水印") **PS:**使用该方式需要先配置php环境支持imagick扩展类库,类库下载: http://pecl.php.net/package/imagick **综合Demo示例** [点击打开,建议使用手机浏览器打开测试](https://www.fity.cn/demo/cropper/ "点击打开,建议使用手机浏览器打开测试") [![综合demo](https://www.fity.cn/usr/uploads/2017/03/1489832104_56825f64.png "综合demo")](https://www.fity.cn/usr/uploads/2017/03/1489832104_56825f64.png "综合demo") 本文最后更新于 2019-07-10 19:24:09 并被添加「php函数 图片处理」标签,已有 5120 位童鞋阅读过。 本文作者:未来往事 本文链接:https://felixway.cn/post/613.html 本站使用「署名 4.0 国际」创作共享协议,可自由转载、引用,但需署名作者且注明文章出处 相关文章 使用fastcgi_finish_request实现异步操作提高页面响应速度 计算两个经纬度的距离/偏差米数_计算周边范围经纬度值 html无损截取_保留html标签 jQuery图片裁剪插件Cropper URL数字安全码随机拼组生成及校验
dome已经失效了 麻烦发一份dome到邮箱327712043@qq.com 行不
@小五
你好 欢迎来访 博客近期在更新调整基础程序 会尽快将老的附件转移进来 感谢支持。