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 mssql 日期出现中文字符的解决方法
Mar 10 PHP
php cookis创建实现代码
Mar 16 PHP
解决PHP在DOS命令行下却无法链接MySQL的技术笔记
Dec 29 PHP
深入PHP中的HashTable结构详解
Jun 13 PHP
php使用标签替换的方式生成静态页面
May 21 PHP
浅析PHP中call user func()函数及如何使用call user func调用自定义函数
Nov 05 PHP
Zend Framework实现具有基本功能的留言本(附demo源码下载)
Mar 22 PHP
PHP 闭包详解及实例代码
Sep 28 PHP
PHP解压ZIP文件到指定文件夹的方法
Nov 17 PHP
Zend Framework动作控制器用法示例
Dec 09 PHP
php+mysql+jquery实现简易的检索自动补全提示功能
Apr 15 PHP
详解php与ethereum客户端交互
Apr 28 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 过滤器实现代码
2010/08/09 PHP
使用openssl实现rsa非对称加密算法示例
2014/01/24 PHP
PHP动态页生成静态页的3种常用方法
2014/11/13 PHP
PHP实现基于文本的摩斯电码生成器
2016/01/11 PHP
Smarty模板变量调节器用法分析
2016/05/23 PHP
使用正则去除php代码中的注释方法
2016/11/03 PHP
PHP全功能无变形图片裁剪操作类与用法示例
2017/01/10 PHP
Laravel框架验证码类用法实例分析
2019/09/11 PHP
插件:检测javascript的内存泄漏
2007/03/04 Javascript
JavaScript 版本自动生成文章摘要
2008/07/23 Javascript
我的javascript 函数链之演变
2011/04/07 Javascript
jquery中对于批量deferred的处理方法
2014/01/22 Javascript
jquery判断小数点两位和自动删除小数两位后的数字
2014/03/19 Javascript
js 实现浏览历史记录示例
2014/04/20 Javascript
js面向对象之常见创建对象的几种方式(工厂模式、构造函数模式、原型模式)
2015/11/09 Javascript
原生js实现自由拖拽弹窗代码demo
2016/06/29 Javascript
vue中el-input绑定键盘按键(按键修饰符)
2020/07/22 Javascript
从源码角度来回答keep-alive组件的缓存原理
2021/01/18 Javascript
windows下wxPython开发环境安装与配置方法
2014/06/28 Python
Python中特殊函数集锦
2015/07/27 Python
Python中模块pymysql查询结果后如何获取字段列表
2017/06/05 Python
Python实现自动为照片添加日期并分类的方法
2017/09/30 Python
解决python opencv无法显示图片的问题
2018/10/28 Python
通过PHP与Python代码对比的语法差异详解
2019/07/10 Python
新手如何发布Python项目开源包过程详解
2019/07/11 Python
python画微信表情符的实例代码
2019/10/09 Python
HTML5 实现一个访问本地文件的实例
2012/12/13 HTML / CSS
HTML5 placeholder(空白提示)属性介绍
2013/08/07 HTML / CSS
澳大利亚拥有最好的家具和家居用品在线目的地:Nestz
2019/02/23 全球购物
什么是三层交换,说说和路由的区别在那里
2014/09/01 面试题
注塑工厂厂长岗位职责
2013/12/02 职场文书
村官学习十八大感想
2014/01/15 职场文书
英语简历自我评价
2014/01/26 职场文书
2014初中数学教研组工作总结
2014/12/19 职场文书
优秀班集体申报材料
2014/12/25 职场文书
SQL Server 忘记密码以及重新添加新账号
2022/04/26 SQL Server