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中for循环语句的几种变型
Nov 26 PHP
php5.5中类级别的常量使用介绍
Oct 02 PHP
PHP实现获取FLV文件的时间
Feb 10 PHP
PHP加密解密字符串汇总
Apr 26 PHP
php编写简单的文章发布程序
Jun 18 PHP
在WordPress中使用wp_count_posts函数来统计文章数量
Jan 05 PHP
PHP数组去重比较快的实现方式
Jan 19 PHP
PHP数组的定义、初始化和数组元素的显示实现代码
Nov 05 PHP
php 读写json文件及修改json的方法
Mar 07 PHP
PHP获取当前系统时间的方法小结
Oct 03 PHP
TP5(thinkPHP框架)实现后台清除缓存功能示例
May 29 PHP
mac pecl 安装php7.1扩展教程
Oct 17 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 对输入信息的进行安全过滤的函数代码
2012/06/29 PHP
PHP URL路由类实例
2013/11/12 PHP
php采用ajax数据提交post与post常见方法总结
2014/11/10 PHP
php curl上传、下载、https登陆实现代码
2017/07/23 PHP
ThinkPHP实现转换数据库查询结果数据到对应类型的方法
2017/11/16 PHP
PHP类的自动加载机制实现方法分析
2019/01/10 PHP
PHP之多条件混合筛选功能的实现方法
2019/10/09 PHP
js实现GridView单选效果自动设置交替行、选中行、鼠标移动行背景色
2010/05/27 Javascript
javascript 终止函数执行操作
2014/02/14 Javascript
一个可以增加和删除行的table并可编辑表格中内容
2014/06/16 Javascript
Javascript基础教程之for循环
2015/01/18 Javascript
avalonjs实现仿微博的图片拖动特效
2015/05/06 Javascript
jQuery实现不断闪烁文字的方法
2015/05/15 Javascript
Jquery中巧用Ajax的beforeSend方法
2016/01/20 Javascript
JS搜狐面试题分析
2016/12/16 Javascript
详谈JavaScript的闭包及应用
2017/01/17 Javascript
vue-axios使用详解
2017/05/10 Javascript
浅谈struts1 &amp; jquery form 文件异步上传
2017/05/25 jQuery
js实现首屏延迟加载实现方法 js实现多屏单张图片延迟加载效果
2017/07/17 Javascript
前端html中jQuery实现对文本的搜索功能并把搜索相关内容显示出来
2017/11/14 jQuery
Vue实现跑马灯效果
2020/05/25 Javascript
在vscode 中设置 vue模板内容的方法
2020/09/02 Javascript
[05:39]2014DOTA2国际邀请赛 DK晋级胜者组专访战队国士无双
2014/07/14 DOTA
Python实现获取域名所用服务器的真实IP
2015/10/25 Python
Pandas中把dataframe转成array的方法
2018/04/13 Python
python单线程文件传输的实例(C/S)
2019/02/13 Python
简单了解python filter、map、reduce的区别
2020/01/14 Python
Python暴力破解Mysql数据的示例
2020/11/09 Python
Anaconda的安装与虚拟环境建立
2020/11/18 Python
老海军美国官网:Old Navy
2016/09/05 全球购物
加拿大时尚潮流大码女装购物网站:Addition Elle
2018/04/02 全球购物
美国中西部家用医疗设备商店:Med Mart(轮椅、踏板车、升降机等)
2019/04/26 全球购物
学习计划是什么
2019/04/30 职场文书
详解MySQL集群搭建
2021/05/26 MySQL
java中重写父类方法加不加@Override详解
2021/06/21 Java/Android
MySQL中的 inner join 和 left join的区别解析(小结果集驱动大结果集)
2023/05/08 MySQL