PHP实现根据图片色界在不同位置加水印的方法


Posted in PHP onAugust 08, 2015

本文实例讲述了PHP实现根据图片色界在不同位置加水印的方法。分享给大家供大家参考。具体如下:

在使用php编程的时候, 很多时候需要对上传的图片加水印,来确定图片版权和出处. 但是,一般情况下加水印的位置是图片的右下角, 但是,不同图片的色阶不同,有时候我们 图片的水印和图片本身色阶相同,就会造成水印不明显.

下面这段代码可以实现自动识别图片的色阶,更加色阶差来添加图片的水印,这样可以避免水印和图片色阶一样的弊端.

<?php
 function add_wm($nmw_water, $src_file, $output_file, $x, $y) {
 if(file_exists($output_file))
 return;
 $w1 = MagickGetImageWidth($nmw_water);
 $h1 = MagickGetImageHeight($nmw_water);
 $nmw =NewMagickWand();
 MagickReadImage($nmw, $src_file);
 // 默认的加水印位置调整
 $lt_w = 50;
 $lt_h = 50;
 if($x == 0){
 $w = MagickGetImageWidth($nmw);
 $h = MagickGetImageHeight($nmw);
 $x = $w;
 $y = $h;
 }else{
 // 根据具体情况调整
 $lt_w = 30;
 $lt_h = 40;
 }
 MagickCompositeImage($nmw, $nmw_water, MW_OverCompositeOp, $x - $w1 - $lt_w, $y - $h1 - $lt_h);
 MagickWriteImage($nmw, $output_file);
 DestroyMagickWand($nmw);
 }
 // 还是groovy的eachFileRecurse好用啊
 function add_wm_recurse($nmw_water, $to_dir, $output_dir, $arr) {
 $dp = dir($to_dir);
 while($file=$dp->read()){
 if($file != '.' && $file != '..'){
 if(is_dir($to_dir . '/' . $file)){
  mkdir($output_dir . '/' . $file);
  add_wm_recurse($nmw_water, $to_dir . '/' . $file, $output_dir . '/' . $file, $arr);
 }else{
  if(!array_key_exists($to_dir . '/' . $file, $arr)){
  continue;
  }
  $sub_arr = $arr[$to_dir . '/' . $file];
  if($sub_arr){
  $x = intval($sub_arr[0]);
  $y = intval($sub_arr[1]);
  add_wm($nmw_water, $to_dir . '/' . $file, $output_dir . '/' . $file, $x, $y);
  }
 }
 }
 }
 $dp->close();
 }
 $to_dir = './resized';
 $output_dir = './output';
 // 这个是我用java的ImageIO遍历图片像素获取的符合裤子颜色的区域的坐标array(posX, posY)
 $arr = array(
 array(50, 50)
 );
 $water = './water.png';
 $nmw_water =NewMagickWand();
 MagickReadImage($nmw_water, $water);
 add_wm_recurse($nmw_water, $to_dir, $output_dir, $arr);
 DestroyMagickWand($nmw_water);
?>

补充:

PHP图像处理模块 MagickWand用法

MagickWand 是一个PHP的模块,用来访问 ImageMagick 的图像处理库。下面是一个使用 MagicWand 的代码片段:

$magick_wand=NewMagickWand();
MagickReadImage($magick_wand,'rose.jpg');
$drawing_wand=NewDrawingWand();
DrawSetFont($drawing_wand,"/usr/share/fonts/bitstream-vera/Vera.ttf");
DrawSetFontSize($drawing_wand,20);
DrawSetGravity($drawing_wand,MW_CenterGravity);
$pixel_wand=NewPixelWand();
PixelSetColor($pixel_wand,"white");
DrawSetFillColor($drawing_wand,$pixel_wand);
if (MagickAnnotateImage($magick_wand,$drawing_wand,0,0,0,"Rose") != 0)
{
 MagickEchoImageBlob( $magick_wand );
}
else
{
 echo MagickGetExceptionString($magick_wand);
}
?>

安装方法:

1. 下载 php_magickwand_q16_st.dll for 5.2.x
2. 将其放在PHP的扩展目录
3. 在php.ini文件总增加 extension=php_magickwand_q16_st.dll
4. 重新启动apache

