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 已经成熟
Dec 04 PHP
PHP读取目录下所有文件的代码
Jan 07 PHP
程序员编程十条戒律
Jul 09 PHP
11个PHP 分页脚本推荐
Aug 15 PHP
php图片加水印原理(超简单的实例代码)
Jan 18 PHP
利用PHP扩展vld查看PHP opcode操作步骤
Mar 04 PHP
PHP rsa加密解密使用方法
Apr 27 PHP
php返回当前日期或者指定日期是周几
May 21 PHP
php使用CURL不依赖COOKIEJAR获取COOKIE的方法
Jun 17 PHP
CI框架常用经典操作类总结(路由,伪静态,分页,session,验证码等)
Nov 21 PHP
Ubuntu中支持PHP5与PHP7双版本的简单实现
Aug 19 PHP
如何使用php生成zip压缩包
Apr 21 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中mysql连接和基本操作代码(快速测试使用,简单方便)
2014/04/25 PHP
PHP7多线程搭建教程
2017/04/21 PHP
jQuery 各种浏览器下获得日期区别
2008/12/22 Javascript
为JavaScript提供睡眠功能(sleep) 自编译JS引擎
2010/08/16 Javascript
JavaScript游戏之是男人就下100层代码打包
2010/11/08 Javascript
通过Jquery遍历Json的两种数据结构的实现代码
2011/01/19 Javascript
基于jQuery实现的Ajax 验证用户名是否存在的实现代码
2011/04/06 Javascript
js Html结构转字符串形式显示代码
2011/11/15 Javascript
jQuery.each()用法分享
2012/07/31 Javascript
JS+JSP checkBox 全选具体实现
2014/01/02 Javascript
JS动态日期时间的获取方法
2015/09/28 Javascript
利用JavaScript判断浏览器类型及版本
2016/08/23 Javascript
jQuery点击弹出层弹出模态框点击模态框消失代码分享
2017/01/21 Javascript
AngularJS入门教程二:在路由中传递参数的方法分析
2017/05/27 Javascript
Angularjs 手写日历的实现代码(不用插件)
2017/10/18 Javascript
通俗易懂地解释JS中的闭包
2017/10/23 Javascript
mac中利用NVM管理不同node版本的方法详解
2017/11/08 Javascript
vue实现树形结构样式和功能的实例代码
2019/10/15 Javascript
javascript实现电商放大镜效果
2020/11/23 Javascript
Python解析nginx日志文件
2015/05/11 Python
python获取指定目录下所有文件名列表的方法
2015/05/20 Python
python 字典操作提取key,value的方法
2019/06/26 Python
jenkins配置python脚本定时任务过程图解
2019/10/29 Python
python 解决selenium 中的 .clear()方法失效问题
2020/09/01 Python
Booking.com英国官网:全球酒店在线预订网站
2018/04/21 全球购物
电子商务个人职业生涯规划范文
2014/02/12 职场文书
旺仔牛奶广告词
2014/03/20 职场文书
公司周年庆典标语
2014/10/07 职场文书
校园文化艺术节宣传标语
2014/10/09 职场文书
民事诉讼代理授权委托书
2014/10/11 职场文书
2014年民主评议党员工作总结
2014/12/02 职场文书
个人党性锻炼总结
2015/03/05 职场文书
社区艾滋病宣传活动总结
2015/05/07 职场文书
Python 实现定积分与二重定积分的操作
2021/05/26 Python
PostgreSQL数据库创建并使用视图以及子查询
2022/04/11 PostgreSQL
html中两种获取标签内的值的方法
2022/06/10 HTML / CSS