php图片水印添加、压缩、剪切的封装类实现


Posted in PHP onApril 18, 2020

php对图片文件的操作主要是利用GD库扩展。当我们频繁利用php对图片进行操作时,会自然封装很多函数,否则会写太多重复的代码。当有很多对图片的相关函数的时候,我们可以考虑将这些函数也整理一下,因而就有了封装成类的想法。

操作图片主要历经四个步骤

1、打开图片
2、操作图片
3、输出图片
4、销毁图片

1,3,4三个步骤每次都要写,每次又都差不多。真正需要变通的只有操作图片的这一步骤了。操作图片又往往通过1或多个主要的GD函数来完成。

<?php 

class Image
{ 
 private $info;

 private $image;
 public $type;
 public function __construct($src)
 {

  $this->info=getimagesize($src);
  $this->type=image_type_to_extension($this->info['2'],false);
  $fun="imagecreatefrom{$this->type}";
  $this->image=$fun($src);
 }
 /**
  * 文字水印
  * @param [type] $font  字体
  * @param [type] $content 内容
  * @param [type] $size  文字大小
  * @param [type] $col  文字颜色(四元数组)
  * @param array $location 位置 
  * @param integer $angle 倾斜角度
  * @return [type]   
  */
 public function fontMark($font,$content,$size,$col,$location,$angle=0){
  $col=imagecolorallocatealpha($this->image, $col['0'], $col['1'], $col['2'],$col['3']);

  imagettftext($this->image, $size, $angle, $location['0'], $location['1'], $col,$font,$content);
 }
 
 /**
  * 图片水印
  * @param [type] $imageMark 水印图片地址
  * @param [type] $dst  水印图片在原图片中的位置
  * @param [type] $pct  透明度
  * @return [type]   
  */
 public function imageMark($imageMark,$dst,$pct){
  $info2=getimagesize($imageMark);
  $type=image_type_to_extension($info2['2'],false);
  $func2="imagecreatefrom".$type;
  $water=$func2($imageMark);

  imagecopymerge($this->image, $water, $dst[0], $dst[1], 0, 0, $info2['0'], $info2['1'], $pct);
  imagedestroy($water);

 }
 /**
  * 压缩图片
  * @param [type] $thumbSize 压缩图片大小
  * @return [type]   [description]
  */
 public function thumb($thumbSize){
  $imageThumb=imagecreatetruecolor($thumbSize[0], $thumbSize[1]);
  
  imagecopyresampled($imageThumb, $this->image, 0, 0, 0, 0, $thumbSize[0], $thumbSize[1], $this->info['0'], $this->info['1']);
  imagedestroy($this->image);
  $this->image=$imageThumb;
 }
 /**
 * 裁剪图片
  * @param [type] $cutSize 裁剪大小
  * @param [type] $location 裁剪位置
  * @return [type]   [description]
  */
  public function cut($cutSize,$location){
   $imageCut=imagecreatetruecolor($cutSize[0],$cutSize[1]);

   imagecopyresampled($imageCut, $this->image, 0, 0, $location[0], $location[1],$cutSize[0],$cutSize[1],$cutSize[0],$cutSize[1]);
   imagedestroy($this->image);
   $this->image=$imageCut;
  }
 /**
  * 展现图片
  * @return [type] [description]
  */
 public function show(){
  header("content-type:".$this->info['mime']);

  $funn="image".$this->type;

  $funn($this->image);
 }
 /**
  * 保存图片
 * @param [type] $newname 新图片名
 * @return [type]   [description]
 */
  public function save($newname){
   header("content-type:".$this->info['mime']);

   $funn="image".$this->type;

   $funn($this->image,$newname.'.'.$this->type);
  }
  public function __destruct(){
   imagedestroy($this->image);
  }

 }

 ?>

是不是这样操作就很简单了,如果还需要其他操作,只需要再往这个类里面添加就好啦~~希望大家可以熟练掌握。

