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维护文件系统
Oct 09 PHP
一个SQL管理员的web接口
Oct 09 PHP
PHP 引用是个坏习惯
Mar 12 PHP
php操作JSON格式数据的实现代码
Dec 24 PHP
PHP 透明水印生成代码
Aug 27 PHP
php程序总是提示验证码输入有误解决方案
Jan 07 PHP
php显示指定目录下子目录的方法
Mar 20 PHP
php实现可逆加密的方法
Aug 11 PHP
如何批量清理系统临时文件(语言:C#、 C/C++、 php 、python 、java )
Feb 01 PHP
php简单实现批量上传图片的方法
May 09 PHP
Laravel框架实现的上传图片到七牛功能详解
Sep 06 PHP
关于Curl在Swoole协程中的解决方案详析
Sep 12 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编程中字符串处理的5个技巧小结
2007/11/13 PHP
php实现12306火车票余票查询和价格查询(12306火车票查询)
2014/01/14 PHP
PHP+memcache实现消息队列案例分享
2014/05/21 PHP
JavaScript面象对象设计
2008/04/28 Javascript
js 代码优化点滴记录
2012/02/19 Javascript
Javascript继承(上)——对象构建介绍
2012/11/08 Javascript
jquery教程ajax请求json数据示例
2014/01/13 Javascript
一个JavaScript去除字符串末尾的空白实例代码
2014/09/22 Javascript
javascript实现客户端兼容各浏览器创建csv并下载的方法
2015/03/23 Javascript
JS实现的跨浏览器解析XML文件实例
2016/06/21 Javascript
JS封装通过className获取元素的函数示例
2016/12/20 Javascript
jQuery用户头像裁剪插件cropbox.js使用详解
2017/06/07 jQuery
jQuery菜单实例(全选,反选,取消)
2017/08/28 jQuery
使用webpack打包后的vue项目如何正确运行(express)
2018/10/26 Javascript
详解在React项目中安装并使用Less(用法总结)
2019/03/18 Javascript
详解vue开发中调用微信jssdk的问题
2019/04/16 Javascript
D3.js(v3)+react 实现带坐标与比例尺的柱形图 (V3版本)
2019/05/09 Javascript
使用js和canvas实现时钟效果
2020/09/08 Javascript
举例介绍Python中的25个隐藏特性
2015/03/30 Python
python中OrderedDict的使用方法详解
2017/05/05 Python
Python3 Post登录并且保存cookie登录其他页面的方法
2018/12/28 Python
PyQt5基本控件使用详解:单选按钮、复选框、下拉框
2019/08/05 Python
解决Django后台ManyToManyField显示成Object的问题
2019/08/09 Python
Pandas聚合运算和分组运算的实现示例
2019/10/17 Python
Python实现七个基本算法的实例代码
2020/10/08 Python
分布式全文检索引擎ElasticSearch原理及使用实例
2020/11/14 Python
美国最大的骑马用品零售商:HorseLoverZ
2017/01/12 全球购物
C语言面试题
2013/05/19 面试题
.NET初级开发工程师面试题(包括Javascript)
2012/08/22 面试题
Java基础知识面试题
2014/03/25 面试题
党员公开承诺书范文
2014/03/25 职场文书
企业员工薪酬方案
2014/06/04 职场文书
2014乡党委副书记党建工作汇报材料
2014/11/02 职场文书
关于群众路线的心得体会
2014/11/05 职场文书
Java Kafka 消费积压监控的示例代码
2021/07/01 Java/Android
Win11自动黑屏怎么办 Win11自动黑屏设置教程
2022/07/15 数码科技