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 相关文章推荐
BBS(php &amp; mysql)完整版(三)
Oct 09 PHP
怎样在PHP中通过ADO调用Asscess数据库和COM程序
Oct 09 PHP
深入array multisort排序原理的详解
Jun 18 PHP
php获取服务器端mac和客户端mac的地址支持WIN/LINUX
May 15 PHP
浅析php中json_encode()和json_decode()
May 25 PHP
php中函数前加&amp;符号的作用分解
Jul 08 PHP
thinkphp的静态缓存用法分析
Nov 29 PHP
Laravel 5 学习笔记
Mar 06 PHP
浅谈PHP中Stream(流)
Jun 08 PHP
10个对初学者非常有用的PHP技巧
Apr 06 PHP
php利用fsockopen GET/POST提交表单及上传文件
May 22 PHP
php读取出一个文件夹及其子文件夹下所有文件的方法示例
Jun 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
如何开发一个虚拟域名系统
2006/10/09 PHP
PHP页面间传递参数实例代码
2008/06/05 PHP
PHP开发框架laravel安装与配置教程
2015/03/13 PHP
PHP正则验证Email的方法
2015/06/15 PHP
使用php实现网站验证码功能【推荐】
2017/02/09 PHP
PHP开发的微信现金红包功能示例
2017/06/29 PHP
PHP弱类型语言中类型判断操作实例详解
2017/08/10 PHP
js实现运行代码需要刷新的解决方法
2007/08/18 Javascript
JqGrid web打印实现代码
2011/05/31 Javascript
js通过元素class名字获取元素集合的具体实现
2014/01/06 Javascript
JavaScript+CSS控制打印格式示例介绍
2014/01/07 Javascript
详解addEventListener的三个参数之useCapture
2015/03/16 Javascript
jQuery ui实现动感的圆角渐变网站导航菜单效果代码
2015/08/26 Javascript
Jquery修改image的src属性,图片不加载问题的解决方法
2016/05/17 Javascript
JavaScript实现获取用户单击body中所有A标签内容的方法
2017/06/05 Javascript
[js高手之路]HTML标签解释成DOM节点的实现方法
2017/08/31 Javascript
angularjs路由传值$routeParams详解
2020/09/05 Javascript
原生JS与JQ获取元素的区别详解
2020/02/13 Javascript
JS检测浏览器开发者工具是否打开的方法详解
2020/10/02 Javascript
[01:09]模型精美,特效酷炫!TI9不朽宝藏Ⅰ鉴赏
2019/05/10 DOTA
[02:03]完美世界DOTA2联赛10月30日赛事集锦
2020/10/31 DOTA
几个提升Python运行效率的方法之间的对比
2015/04/03 Python
Python调用C++程序的方法详解
2017/01/24 Python
解决Python2.7读写文件中的中文乱码问题
2018/04/12 Python
Python logging设置和logger解析
2019/08/28 Python
Pytorch Tensor 输出为txt和mat格式方式
2020/01/03 Python
python实现logistic分类算法代码
2020/02/28 Python
打印机墨盒:123Inkjets
2017/02/16 全球购物
写给学生的新学期寄语
2014/01/18 职场文书
统计系教授推荐信
2014/02/28 职场文书
大学生个人先进事迹材料范文
2014/05/03 职场文书
普通话宣传标语
2014/06/26 职场文书
公司捐书倡议书
2015/04/27 职场文书
2016教师学习党章心得体会
2016/01/15 职场文书
2016班级元旦联欢会开幕词
2016/03/04 职场文书
导游词之凤凰古城
2019/10/22 职场文书