PHP 相关文章推荐
上传多个文件的PHP脚本
Nov 26 PHP
PHP音乐采集(部分代码)
Feb 14 PHP
PHP与SQL注入攻击[三]
Apr 17 PHP
PHP 七大优势分析
Jun 23 PHP
完美解决PHP中文乱码
Nov 26 PHP
PHP图片裁剪函数(保持图像不变形)
May 04 PHP
php调用shell的方法
Nov 05 PHP
CodeIgniter钩子用法实例详解
Jan 20 PHP
PHP基于迭代实现文件夹复制、删除、查看大小等操作的方法
Aug 11 PHP
php利用云片网实现短信验证码功能的示例代码
Nov 18 PHP
PHP微信开发之微信录音临时转永久存储
Jan 26 PHP
PHP抽象类与接口的区别实例详解
May 09 PHP
php验证码实现代码(3种)
Sep 07 #PHP
PHP Web木马扫描器代码分享
Sep 06 #PHP
使用php-timeit估计php函数的执行时间
Sep 06 #PHP
ThinkPHP中使用Ueditor富文本编辑器
Sep 02 #PHP
ECSHOP在PHP5.5及高版本上报错的解决方法
Aug 31 #PHP
php基础设计模式大全(注册树模式、工厂模式、单列模式)
Aug 31 #PHP
PHP中error_reporting()用法详解
Aug 31 #PHP
You might like
PHP手机号码及邮箱正则表达式实例解析
2020/07/11 PHP
js 火狐下取本地路径实现思路
2013/04/02 Javascript
jQuery调用RESTful WCF示例代码(GET方法/POST方法)
2014/01/26 Javascript
angularJS 入门基础
2015/02/09 Javascript
JavaScript实现点击单选按钮改变输入框中文本域内容的方法
2015/08/12 Javascript
js实现仿qq消息的弹出窗效果
2016/01/06 Javascript
jQuery制作网页版选项卡
2016/07/28 Javascript
jQuery fadeOut 异步实例代码详解
2016/08/18 Javascript
浅谈JS获取元素的N种方法及其动静态讨论
2017/08/25 Javascript
nodejs require js文件入口,在package.json中指定默认入口main方法
2018/10/10 NodeJs
Python模拟登录12306的方法
2014/12/30 Python
使用Protocol Buffers的C语言拓展提速Python程序的示例
2015/04/16 Python
python开发中module模块用法实例分析
2015/11/12 Python
Python heapq使用详解及实例代码
2017/01/25 Python
python中pandas.DataFrame的简单操作方法(创建、索引、增添与删除)
2017/03/12 Python
django实现前后台交互实例
2017/08/07 Python
Python序列化基础知识(json/pickle)
2017/10/19 Python
Python实现使用request模块下载图片demo示例
2019/05/24 Python
python多线程共享变量的使用和效率方法
2019/07/16 Python
Python数据可视化:泊松分布详解
2019/12/07 Python
Python StringIO如何在内存中读写str
2020/01/07 Python
浅谈Python的方法解析顺序(MRO)
2020/03/05 Python
python GUI库图形界面开发之PyQt5表单布局控件QFormLayout详细使用方法与实例
2020/03/06 Python
python3 sleep 延时秒 毫秒实例
2020/05/04 Python
HTML5里autofocus自动聚焦属性使用介绍
2016/06/22 HTML / CSS
浅谈HTML5 defer和async的区别
2016/06/07 HTML / CSS
HTML5在线预览PDF的示例代码
2017/09/14 HTML / CSS
Sofmap官网:日本著名的数码电器专卖店
2017/05/19 全球购物
大学生护理专业自荐信
2013/10/03 职场文书
保卫科工作岗位职责
2014/03/01 职场文书
学习决心书
2014/03/11 职场文书
2014年教师节座谈会发言稿
2014/09/10 职场文书
中学生检讨书范文
2014/11/03 职场文书
公司酒会致辞
2015/07/30 职场文书
2016年教师节慰问信
2015/12/01 职场文书
Java常用函数式接口总结
2021/06/29 Java/Android