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 自写函数代码 获取关键字 去超链接
Feb 08 PHP
PHP中使用crypt()实现用户身份验证的代码
Sep 05 PHP
php中url函数介绍及使用示例
Feb 13 PHP
php调用c接口无错版介绍
Mar 11 PHP
php实现的click captcha点击验证码类实例
Sep 23 PHP
php使用ZipArchive提示Fatal error: Class ZipArchive not found in的解决方法
Nov 04 PHP
开启PHP Static 关键字之旅模式
Nov 13 PHP
PHP 网站修改默认访问文件的nginx配置
May 27 PHP
PHP环形链表实现方法示例
Sep 15 PHP
PHP结合Vue实现滚动底部加载效果
Dec 17 PHP
YII框架页面缓存操作示例
Apr 29 PHP
php 获取音视频时长,PHP 利用getid3 获取音频文件时长等数据
Apr 01 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
解决dede生成静态页和动态页转换的一些问题,及火车采集入库生成动态的办法
2007/03/29 PHP
php 什么是PEAR?(第三篇)
2009/03/19 PHP
PHP-FPM实现性能优化
2016/03/31 PHP
php连接mysql数据库
2017/03/21 PHP
PHP For循环字母A-Z当超过26个字母时输出AA,AB,AC
2020/02/16 PHP
javascript add event remove event
2008/04/07 Javascript
javascript之通用简单的table选项卡实现(二)
2010/05/09 Javascript
javascript向flash swf文件传递参数值注意细节
2012/12/11 Javascript
jQuery中bind,live,delegate与one方法的用法及区别解析
2013/12/30 Javascript
利用javascript打开模态对话框(示例代码)
2014/01/11 Javascript
一个简单的全屏图片上下打开显示网页效果示例
2014/07/08 Javascript
浅谈javascript的Touch事件
2015/09/27 Javascript
JavaScript代码性能优化总结(推荐)
2016/05/16 Javascript
Vue 去除路径中的#号
2018/04/19 Javascript
Vue 按键修饰符处理事件的方法
2018/05/04 Javascript
详解React项目中碰到的IE问题
2019/03/14 Javascript
elementUI select组件使用及注意事项详解
2019/05/29 Javascript
基于axios 的responseType类型的设置方法
2019/10/29 Javascript
解决vue 退出动画无效的问题
2020/08/09 Javascript
分析Python中设计模式之Decorator装饰器模式的要点
2016/03/02 Python
如何用Matplotlib 画三维图的示例代码
2020/07/28 Python
Python实现王者荣耀自动刷金币的完整步骤
2021/01/22 Python
中国医药集团国药在线:国药网
2017/02/06 全球购物
Sunglasses Shop丹麦:欧洲第一的太阳镜在线销售网站
2017/10/22 全球购物
联想德国官网:Lenovo Germany
2018/07/04 全球购物
JPA的特点
2014/10/25 面试题
啤酒销售实习自我鉴定
2013/09/24 职场文书
社区健康教育工作方案
2014/06/03 职场文书
计算机应用专业毕业生求职信
2014/06/03 职场文书
个人四风问题对照检查材料思想汇报
2014/10/06 职场文书
2015年清明节活动总结
2015/02/09 职场文书
2016国庆节67周年红领巾广播稿
2015/12/18 职场文书
高中体育课教学反思
2016/02/16 职场文书
Java数据开发辅助工具Docker与普通程序使用方法
2021/09/15 Java/Android
Python机器学习实战之k-近邻算法的实现
2021/11/27 Python
「月刊Comic Alive」2022年5月号封面公开
2022/03/21 日漫