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 相关文章推荐
介绍几个array库的新函数 php
Dec 29 PHP
Adodb的十个实例(清晰版)
Dec 31 PHP
给apache2.2加上mod_encoding模块後 php5.2.0 处理url出现bug
Apr 12 PHP
php 获取百度的热词数据的代码
Feb 18 PHP
php字符串替换函数substr_replace()用法实例
Mar 17 PHP
PHP中curl_setopt函数用法实例分析
Apr 16 PHP
教你识别简单的免查杀PHP后门
Sep 13 PHP
Yii框架结合sphinx,Ajax实现搜索分页功能示例
Oct 18 PHP
PHP实现json_decode不转义中文的方法
May 20 PHP
PHP面向对象程序设计之对象的遍历操作示例
Jun 12 PHP
YII2框架中ActiveDataProvider与GridView的配合使用操作示例
Mar 18 PHP
详解Laravel框架的依赖注入功能
May 27 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 学习提高路线分享
2011/10/23 PHP
php实现两表合并成新表并且有序排列的方法
2014/12/05 PHP
php通过array_unshift函数添加多个变量到数组前端的方法
2015/03/18 PHP
php实现屏蔽掉黑帽SEO的搜索关键字
2015/04/15 PHP
详解WordPress中提醒安装插件以及隐藏插件的功能实现
2015/12/25 PHP
JavaScript中的Document文档对象
2008/01/16 Javascript
jquery 弹出登录窗口实现代码
2009/12/24 Javascript
基于jquery的兼容各种浏览器的iframe自适应高度的脚本
2010/08/13 Javascript
JavaScript在多浏览器下for循环的使用方法
2012/11/07 Javascript
js与jquery获取父元素,删除子元素的两种不同方法
2014/01/09 Javascript
jquery动态添加元素事件失效问题解决方法
2014/05/23 Javascript
JavaScript中实现最高效的数组乱序方法
2014/10/11 Javascript
使用AOP改善javascript代码
2015/05/01 Javascript
jQuery实现元素拖拽并cookie保存顺序的方法
2016/02/20 Javascript
基于js实现checkbox批量选中操作
2016/11/22 Javascript
手机移动端实现 jquery和HTML5 Canvas的幸运大奖盘特效
2016/12/06 Javascript
angularJS利用ng-repeat遍历二维数组的实例代码
2017/06/03 Javascript
详解webpack+angular2开发环境搭建
2017/06/28 Javascript
vue form check 表单验证的实现代码
2018/12/09 Javascript
[42:22]DOTA2上海特级锦标赛C组小组赛#1 OG VS Archon第一局
2016/02/27 DOTA
利用Python实现Windows定时关机功能
2017/03/21 Python
用Python下载一个网页保存为本地的HTML文件实例
2018/05/21 Python
Python3中lambda表达式与函数式编程讲解
2019/01/14 Python
python使用装饰器作日志处理的方法
2019/07/11 Python
10分钟教你用python动画演示深度优先算法搜寻逃出迷宫的路径
2019/08/12 Python
Python批量修改xml的坐标值全部转为整数的实例代码
2020/11/26 Python
Python Selenium异常处理的实例分析
2021/02/28 Python
Python 实现劳拉游戏的实例代码(四连环、重力四子棋)
2021/03/03 Python
纯HTML+CSS3制作导航菜单(附源码)
2013/04/24 HTML / CSS
世界最大的海报和艺术印刷商店:AllPosters.com
2017/02/01 全球购物
巴西女装购物网站:Eclectic
2018/04/24 全球购物
如何实现jdbc性能优化
2012/07/30 面试题
六十岁生日答谢词
2014/01/10 职场文书
高中军训感言400字
2014/02/24 职场文书
客户经理岗位职责大全
2015/04/09 职场文书
python编写函数注意事项总结
2021/03/29 Python