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中的Class的几点个人看法
Oct 09 PHP
php中使用explode查找某个字符是否存在的方法
Jul 12 PHP
php和js如何通过json互相传递数据相关问题探讨
Feb 26 PHP
PHP操作MongoDB GridFS 存储文件的详解
Jun 20 PHP
使用PHP导出Word文档的原理和实例
Oct 21 PHP
ThinkPHP CURD方法之table方法详解
Jun 18 PHP
ThinkPHP3.2.2的插件控制器功能简述
Jul 09 PHP
通过php删除xml文档内容的方法
Jan 23 PHP
php文件下载处理方法分析
Apr 22 PHP
PHP+ajax分页实例简析
Dec 07 PHP
PHP框架Laravel插件Pagination实现自定义分页
Apr 22 PHP
PHP排序算法之基数排序(Radix Sort)实例详解
Apr 21 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实现redis数据库指定库号迁移的方法
2015/01/14 PHP
PHP检查URL包含特定字符串实例方法
2019/02/11 PHP
PHP常用工具函数小结【移除XSS攻击、UTF8与GBK编码转换等】
2019/04/27 PHP
javascript Firefox与IE 替换节点的方法
2010/02/24 Javascript
使用jQuery避免鼠标双击的解决方案
2013/08/21 Javascript
jQuery实现下拉框功能实例代码
2016/05/06 Javascript
JavaScript中的this引用(推荐)
2016/08/05 Javascript
jQuery学习笔记——jqGrid的使用记录(实现分页、搜索功能)
2016/11/09 Javascript
微信公众号开发 实现点击返回按钮就返回到聊天界面
2016/12/15 Javascript
学好js,这些js函数概念一定要知道【推荐】
2017/01/19 Javascript
JS实现问卷星自动填问卷脚本并在两秒自动提交功能
2020/06/17 Javascript
vue2.0.js的多级联动选择器实现方法
2018/02/09 Javascript
layer.open 按钮的点击事件关闭方法
2018/08/17 Javascript
js实现前面自动补全位数的方法
2018/10/10 Javascript
vue中多路由表头吸顶实现的几种布局方式
2019/04/12 Javascript
微信打开网址添加在浏览器中打开提示的办法
2019/05/20 Javascript
利用python求解物理学中的双弹簧质能系统详解
2017/09/29 Python
pycharm远程调试openstack代码
2017/11/21 Python
python使用os.listdir和os.walk获得文件的路径的方法
2017/12/16 Python
对Python捕获控制台输出流的方法详解
2019/01/07 Python
Python 通过requests实现腾讯新闻抓取爬虫的方法
2019/02/22 Python
python ddt数据驱动最简实例代码
2019/02/22 Python
python实现输入的数据在地图上生成热力图效果
2019/12/06 Python
运行tensorflow python程序,限制对GPU和CPU的占用操作
2020/02/06 Python
python实现逢七拍腿小游戏的思路详解
2020/05/26 Python
一篇文章带你学习CSS3图片边框
2020/11/04 HTML / CSS
雅诗兰黛澳大利亚官网:Estée Lauder澳大利亚
2019/05/31 全球购物
台湾良兴购物网:EcLife
2019/12/01 全球购物
小学英语教学反思
2014/01/30 职场文书
研究生考核个人自我鉴定
2014/03/27 职场文书
《吃水不忘挖井人》教学反思
2014/04/15 职场文书
《大作家的小老师》教学反思
2014/04/16 职场文书
语文教研活动总结
2014/07/02 职场文书
对外汉语专业大学生职业生涯规划书
2014/10/11 职场文书
2015年企业工作总结范文
2015/04/28 职场文书
2016年幼儿园万圣节活动总结
2016/04/05 职场文书