希望本文所述对大家的php程序设计有所帮助。

PHP 相关文章推荐
PHP+DBM的同学录程序(1)
Oct 09 PHP
关于Intype一些小问题的解决办法
Mar 28 PHP
sqlyog 中文乱码问题的设置方法
Oct 19 PHP
PHP Google的translate API代码
Dec 10 PHP
php 取得瑞年与平年的天数的代码
Aug 10 PHP
php array_walk() 数组函数
Jul 12 PHP
探讨PHP删除文件夹的三种方法
Jun 09 PHP
php中字符查找函数strpos、strrchr与strpbrk用法
Nov 18 PHP
php实现网站文件批量压缩下载功能
Oct 28 PHP
php四种定界符详解
Feb 16 PHP
laravel 验证错误信息到 blade模板的方法
Sep 29 PHP
Laravel5.5 手动分页和自定义分页样式的简单实现
Oct 15 PHP
PHP中使用curl伪造IP的简单方法
Aug 07 #PHP
smarty中常用方法实例总结
Aug 07 #PHP
php递归函数三种实现方法及如何实现数字累加
Aug 07 #PHP
PHP下载生成的csv文件及问题总结
Aug 06 #PHP
PHP获取一年有几周以及每周开始日期和结束日期
Aug 06 #PHP
简单介绍win7下搭建apache+php+mysql开发环境
Aug 06 #PHP
php实现无限级分类(递归方法)
Aug 06 #PHP
You might like
php适配器模式介绍
2012/08/14 PHP
PHP获取php,mysql,apche的版本信息示例代码
2014/01/16 PHP
php实现的短网址算法分享
2014/06/20 PHP
PHP+Javascript实现在线拍照功能实例
2015/07/18 PHP
PHP实现路由映射到指定控制器
2016/08/13 PHP
PHP读取zip文件的方法示例
2016/11/17 PHP
Ajax请求PHP后台接口返回信息的实例代码
2018/08/21 PHP
Laravel框架之解决前端显示图片问题
2019/10/24 PHP
雄兵连第三季海报曝光,艾妮熙德成主角,蔷薇新造型
2021/03/09 国漫
jQuery AJAX 调用WebService实现代码
2010/03/24 Javascript
ajax的hide隐藏问题解决方法
2012/12/11 Javascript
JS数组的常见用法实例
2015/02/10 Javascript
JS实现的简洁二级导航菜单雏形效果
2015/10/13 Javascript
JavaScript实现仿淘宝商品购买数量的增减效果
2016/01/22 Javascript
VUE 更好的 ajax 上传处理 axios.js实现代码
2017/05/10 Javascript
JavaScript取得gridview中获取checkbox选中的值
2017/07/24 Javascript
axios简单实现小程序延时loading指示
2018/07/30 Javascript
浅谈监听单选框radio改变事件(和layui中单选按钮改变事件)
2019/09/10 Javascript
JS函数基本定义与用法示例
2020/01/15 Javascript
vue和小程序项目中使用iconfont的方法
2020/05/19 Javascript
ES6的循环与可迭代对象示例详解
2021/01/31 Javascript
Python实现统计单词出现的个数
2015/05/28 Python
Python Unittest自动化单元测试框架详解
2018/04/04 Python
python中删除某个元素的方法解析
2019/11/05 Python
numpy创建单位矩阵和对角矩阵的实例
2019/11/29 Python
tensorflow 报错unitialized value的解决方法
2020/02/06 Python
pandas数据选取:df[] df.loc[] df.iloc[] df.ix[] df.at[] df.iat[]
2020/04/24 Python
Python 实现微信自动回复的方法
2020/09/11 Python
介绍一下代理模式(Proxy)
2014/10/17 面试题
大学毕业生文采飞扬的自我鉴定
2013/12/03 职场文书
淘宝活动策划方案
2014/02/06 职场文书
春节联欢晚会主持词范文
2014/03/24 职场文书
CSS 新特性 contain控制页面的重绘与重排问题
2021/04/30 HTML / CSS
OpenCV3.3+Python3.6实现图片高斯模糊
2021/05/18 Python
解决SpringBoot文件上传临时目录找不到的问题
2021/07/01 Java/Android
Python+OpenCV实现图片中的圆形检测
2022/04/07 Python