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和XSS跨站攻击的防范
Apr 17 PHP
用来给图片加水印的PHP类
Apr 09 PHP
PHP生成HTML静态页面实例代码
Aug 31 PHP
Ajax+PHP 边学边练 之二 实例
Nov 24 PHP
php性能优化分析工具XDebug 大型网站调试工具
May 22 PHP
ThinkPHP3.1的Widget新用法
Jun 19 PHP
php内存缓存实现方法
Jan 24 PHP
解决php表单重复提交实现方法
Sep 29 PHP
PHP使用FFmpeg获取视频播放总时长与码率等信息
Sep 13 PHP
PHP标准库(PHP SPL)详解
Mar 16 PHP
浅谈thinkphp的nginx配置,以及重写隐藏index.php入口文件方法
Oct 12 PHP
如何在Mac上通过docker配置PHP开发环境
May 29 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实现网站插件机制的方法
2009/11/10 PHP
php单一接口的实现方法
2015/06/20 PHP
用JavaScript对JSON进行模式匹配 (Part 2 - 实现)
2010/07/17 Javascript
JS左右无缝滚动(一般方法+面向对象方法)
2012/08/17 Javascript
Jquery实现列表(隔行换色,全选,鼠标滑过当前行)效果实例
2013/06/09 Javascript
angular简介和其特点介绍
2015/01/29 Javascript
详解Bootstrap创建表单的三种格式(一)
2016/01/04 Javascript
js仿腾讯QQ的web登陆界面
2016/08/19 Javascript
使用bootstrap实现多窗口和拖动效果
2016/09/22 Javascript
移动端滑动插件Swipe教程
2016/10/16 Javascript
浅谈Node.js:Buffer模块
2016/12/05 Javascript
详解nodejs微信公众号开发——3.封装消息响应模块
2017/04/10 NodeJs
浅谈Vue组件及组件的注册方法
2018/08/24 Javascript
Javascript Dom元素获取和添加详解
2019/09/24 Javascript
小程序点击图片实现png转jpg
2019/10/22 Javascript
js模拟实现烟花特效
2020/03/10 Javascript
vue在图片上传的时候压缩图片
2020/11/18 Vue.js
动态实现element ui的el-table某列数据不同样式的示例
2021/01/22 Javascript
[52:31]VP vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python字符串和文件操作常用函数分析
2015/04/08 Python
python实现文件快照加密保护的方法
2015/06/30 Python
python 自定义装饰器实例详解
2019/07/20 Python
python装饰器的特性原理详解
2019/12/25 Python
简单了解Python变量作用域正确使用方法
2020/06/12 Python
Fanatics法国官网:美国体育电商
2019/08/27 全球购物
int *p=NULL和*p= NULL有什么区别
2014/10/23 面试题
EJB发布WEB服务一般步骤
2012/10/31 面试题
Shell脚本如何向终端输出信息
2014/04/25 面试题
食品营养与检测应届生求职信
2013/11/08 职场文书
药品促销活动方案
2014/02/14 职场文书
原材料检验岗位职责
2014/03/15 职场文书
自我管理的活动方案
2014/08/25 职场文书
导游词之无锡古运河
2019/11/14 职场文书
HTML+CSS+JS实现图片的瀑布流布局的示例代码
2021/04/22 HTML / CSS
windows安装 redis 6.2.6最新步骤详解
2022/04/26 Redis
Redis全局ID生成器的实现
2022/06/05 Redis