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中判断文件空目录是否有读写权限的函数代码
Aug 07 PHP
php中serialize序列化与json性能测试的示例分析
Apr 27 PHP
PHP json_encode() 函数详解及中文乱码问题
Nov 05 PHP
详解php中 === 的使用
Oct 24 PHP
IIS 7.5 asp Session超时时间设置方法
Apr 17 PHP
PHP实现将多个文件中的内容合并为新文件的方法示例
Jun 10 PHP
Yii2 队列 shmilyzxt/yii2-queue 简单概述
Aug 02 PHP
Yii 2中的load()和save()示例详解
Aug 03 PHP
php实现微信支付之退款功能
May 30 PHP
thinkPHP框架动态配置用法实例分析
Jun 14 PHP
Laravel用户授权系统的使用方法示例
Sep 16 PHP
laravel Validator ajax返回错误信息的方法
Sep 29 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-fpm的配置详解
2013/06/03 PHP
phpQuery采集网页实现代码实例
2020/04/02 PHP
jquery显示和隐藏div特效实例
2013/02/27 Javascript
Js中setTimeout()和setInterval() 何时被调用执行的用法
2013/04/12 Javascript
JavaScript获取当前页面上的指定对象示例代码
2014/02/28 Javascript
jQuery对象初始化的传参方式
2015/02/26 Javascript
使用Function.apply()的参数数组化来提高 JavaScript程序性能的技巧
2015/12/23 Javascript
js实现简单的获取验证码按钮效果
2017/03/03 Javascript
详解Vue 多级组件透传新方法provide/inject
2018/05/09 Javascript
JavaScript中常用的简洁高级技巧总结
2019/03/10 Javascript
浅谈关于vue中scss公用的解决方案
2019/12/02 Javascript
微信小程序修改数组长度的问题的解决
2019/12/17 Javascript
Javascript前端下载后台传来的文件流代码实例
2020/08/18 Javascript
Vue+scss白天和夜间模式切换功能的实现方法
2021/01/05 Vue.js
[07:09]DOTA2-DPC中国联赛 正赛 Ehome vs Elephant 选手采访
2021/03/11 DOTA
利用selenium 3.7和python3添加cookie模拟登陆的实现
2017/11/20 Python
python中(str,list,tuple)基础知识汇总
2018/02/20 Python
Python的numpy库中将矩阵转换为列表等函数的方法
2018/04/04 Python
python3.6 如何将list存入txt后再读出list的方法
2019/07/02 Python
win10环境下配置vscode python开发环境的教程详解
2019/10/16 Python
使用TFRecord存取多个数据案例
2020/02/17 Python
python输入中文的实例方法
2020/09/14 Python
纯CSS打造(无图像无js)的非常流行的讲话(语音)气泡效果
2012/12/28 HTML / CSS
五款漂亮的纯CSS3动画按钮的实例教程
2014/11/21 HTML / CSS
学生会主席就职演讲稿
2014/01/14 职场文书
房产代理公证处委托书
2014/04/04 职场文书
警察先进个人事迹材料
2014/05/16 职场文书
小学语文复习计划
2015/01/19 职场文书
化验员岗位职责
2015/02/14 职场文书
民事撤诉申请书范本
2015/05/18 职场文书
2016年教师节贺卡寄语
2015/12/04 职场文书
100句人生哲理语录集锦:强者征服今天,懒汉坐等明天
2019/10/18 职场文书
Django项目如何获得SSL证书与配置HTTPS
2021/04/30 Python
pytorch训练神经网络爆内存的解决方案
2021/05/22 Python
Springboot-cli 开发脚手架,权限认证,附demo演示
2022/04/28 Java/Android
MySQL事务的隔离级别详情
2022/07/15 MySQL