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木马攻击防御之道
Mar 24 PHP
简单的PHP留言本实例代码
May 09 PHP
PHP的范围解析操作符(::)的含义分析说明
Jul 03 PHP
php版淘宝网查询商品接口代码示例
Jun 17 PHP
ThinkPHP 整合Bootstrap Ajax分页样式
Dec 23 PHP
yii2使用GridView实现数据全选及批量删除按钮示例
Mar 01 PHP
PHP使用栈解决约瑟夫环问题算法示例
Aug 27 PHP
php利用云片网实现短信验证码功能的示例代码
Nov 18 PHP
php图片合成方法(多张图片合成一张)
Nov 25 PHP
PHP高并发和大流量解决方案整理
Dec 24 PHP
laravel框架学习笔记之组件化开发实现方法
Feb 01 PHP
gearman中任务的优先级和返回状态实例分析
Feb 27 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页面实现定时跳转的方法
2014/10/31 PHP
非常实用的PHP常用函数汇总
2014/12/17 PHP
Laravel 5.3 学习笔记之 错误&amp;日志
2016/08/28 PHP
PHP连接sftp并下载文件的方法教程
2018/08/26 PHP
laravel框架路由分组,中间件,命名空间,子域名,路由前缀实例分析
2020/02/18 PHP
JavaScript Event学习第二章 Event浏览器兼容性
2010/02/07 Javascript
jQuery编写widget的一些技巧分享
2010/10/28 Javascript
Jquery刷新页面背景图片随机变换的实现方法
2013/03/15 Javascript
IE、FF浏览器下修改标签透明度
2014/01/28 Javascript
javascript自动恢复文本框点击清除后的默认文本
2016/01/12 Javascript
10个JavaScript中易犯小错误
2016/02/14 Javascript
浅谈js中调用函数时加不加括号的问题
2016/07/28 Javascript
详解angular中如何监控dom渲染完毕
2017/01/03 Javascript
JavaScript中Math对象的方法介绍
2017/01/05 Javascript
微信小程序 ES6Promise.all批量上传文件实现代码
2017/04/14 Javascript
jQuery Json数据格式排版高亮插件json-viewer.js使用方法详解
2017/06/12 jQuery
bootstrap响应式导航条模板使用详解(含下拉菜单,弹出框)
2017/11/17 Javascript
原生js实现form表单序列化的方法
2018/08/02 Javascript
JavaScript动态创建二维数组的方法示例
2019/02/01 Javascript
nodeJs的安装与npm全局环境变量的配置详解
2020/01/06 NodeJs
[54:18]DOTA2-DPC中国联赛 正赛 PSG.LGD vs LBZS BO3 第一场 1月22日
2021/03/11 DOTA
Python中基本的日期时间处理的学习教程
2015/10/16 Python
怎样使用Python脚本日志功能
2016/08/14 Python
python3使用SMTP发送简单文本邮件
2018/06/19 Python
python绘制散点图并标记序号的方法
2018/12/11 Python
Python实现去除图片中指定颜色的像素功能示例
2019/04/13 Python
关于django 1.10 CSRF验证失败的解决方法
2019/08/31 Python
Scrapy框架实现的登录网站操作示例
2020/02/06 Python
python 如何引入协程和原理分析
2020/11/30 Python
Python 求向量的余弦值操作
2021/03/04 Python
汽车检测与维修专业求职信
2013/10/30 职场文书
计算机应用职专应届生求职信
2013/11/12 职场文书
家长会邀请书
2014/01/25 职场文书
优秀部门获奖感言
2014/02/14 职场文书
公司法定代表人授权委托书
2014/09/29 职场文书
学校党支部承诺书
2015/04/30 职场文书