当前位置: 首页 > 编程笔记 >

PHP实现根据图片色界在不同位置加水印的方法

章承基
2023-03-14
本文向大家介绍PHP实现根据图片色界在不同位置加水印的方法,包括了PHP实现根据图片色界在不同位置加水印的方法的使用技巧和注意事项,需要的朋友参考一下

本文实例讲述了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根据图片色界在不同位置加水印的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了PHP根据图片色界在不同位置加水印的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的php程序设计有所帮助。

  • 本文向大家介绍java实现图片加水印效果,包括了java实现图片加水印效果的使用技巧和注意事项,需要的朋友参考一下 图片加水印代码,这些代码不常用,但是用到的时候需要注意的地方也挺多的,每次都重写比较麻烦,记下来备忘。代码是图片加水印的一般流程,可根据实际项目需要自行修改。 注:代码在JPG和PNG格式图片下测试通过,其他图片格式请自行测试和修改 代码流程在注释中写的很详细了,不多做解释。 以上就

  • 本文向大家介绍php实现给一张图片加上水印效果,包括了php实现给一张图片加上水印效果的使用技巧和注意事项,需要的朋友参考一下 php实现给一张图片加上水印效果 我们再来看一个支持以图片和文字两种方式给图片添加水印。图片支持GIF,PNG,JPG三种格式,水印图片支持PNG和GIF 参数说明: $imgSrc:目标图片,可带相对目录地址, $markImg:水印图片,可带相对目录地址,支持PNG和

  • 本文向大家介绍php给图片加文字水印,包括了php给图片加文字水印的使用技巧和注意事项,需要的朋友参考一下 注释非常的详细了,这里就不多废话了 以上所述就是本文的全部内容了,希望大家能够喜欢。

  • 本文向大家介绍PHP实现图片裁剪、添加水印效果代码,包括了PHP实现图片裁剪、添加水印效果代码的使用技巧和注意事项,需要的朋友参考一下 3、PHP对图像的裁剪 效果 4、PHP为图像添加水印 效果

  • 本文向大家介绍写个给图片加水印的方法相关面试题,主要包含被问及写个给图片加水印的方法时的应答技巧和注意事项,需要的朋友参考一下 都用Canvas的方案解决 情况一:水印是图片(两张图片canvas.drawImage两次重叠即可) 情况二:水印是纯文字