PHP实现可添加水印与生成缩略图的图片处理工具类


Posted in PHP onJanuary 16, 2018

本文实例讲述了PHP实现可添加水印与生成缩略图的图片处理工具类。分享给大家供大家参考,具体如下:

ImageTool.class.php

<?php
class ImageTool
{
  private $imagePath;//图片路径
  private $outputDir;//输出文件夹
  private $memoryImg;//内存图像
  public function __construct($imagePath, $outputDir = null)
  {
    $this->imagePath = $imagePath;
    $this->outputDir = $outputDir;
    $this->memoryImg = null;
  }
  /**
   * 显示内存中的图片
   * @param $image
   */
  public function showImage()
  {
    if ($this->memoryImg != null) {
      $info = getimagesize($this->imagePath);
      $type = image_type_to_extension($info[2], false);
      header('Content-type:' . $info['mime']);
      $funs = "image{$type}";
      $funs($this->memoryImg);
      imagedestroy($this->memoryImg);
      $this->memoryImg = null;
    }
  }
  /**将图片以文件形式保存
   * @param $image
   */
  private function saveImage($image)
  {
    $info = getimagesize($this->imagePath);
    $type = image_type_to_extension($info[2], false);
    $funs = "image{$type}";
    if (empty($this->outputDir)) {
      $funs($image, md5($this->imagePath) . '.' . $type);
    } else {
      $funs($image, $this->outputDir . md5($this->imagePath) . '.' . $type);
    }
  }
  /**
   * 压缩图片
   * @param $width 压缩后宽度
   * @param $height 压缩后高度
   * @param bool $output 是否输出文件
   * @return resource
   */
  public function compressImage($width, $height, $output = false)
  {
    $image = null;
    $info = getimagesize($this->imagePath);
    $type = image_type_to_extension($info[2], false);
    $fun = "imagecreatefrom{$type}";
    $image = $fun($this->imagePath);
    $thumbnail = imagecreatetruecolor($width, $height);
    imagecopyresampled($thumbnail, $image, 0, 0, 0, 0, $width, $height, $info[0], $info[1]);
    imagedestroy($image);
    if ($output) {
      $this->saveImage($thumbnail);
    }
    $this->memoryImg = $thumbnail;
    return $this;
  }
  /**
   * 为图像添加文字标记
   *
   * @param $content 文本内容
   * @param $size 字体大小
   * @param $font 字体样式
   * @param bool $output 是否输出文件
   * @return $this
   */
  public function addTextmark($content, $size, $font, $output = false)
  {
    $info = getimagesize($this->imagePath);
    $type = image_type_to_extension($info[2], false);
    $fun = "imagecreatefrom{$type}";
    $image = $fun($this->imagePath);
    $color = imagecolorallocatealpha($image, 0, 0, 0, 80);
    $posX = imagesx($image) - strlen($content) * $size / 2;
    $posY = imagesy($image) - $size / 1.5;
    imagettftext($image, $size, 0, $posX, $posY, $color, $font, $content);
    if ($output) {
      $this->saveImage($image);
    }
    $this->memoryImg = $image;
    return $this;
  }
  /**
   * 为图片添加水印
   *
   * @param $watermark 水印图片路径
   * @param $alpha 水印透明度(0-100)
   * @param bool $output 是否输出文件
   * @return $this
   */
  public function addWatermark($watermark, $alpha, $output = false)
  {
    $image_info = getimagesize($this->imagePath);
    $image_type = image_type_to_extension($image_info[2], false);
    $image_fun = "imagecreatefrom{$image_type}";
    $image = $image_fun($this->imagePath);
    $mark_info = getimagesize($watermark);
    $mark_type = image_type_to_extension($mark_info[2], false);
    $mark_fun = "imagecreatefrom{$mark_type}";
    $mark = $mark_fun($watermark);
    $posX = imagesx($image) - imagesx($mark);
    $posY = imagesy($image) - imagesy($mark);
    imagecopymerge($image, $mark, $posX, $posY, 0, 0, $mark_info[0], $mark_info[1], $alpha);
    if ($output) {
      $this->saveImage($image);
    }
    $this->memoryImg = $image;
    return $this;
  }
}

ImageTool使用

首先导入ImageTool工具:

require_once 'ImageTool.class.php';

然后实例化ImageTool对象:

$imageTool = new ImageTool('img/oppman.jpeg', 'out/');//图片路径、输出文件夹

一、生成压缩图片

$imageTool->compressImage(350, 250, true);//压缩宽度、压缩高度、是否保存
$imageTool->showImage();

PHP实现可添加水印与生成缩略图的图片处理工具类

二、添加文字水印

