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表单验证的3个函数ISSET()、empty()、is_numeric()的使用方法
Aug 22 PHP
php操作SVN版本服务器类代码
Nov 27 PHP
解析php中如何调用用户自定义函数
Aug 06 PHP
php实现向javascript传递数组的方法
Jul 27 PHP
Zend Framework自定义Helper类相关注意事项总结
Mar 14 PHP
php redis实现对200w用户的即时推送
Mar 04 PHP
Yii2框架可逆加密简单实现方法
Aug 25 PHP
php+ajax实现无刷新文件上传功能(ajaxuploadfile)
Feb 11 PHP
Yii2 中实现单点登录的方法
Mar 09 PHP
php微信公众号开发之欢迎老朋友
Oct 20 PHP
php判断/计算闰年的方法小结【三种方法】
Jul 06 PHP
Laravel 类和接口注入相关的代码
Oct 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
Zend studio文件注释模板设置方法
2013/09/29 PHP
php判断正常访问和外部访问的示例
2014/02/10 PHP
php中文验证码实现方法
2015/06/18 PHP
PHP操作FTP类 (上传、下载、移动、创建等)
2016/03/31 PHP
详解PHP防止直接访问.php 文件的实现方法
2017/07/28 PHP
Laravel框架实现抢红包功能示例
2019/10/31 PHP
用Laravel轻松处理千万级数据的方法实现
2020/12/25 PHP
pjblog中的UBBCode.js
2007/04/25 Javascript
JavaScript 无符号右移赋值操作
2009/04/17 Javascript
jquery自定义属性(类型/属性值)
2013/05/21 Javascript
$(document).ready(function() {})不执行初始化脚本
2014/06/19 Javascript
JavaScript严格模式详解
2015/11/18 Javascript
jQuery实现分隔条左右拖动功能
2015/11/21 Javascript
D3.js实现饼状图的方法详解
2016/09/21 Javascript
jquery获取easyui日期控件的值实现方法
2016/11/09 Javascript
jQuery与js实现颜色渐变的方法
2016/12/30 Javascript
详解Node全局变量global模块
2017/09/28 Javascript
vue2中的keep-alive使用总结及注意事项
2017/12/21 Javascript
详解基于electron制作一个node压缩图片的桌面应用
2019/01/29 Javascript
详解vue-cli+element-ui树形表格(多级表格折腾小计)
2019/04/17 Javascript
vue 验证码界面实现点击后标灰并设置div按钮不可点击状态
2019/10/28 Javascript
TensorFlow实现Softmax回归模型
2018/03/09 Python
使用Python进行中文繁简转换的实现代码
2019/10/18 Python
jupyter notebook 参数传递给shell命令行实例
2020/04/10 Python
美国最大的珠宝首饰网上商城:Jewelry.com
2016/07/22 全球购物
印度服装购物网站:Limeroad
2018/09/26 全球购物
办公室文秘岗位职责
2013/11/15 职场文书
共产党员公开承诺书范文
2014/03/28 职场文书
学习经验演讲稿
2014/05/10 职场文书
开展批评与自我批评发言材料
2014/05/15 职场文书
夫妻婚内购房协议书
2014/10/05 职场文书
调解书格式范本
2015/05/20 职场文书
病假证明模板
2015/06/19 职场文书
四年级数学教学反思
2016/02/16 职场文书
MySQL 开窗函数
2022/02/15 MySQL
JVM的类加载器和双亲委派模式你了解吗
2022/03/13 Java/Android