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截取中文字符串的问题
Jul 12 PHP
PHP脚本数据库功能详解(下)
Oct 09 PHP
dedecms后台验证码总提示错误的解决方法
Mar 21 PHP
php 表单数据的获取代码
Mar 10 PHP
简单的方法让你的后台登录更加安全(php中加session验证)
Aug 22 PHP
解析PHP将对象转换成数组的方法(兼容多维数组类型)
Jun 21 PHP
php 批量替换程序的具体实现代码
Oct 04 PHP
PHP读取CURL模拟登录时生成Cookie文件的方法
Nov 04 PHP
Thinkphp关闭缓存的方法
Jun 26 PHP
PHP中使用array函数新建一个数组
Nov 19 PHP
php $_SESSION会员登录实例分享
Jan 19 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 项目的方法
2007/01/02 PHP
PHP中使用Session配合Javascript实现文件上传进度条功能
2014/10/15 PHP
修复ShopNC使用QQ 互联时提示100010 错误
2015/11/08 PHP
在Laravel框架里实现发送邮件实例(邮箱验证)
2016/05/20 PHP
Joomla框架实现字符串截取的方法示例
2017/07/18 PHP
让JavaScript拥有类似Lambda表达式编程能力的方法
2010/09/12 Javascript
jquery插件开发方法(初学者)
2012/02/03 Javascript
JavaScript日期类型的一些用法介绍
2015/03/02 Javascript
js实现横向伸展开的二级导航菜单代码
2015/08/28 Javascript
jQuery中选择器的基础使用教程
2016/05/23 Javascript
Bootstrap弹出框(modal)垂直居中的问题及解决方案详解
2016/06/12 Javascript
BOM系列第一篇之定时器setTimeout和setInterval
2016/08/17 Javascript
js 判断附件后缀的简单实现方法
2016/10/11 Javascript
获取JavaScript异步函数的返回值
2016/12/21 Javascript
浅析Vue自定义组件的v-model
2017/11/26 Javascript
webpack打包nodejs项目的方法
2018/09/26 NodeJs
Node.js JSON模块用法实例分析
2019/01/04 Javascript
JavaScript Canvas编写炫彩的网页时钟
2019/10/16 Javascript
[02:47]DOTA2英雄基础教程 野性怒吼兽王
2013/12/05 DOTA
[02:49]2014DOTA2电竞也是体育项目! 势要把荣誉带回中国!
2014/07/20 DOTA
深入理解NumPy简明教程---数组2
2016/12/17 Python
django rest framework 数据的查找、过滤、排序的示例
2018/06/25 Python
Django管理员账号和密码忘记的完美解决方法
2018/12/06 Python
基于python二叉树的构造和打印例子
2019/08/09 Python
sklearn的predict_proba使用说明
2020/06/28 Python
python获取命令行参数实例方法讲解
2020/11/02 Python
HTML5 贪吃蛇游戏实现思路及源代码
2013/09/03 HTML / CSS
html5中的input新属性range使用记录
2014/09/05 HTML / CSS
Bootstrap File Input文件上传组件
2020/12/01 HTML / CSS
CK澳大利亚官网:Calvin Klein澳大利亚
2020/12/12 全球购物
《猫》教学反思
2014/02/26 职场文书
树转促学习心得体会
2014/09/10 职场文书
数学教师个人工作总结
2015/02/06 职场文书
《艾尔登法环》发布最新「战技」宣传片
2022/04/03 其他游戏
vue判断按钮是否可以点击
2022/04/09 Vue.js
PostgreSQL出现死锁该如何解决
2022/05/30 PostgreSQL