$imageTool->addTextmark('一拳超人', 50, 'res/micro.ttf', true);//内容、尺寸、字体、是否保存
$imageTool->showImage();

PHP实现可添加水印与生成缩略图的图片处理工具类

三、添加图片水印

$imageTool->addWatermark('res/logo.jpeg', 100, true);//水印路径、透明度、是否保存
$imageTool->showImage();

PHP实现可添加水印与生成缩略图的图片处理工具类

仅当做临时图像输出:

$imageTool->addTextmark('快捷输出', 50, 'res/micro.ttf')->showImage();
PHP 相关文章推荐
屏蔽浏览器缓存另类方法
Oct 09 PHP
PHP面向对象程序设计之类常量用法实例
Aug 20 PHP
PHP动态柱状图实现方法
Mar 30 PHP
yii2带搜索功能的下拉框实例详解
May 12 PHP
Yii中的relations数据关联查询及统计功能用法详解
Jul 14 PHP
Yii2中关联查询简单用法示例
Aug 10 PHP
Yii统计不同类型邮箱数量的方法
Oct 18 PHP
php获得文件夹下所有文件的递归算法的简单实例
Nov 01 PHP
PHP输出多个元素的排列或组合的方法
Mar 14 PHP
Laravel5中Cookie的使用详解
May 03 PHP
PHP常用函数之根据生日计算年龄功能示例
Oct 21 PHP
tp5框架使用cookie加密算法实现登录功能示例
Feb 10 PHP
PHP实现找出链表中环的入口节点
Jan 16 #PHP
详解thinkphp中的volist标签
Jan 15 #PHP
thinkphp 中的volist标签在ajax操作中的特殊性(推荐)
Jan 15 #PHP
PHP7扩展开发之基于函数方式使用lib库的方法详解
Jan 15 #PHP
PHP7扩展开发之hello word实现方法详解
Jan 15 #PHP
基于 Swoole 的微信扫码登录功能实现代码
Jan 15 #PHP
详解PHP序列化和反序列化原理
Jan 15 #PHP
You might like
实用函数10
2007/11/08 PHP
PHP OPCode缓存 APC详细介绍
2010/10/12 PHP
理解php Hash函数,增强密码安全
2011/02/25 PHP
从手册去理解分析PHP session机制
2011/07/17 PHP
html静态页面调用php文件的方法
2014/11/13 PHP
php继承中方法重载(覆盖)的应用场合
2015/02/09 PHP
phpcms的分类名称和类别名称的调用
2017/01/05 PHP
简单谈谈PHP面向对象之标识对象
2017/06/27 PHP
PHP对象的浅复制与深复制的实例详解
2017/10/26 PHP
js中的window.open返回object的错误的解决方法
2009/08/15 Javascript
页面中js执行顺序
2009/11/09 Javascript
JQuery操作表格(隔行着色,高亮显示,筛选数据)
2012/02/23 Javascript
Jquery 实现表格颜色交替变化鼠标移过颜色变化实例
2013/08/28 Javascript
js控制不同的时间段显示不同的css样式的实例代码
2013/11/04 Javascript
js获取微信版本号的方法
2015/05/12 Javascript
BootStrap的弹出框(Popover)支持鼠标移到弹出层上弹窗层不隐藏的原因及解决办法
2016/04/03 Javascript
JavaScript对象数组如何按指定属性和排序方向进行排序
2016/06/15 Javascript
react-native 圆弧拖动进度条实现的示例代码
2018/04/12 Javascript
angular inputNumber指令输入框只能输入数字的实现
2019/12/03 Javascript
如何配置vue.config.js 处理static文件夹下的静态文件
2020/06/19 Javascript
javascript实现简单页面倒计时
2021/03/02 Javascript
Python格式化css文件的方法
2015/03/10 Python
python实现神经网络感知器算法
2017/12/20 Python
Python实现的径向基(RBF)神经网络示例
2018/02/06 Python
python使用time、datetime返回工作日列表实例代码
2019/05/09 Python
python实现坦克大战游戏 附详细注释
2020/03/27 Python
对Django中内置的User模型实例详解
2019/08/16 Python
Python3 中作为一等对象的函数解析
2019/12/11 Python
python环境下安装opencv库的方法
2020/03/05 Python
Python self用法详解
2020/11/28 Python
世界上最大的乐器零售商:Guitar Center
2017/11/07 全球购物
德国机场停车位比较和预订网站:Ich-parke-billiger
2018/01/08 全球购物
英国在线购买轮胎、预订汽车、汽车维修和装配网站:Protyre
2020/04/12 全球购物
普通简短的个人自我评价
2014/02/15 职场文书
2014年党建工作汇报材料
2014/11/02 职场文书
市级三好生竞选稿
2015/11/21 职场文书