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程序设计有所帮助。

(0)

相关推荐

  • Java图片处理 (文字水印、图片水印、缩放、补白)代码实例

    package com.hmw.picMark; import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.Image; import java.awt.geom.AffineTransform; import java.awt.image.AffineTransformOp; import java.awt.im

  • 用PHP代码给图片加水印

    先找好一张图片,更名为face.jpeg,创建watermark.php: <?php /** * Created by PhpStorm. * User: Administrator * Date: 2015/6/29 * Time: 22:27 */ $img = imagecreatefromjpeg('face.jpeg');//根据已有的JPG创建image header('Content-type:image/jpeg');//设置mime type imagestring($img

  • 如何使用JAVA实现数字水印

    数字水印有可见不可见之分,可见的比如课件上印有学校校徽,微博发图片会水印上上传者的信息及微博logo等. 用java实现可见的数字水印,草人主要是用到了java.awt包中的AlphaComposite类,当然在实现之前先介绍一下AlphaComposite类: AlphaComposite类是关于两个目标重叠的混合处理类,此类实现的特定规则是 T. Porter 和 T. Duff 合著的 "Compositing Digital Images", SIGGRAPH 84, 253-

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

    本文实例讲述了PHP实现根据图片色界在不同位置加水印的方法.分享给大家供大家参考.具体如下: 在使用php编程的时候, 很多时候需要对上传的图片加水印,来确定图片版权和出处. 但是,一般情况下加水印的位置是图片的右下角, 但是,不同图片的色阶不同,有时候我们 图片的水印和图片本身色阶相同,就会造成水印不明显. 下面这段代码可以实现自动识别图片的色阶,更加色阶差来添加图片的水印,这样可以避免水印和图片色阶一样的弊端. <?php function add_wm($nmw_water, $src_f

  • 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()

  • PHP图片加水印实现方法

    本文实例讲述了PHP图片加水印实现方法.分享给大家供大家参考,具体如下: <?php echo img_water_mark("2008112023204423477802.gif", "copyImg.png", $savepath=null, $savename="123.gif", $positon=2, $alpha=60); /** * 图片加水印(适用于png/jpg/gif格式) * * @author flynetcn *

  • 使用Node.js给图片加水印的方法

    一.准备工作: 首先,确保你本地已经安装好了node环境. 然后,我们进行图像编辑操作需要用到一个Node.js的库:images. 这个库的地址是:https://github.com/zhangyuanwei/node-images,作者定义它为 "Node.js轻量级跨平台图像编解码库" ,并提供了一系列接口. 我们要做的首先是安装images库: npm install images 二.直接上DEMO: 步骤如下: step1:文件夹结构 step2:JS代码 var ima

  • Node.js批量给图片加水印的方法

    一.准备工作: 首先,你要阅读完这篇文章:http://www.jb51.net/article/97391.htm. 然后,我们安装node.js的一个模块:imageinfo. npm install imageinfo 二.直接上DEMO: 步骤如下: step1:文件夹结构 step2:JS代码 //引用文件系统模块 var fs = require("fs"); //引用imageinfo模块 var imageInfo = require("imageinfo&q

  • WPF实现图片合成或加水印的方法【2种方法】

    本文实例讲述了WPF实现图片合成或加水印的方法.分享给大家供大家参考,具体如下: 最近项目中应用多次应用了图片合成,为了今后方便特此记下. 在WPF下有两种图片合成的方式,一种还是用原来C#提供的GDI+方式,命名空间是System.Drawing 和 System.Drawing.Imaging,另一种是WPF中新添加的API,命名空间是 System.Windows.Media 和 System.Windows.Media.Imaging . 我们来做一个简单的例子,分别用上面的两种方式实现

  • C#实现给图片加水印的方法

    本文实例讲述了C#实现给图片加水印的方法.分享给大家供大家参考,具体如下: using System; using System.Drawing; using System.Drawing.Imaging; using System.Drawing.Drawing2D; namespace Tutorial { class WaterMark { [STAThread] static void Main(string[] args) { //set a working directory str

  • thinkPHP框架实现图像裁剪、缩放、加水印的方法

    本文实例讲述了thinkPHP框架实现图像裁剪.缩放.加水印的方法.分享给大家供大家参考,具体如下: ThinkPHP 图片处理函数,需要文字水印字体,可在windows下 控制面板 > 大图标(右上角) > 字体 找到需要的字体 /** * 图像的裁剪.缩放.加水印 * @param string $path 路径 * @param int $width 裁剪的宽度/限制的高度或宽度,当有$height值时此值为图片的宽度,否则为限制的宽度或高度 * @param int $height [

  • 浅析iOS给图片加水印的方法

    话不多说,直接上代码 新建了一个UIImage的类目,在.h中声明 + (UIImage *)imageWithimage:(UIImage *)image content:(NSString *)content frame:(CGRect)frame; .m如下 + (UIImage *)imageWithimage:(UIImage *)image content:(NSString *)content frame:(CGRect)frame { // 开启图形'上下文' UIGraphic

  • 利用Thumbnailator轻松实现图片缩放、旋转与加水印

    概述 Thumbnailator 是一个开源的 Java 项目,它提供了非常简单的 API 来对图片进行缩放.旋转以及加水印的处理. 有多简单呢?简单到一行代码就可以完成图片处理.形式如下: Thumbnails.of(new File("path/to/directory").listFiles()) .size(640, 480) .outputFormat("jpg") .toFiles(Rename.PREFIX_DOT_THUMBNAIL); 当然,Thu

随机推荐