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 相关文章推荐
关于Intype一些小问题的解决办法
Mar 28 PHP
php中simplexml_load_string使用实例分享
Feb 13 PHP
php模拟用户自动在qq空间发表文章的方法
Jan 07 PHP
php与Mysql的一些简单的操作
Feb 26 PHP
php限制上传文件类型并保存上传文件的方法
Mar 13 PHP
基于php的CMS中展示文章类实例分析
Jun 18 PHP
php异常处理方法实例汇总
Jun 24 PHP
php里array_work用法实例分析
Jul 13 PHP
php中输出json对象的值(实现方法)
Mar 07 PHP
Laravel-添加后台模板AdminLte的实现方法
Oct 08 PHP
php模拟post提交请求调用接口示例解析
Aug 07 PHP
php中Swoole的热更新实现代码实例
Mar 04 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/03/15 PHP
PHP 超链接 抓取实现代码
2009/06/29 PHP
php while循环得到循环次数
2013/10/26 PHP
iOS10推送通知开发教程
2016/09/19 PHP
php和js实现根据子网掩码和ip计算子网功能示例
2019/11/09 PHP
Javascript将string类型转换int类型
2010/12/09 Javascript
js跨浏览器实现将字符串转化为xml对象的方法
2013/09/25 Javascript
jQuery中使用Ajax获取JSON格式数据示例代码
2013/11/26 Javascript
jquery自定义表格样式
2015/11/23 Javascript
基于BootStrap Metronic开发框架经验小结【九】实现Web页面内容的打印预览和保存操作
2016/05/12 Javascript
JavaScript进阶练习及简单实例分析
2016/06/03 Javascript
将json转换成struts参数的方法
2016/11/08 Javascript
简单的渐变轮播插件
2017/01/12 Javascript
详解Node.js 命令行程序开发教程
2017/06/07 Javascript
详解用webpack2搭建angular2的项目
2017/06/22 Javascript
vue综合组件间的通信详解
2017/11/06 Javascript
关于axios如何全局注册浅析
2018/01/14 Javascript
关于echarts在节点显示动态数据及添加提示文本所遇到的问题
2018/04/20 Javascript
JavaScript递归函数解“汉诺塔”算法代码解析
2018/07/05 Javascript
[04:23]DOTA2上海特锦赛小组赛第一日 TOP10精彩集锦
2016/02/27 DOTA
Python THREADING模块中的JOIN()方法深入理解
2015/02/18 Python
python PIL模块与随机生成中文验证码
2016/02/27 Python
使用OpCode绕过Python沙箱的方法详解
2019/09/03 Python
Python基于pygame实现单机版五子棋对战
2019/12/26 Python
python实现梯度下降和逻辑回归
2020/03/24 Python
django 外键创建注意事项说明
2020/05/20 Python
基于python tkinter的点名小程序功能的实例代码
2020/08/22 Python
HTML5 Web Database 数据库的SQL语句的使用方法
2012/12/09 HTML / CSS
在线购买世界上最好的酒:BoozeBud
2018/06/07 全球购物
美国在线旅行社:Crystal Travel
2018/09/11 全球购物
MyBag中文网:英国著名的时尚包袋电商零售网站
2020/07/31 全球购物
消防先进事迹材料
2014/02/10 职场文书
工程采购员岗位职责
2014/03/09 职场文书
专家推荐信模板
2014/05/09 职场文书
股东授权委托书范文
2014/09/13 职场文书
查摆问题整改措施
2014/10/24 职场文书