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 相关文章推荐
腾讯QQ php程序员面试题目整理
Jun 08 PHP
php下正则来匹配dede模板标签的代码
Aug 21 PHP
基于MySQL体系结构的分析
May 02 PHP
用PHP解决的一个栈的面试题
Jul 02 PHP
PHP将字符分解为多个字符串的方法
Nov 22 PHP
php程序员应具有的7种能力小结
Nov 27 PHP
PHP Reflection API详解
May 12 PHP
php数组合并与拆分实例分析
Jun 12 PHP
php.ini中date.timezone设置详解
Nov 20 PHP
PHP缩略图生成和图片水印制作
Jan 07 PHP
php中输出json对象的值(实现方法)
Mar 07 PHP
PHP-FPM和Nginx的通信机制详解
Feb 01 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+XML 制作简单的留言本 图文教程
2009/11/02 PHP
php+ajax实现无刷新分页的方法
2014/11/04 PHP
CodeIgniter框架常见用法工作总结
2017/03/16 PHP
js获取图片长和宽度的代码
2009/11/24 Javascript
js仿淘宝和百度文库的评分功能
2016/05/15 Javascript
jquery树形菜单效果的简单实例
2016/06/06 Javascript
vue实现图片加载完成前的loading组件方法
2018/02/05 Javascript
JS实现简单的星期格式转换功能示例
2018/07/23 Javascript
Vue组件创建和传值的方法
2018/08/17 Javascript
mpvue将vue项目转换为小程序
2018/09/30 Javascript
微信小程序实现简单评论功能
2018/11/28 Javascript
微信小程序开发之转发分享功能
2019/10/22 Javascript
详解vue父子组件状态同步的最佳方式
2020/09/10 Javascript
[01:01:04]2018DOTA2亚洲邀请赛 4.5 淘汰赛 OpTic vs TNC 第一场
2018/04/06 DOTA
python在多玩图片上下载妹子图的实现代码
2013/08/13 Python
python 通过 socket 发送文件的实例代码
2018/08/14 Python
Python元组常见操作示例
2019/02/19 Python
python实现按行分割文件
2019/07/22 Python
Python爬虫教程知识点总结
2020/10/19 Python
python日志通过不同的等级打印不同的颜色(示例代码)
2021/01/13 Python
CSS3弹性伸缩布局之box布局
2016/07/12 HTML / CSS
美国最大的在线水培用品商店:GrowersHouse.com
2018/08/14 全球购物
Nisbets爱尔兰:英国最大的厨房和餐饮设备供应商
2019/01/26 全球购物
计算机专业应届毕业生自荐信
2013/09/26 职场文书
物业保安主管岗位职责
2013/12/25 职场文书
函授教育个人学习的自我评价
2013/12/31 职场文书
2014年学习雷锋活动总结
2014/03/01 职场文书
酒鬼酒广告词
2014/03/21 职场文书
授权委托书样本
2014/04/03 职场文书
本科毕业生应聘自荐信范文
2014/06/26 职场文书
2014年手术室工作总结
2014/11/26 职场文书
2014小学二年级班主任工作总结
2014/12/05 职场文书
自荐信格式模板
2015/03/27 职场文书
教师思想工作总结2015
2015/05/13 职场文书
门面租赁合同范文
2019/08/06 职场文书
年会邀请函的格式及范文五篇
2019/11/02 职场文书