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 正则表达式小结
Aug 31 PHP
php中用加号与用array_merge合并数组的区别深入分析
Jun 03 PHP
yii框架配置默认controller和action示例
Apr 30 PHP
php使用curl获取https请求的方法
Feb 11 PHP
php实现通用的从数据库表读取数据到数组的函数实例
Mar 21 PHP
typecho插件编写教程(三):保存配置
May 28 PHP
PHP内核探索之变量
Dec 22 PHP
Yii中创建自己的Widget实例
Jan 05 PHP
thinkphp3.2实现在线留言提交验证码功能
Jul 19 PHP
关于php支持的协议与封装协议总结(推荐)
Nov 17 PHP
php获取微信共享收货地址的方法
Dec 21 PHP
浅谈Laravel模板实体转义带来的坑
Oct 22 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
PHP4与PHP5的时间格式问题
2008/02/17 PHP
PHP正确配置mysql(apache环境)
2011/08/28 PHP
php结合ACCESS的跨库查询功能
2015/06/12 PHP
PHP结合jQuery实现找回密码
2015/07/22 PHP
PHP简单的MVC框架实现方法
2015/12/01 PHP
php+iframe 实现上传文件功能示例
2020/03/04 PHP
JS处理VBArray的函数使用说明
2008/05/11 Javascript
Javascript hasOwnProperty 方法 &amp; in 关键字
2008/11/26 Javascript
Jsonp 跨域的原理以及Jquery的解决方案
2010/05/18 Javascript
解决Extjs 4 Panel作为Window组件的子组件时出现双重边框问题
2013/01/11 Javascript
jQuery中的ready函数与window.onload谁先执行
2016/06/21 Javascript
将angular.js项目整合到.net mvc中的方法详解
2017/06/29 Javascript
前端把html表格生成为excel表格的实例
2017/09/19 Javascript
JavaScript 数组去重并统计重复元素出现的次数实例
2017/12/14 Javascript
微信小程序制作表格的方法
2019/02/14 Javascript
Vue自定义指令上报Google Analytics事件统计的方法
2019/02/25 Javascript
ES6基础之数组和对象的拓展实例详解
2019/08/22 Javascript
VUE实现强制渲染,强制更新
2019/10/29 Javascript
linecache模块加载和缓存文件内容详解
2018/01/11 Python
Python用sndhdr模块识别音频格式详解
2018/01/11 Python
Anaconda入门使用总结
2018/04/05 Python
Python3.6简单反射操作示例
2018/06/14 Python
python 字典操作提取key,value的方法
2019/06/26 Python
pandas DataFrame行或列的删除方法的实现示例
2019/08/02 Python
Python进阶之使用selenium爬取淘宝商品信息功能示例
2019/09/16 Python
python3格式化字符串 f-string的高级用法(推荐)
2020/03/04 Python
python中pickle模块浅析
2020/12/29 Python
俄罗斯香水和化妆品在线商店:Aroma-butik
2020/02/28 全球购物
医务人员竞聘职务自我评价分享
2013/11/08 职场文书
大专会计自我鉴定
2014/02/06 职场文书
《手指教学》反思
2014/02/14 职场文书
《棉鞋里的阳光》教学反思
2016/02/20 职场文书
python识别围棋定位棋盘位置
2021/07/26 Python
SQL实现LeetCode(176.第二高薪水)
2021/08/04 MySQL
Python超详细分步解析随机漫步
2022/03/17 Python
解决WINDOWS电脑开机后桌面没有任何图标
2022/04/09 数码科技