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 相关文章推荐
第十节 抽象方法和抽象类 [10]
Oct 09 PHP
php 获取百度的热词数据的代码
Feb 18 PHP
PHP array_multisort() 函数的深入解析
Jun 20 PHP
PDO防注入原理分析以及注意事项
Feb 25 PHP
php实现根据IP地址获取其所在省市的方法
Apr 30 PHP
PHP输出缓冲控制Output Control系列函数详解
Jul 02 PHP
yii用户注册表单验证实例
Dec 26 PHP
php使用pdo连接sqlite3的配置示例
May 27 PHP
Yii 2.0中场景的使用教程
Jun 02 PHP
Thinkphp5 微信公众号token验证不成功的原因及解决方法
Nov 12 PHP
解决laravel资源加载路径设置的问题
Oct 14 PHP
PHP中国际化的字符串排序和比较对象详解
Aug 23 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
PHPThumb图片处理实例
2014/05/03 PHP
PHP生成唯一订单号的方法汇总
2015/04/16 PHP
PHP入门教程之日期与时间操作技巧总结(格式化,验证,获取,转换,计算等)
2016/09/11 PHP
学习ExtJS accordion布局
2009/10/08 Javascript
jquery改变tr背景色的示例代码
2013/12/28 Javascript
开发中可能会用到的jQuery小技巧
2014/03/07 Javascript
jQuery表格排序组件-tablesorter使用示例
2014/05/26 Javascript
JavaScript实现N皇后问题算法谜题解答
2014/12/29 Javascript
整理AngularJS中的一些常用指令
2015/06/16 Javascript
jQuery获取与设置iframe高度的方法
2016/08/01 Javascript
理解AngularJs篇:30分钟快速掌握AngularJs
2016/12/23 Javascript
ECMAScript6 新特性范例大全
2017/03/24 Javascript
jquery中ajax请求后台数据成功后既不执行success也不执行error的完美解决方法
2017/12/24 jQuery
js+css实现打字效果
2020/06/24 Javascript
基于Vue实现拖拽效果
2018/04/27 Javascript
基于jquery实现九宫格拼图小游戏
2018/11/30 jQuery
vue图片上传本地预览组件使用详解
2019/02/20 Javascript
Node.js HTTP服务器中的文件、图片上传的方法
2019/09/23 Javascript
JS实现百度搜索框
2021/02/25 Javascript
Python读写Excel文件的实例
2013/11/01 Python
python构造icmp echo请求和实现网络探测器功能代码分享
2014/01/10 Python
在Python中使用PIL模块处理图像的教程
2015/04/29 Python
numpy实现合并多维矩阵、list的扩展方法
2018/05/08 Python
css3 中的新特性加强记忆详解
2016/04/16 HTML / CSS
纯CSS3+DIV实现小三角形边框效果的示例代码
2020/08/03 HTML / CSS
用canvas画心电图的示例代码
2018/09/10 HTML / CSS
手摸手教你用canvas实现给图片添加平铺水印的实现
2019/08/20 HTML / CSS
赫里福德的一家乡村零售商店:Philip Morris & Son
2017/06/25 全球购物
Rodd & Gunn澳大利亚官网:新西兰男装品牌
2018/09/25 全球购物
献爱心捐款倡议书
2014/05/14 职场文书
社区关爱留守儿童活动方案
2014/08/22 职场文书
工作失误检讨书(3篇)
2014/10/11 职场文书
无子女夫妻离婚协议书(4篇)
2014/10/20 职场文书
python 实现体质指数BMI计算
2021/05/26 Python
一文了解MySQL二级索引的查询过程
2022/02/24 MySQL
JavaScript前端面试组合函数
2022/06/21 Javascript