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 相关文章推荐
两个开源的Php输出Excel文件类
Feb 08 PHP
php邮件发送,php发送邮件的类
Mar 24 PHP
PHP中根据IP地址判断城市实现城市切换或跳转代码
Sep 04 PHP
初步介绍PHP扩展开发经验分享
Sep 06 PHP
关于Iframe如何跨域访问Cookie和Session的解决方法
Apr 15 PHP
php+MySQL判断update语句是否执行成功的方法
Aug 28 PHP
PHP使用PDO操作数据库的乱码问题解决方法
Apr 08 PHP
PHP对XML内容进行修改和删除实例代码
Oct 26 PHP
PHP实现腾讯与百度坐标转换
Aug 05 PHP
浅谈PHP中pack、unpack的详细用法
Mar 12 PHP
ThinkPHP框架整合微信支付之JSAPI模式图文详解
Apr 09 PHP
PHP7 新增功能
Mar 09 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
PHP 抓取网页图片并且另存为的实现代码
2010/03/24 PHP
PHP实现更新中间关联表数据的两种方法
2014/09/01 PHP
php实现发送微信模板消息的方法
2015/03/07 PHP
Laravel 微信小程序后端实现用户登录的示例代码
2019/11/26 PHP
指定js可访问其它域名的cookie的方法
2007/09/18 Javascript
MooTools 1.2中的Drag.Move来实现拖放
2009/09/15 Javascript
ExtJS的FieldSet的column列布局
2009/11/20 Javascript
浅谈JavaScript函数参数的可修改性问题
2013/12/05 Javascript
javascript中match函数的用法小结
2014/02/08 Javascript
js实现ArrayList功能附实例代码
2014/10/29 Javascript
jquery制作图片时钟特效
2020/03/30 Javascript
AngularJS中实现用户访问的身份认证和表单验证功能
2016/04/21 Javascript
基于js里调用函数时,函数名带括号和不带括号的区别
2016/07/28 Javascript
AngularJS中的表单简单入门
2016/07/28 Javascript
Bootstrap中的Dropdown下拉菜单更改为悬停(hover)触发
2016/08/31 Javascript
快速使用node.js进行web开发详解
2017/04/26 Javascript
js实现上传并压缩图片效果
2018/01/10 Javascript
深入理解Node module模块
2018/03/26 Javascript
详解如何提升JSON.stringify()的性能
2019/06/12 Javascript
vscode vue 文件模板的配置方法
2019/07/23 Javascript
微信小程序顶部导航栏可滑动并选中放大
2019/12/05 Javascript
微信小程序实现星星评分效果
2020/11/01 Javascript
python里大整数相乘相关技巧指南
2014/09/12 Python
Python随机生成数模块random使用实例
2015/04/13 Python
python实现的DES加密算法和3DES加密算法实例
2015/06/03 Python
Python实现各种排序算法的代码示例总结
2015/12/11 Python
Linux上安装Python的PIL和Pillow库处理图片的实例教程
2016/06/23 Python
Python日志模块logging基本用法分析
2018/08/23 Python
Django高级编程之自定义Field实现多语言
2019/07/02 Python
Python中xml和dict格式转换的示例代码
2019/11/07 Python
解决python运行启动报错问题
2020/06/01 Python
2014教师“四风问题”对照检查材料思想汇报
2014/09/16 职场文书
抗洪救灾标语
2014/10/08 职场文书
会议邀请函
2015/01/30 职场文书
2016年感恩节寄语
2015/12/07 职场文书
python用字节处理文件实例讲解
2021/04/13 Python