PHP的一个完美GIF等比缩放类,附带去除缩放黑背景


Posted in PHP onApril 01, 2014

现在写东西都喜欢封装成类.....大家调用一下就行了..我就不说怎么调用了

<?php
class resize_image{
   private $o_img_width;//原图像宽度
   private $o_img_height;//原图像高度
   private $n_img_width;//新图像宽度
   private $n_img_height;//新图像高度
   private $o_img_file;//原图像文件
   private $o_img_source;//原图像资源
   private $n_img_file;//新图像资源
   private $n_img_source;//新图像资源
   private $o_to_n_per=0.5;//图像缩放比
   //初始化内部变量
   function __construct($oldfile,$newfile){
       list($width,$height)=getimagesize($oldfile);
       $this->o_img_file=$oldfile;
       $this->o_img_width=$width;
       $this->o_img_height=$height;
       $this->n_img_file=$newfile;
   }
   //等比例缩放并且解决GIF透明色为黑色背景的问题
   function get_resize_scaling_img(){
       $this->n_img_width=$this->o_img_width*$this->o_to_n_per;
       $this->n_img_height=$this->o_img_height*$this->o_to_n_per;
       //等比例缩放图片(算法)
       if ( $this->n_img_width && ( $this->o_img_width <$this->o_img_height))
       {
             $this->n_img_width = ( $this->n_img_height/$this->o_img_height) * $this->o_img_width;
       }
       else
       {
            $this->n_img_height = ($this->n_img_width / $this->o_img_width) * $this->o_img_height;
       } 
       $this->o_img_source=imagecreatefromgif($this->o_img_file);
       //创建一个等比例缩放大小的画布
       $this->n_img_source=imagecreatetruecolor($this->o_img_width,$this->n_img_height);
       //美化:去除黑色不透明背景
       $trans_init=imagecolortransparent($this->o_img_source);
       //寻找透明色并且判断是否在总颜色中
       if($trans_init>=0 && $trans_init < imagecolorstotal($this->o_img_source)){
           //如果在的话则搜索这个颜色的RGB色相
           $trans_index=imagecolorsforindex($this->o_img_source,$trans_init);
           //找到之后就创建这样一个颜色
           $trans_new=imagecolorallocate($this->n_img_source,$trans_index["red"],$trans_index["green"],$trans_index["blue"]);
           //然后我们用这个颜色去填充新的图像
           imagefill($this->n_img_source,0,0,$trans_new);
           //然后我们在把填充色设置为透明
           imagecolortransparent($this->n_img_source,$trans_new);
       }
       //拷贝原图像到新画板上
       imagecopyresized($this->n_img_source,$this->o_img_source,0,0,0,0,$this->n_img_width,$this->n_img_height,$this->o_img_width,$this->o_img_height); 
       return $this->n_img_source;
   }
   //最终销毁资源
   function __destruct(){
       imagedestroy($this->o_img_source);
       imagedestroy($this->n_img_source);
   }
}

说明:因为先前没想那么多所以声明了很多私有的内部变量以便调用...程序看起来很笨拙啊......

PHP 相关文章推荐
默默小谈PHP&amp;MYSQL分页原理及实现
Jan 02 PHP
简单的PHP图片上传程序
Mar 27 PHP
php图片的裁剪与缩放生成符合需求的缩略图
Jan 11 PHP
php连接mssql数据库的几种方法
Feb 21 PHP
php inc文件使用的风险和注意事项
Nov 12 PHP
php简单实现多字节字符串翻转的方法
Mar 31 PHP
PHP数组游标实现对数组的各种操作详解
Jan 26 PHP
php实现生成验证码实例分享
Apr 10 PHP
PHP实现的多文件上传类及用法示例
May 06 PHP
php与python实现的线程池多线程爬虫功能示例
Oct 12 PHP
Laravel获取所有的数据库表及结构的方法
Oct 10 PHP
php png失真的原因及解决办法
Nov 17 PHP
PHP把网页保存为word文件的三种方法
Apr 01 #PHP
php时间戳转换的示例
Mar 31 #PHP
php使用curl存储cookie的示例
Mar 31 #PHP
php过滤敏感词的示例
Mar 31 #PHP
php根据年月获取季度的方法
Mar 31 #PHP
PHP调用VC编写的COM组件实例
Mar 29 #PHP
php定义数组和使用示例(php数组的定义方法)
Mar 29 #PHP
You might like
PHP编程过程中需要了解的this,self,parent的区别
2009/12/30 PHP
php读取纯真ip数据库使用示例
2014/01/26 PHP
ThinkPHP路由机制简介
2016/03/23 PHP
php for 循环使用的简单实例
2016/06/02 PHP
javascript 流畅动画实现原理
2009/09/08 Javascript
线路分流自动智能跳转代码,自动选择最快镜像网站(js)
2011/10/31 Javascript
javascript标签在页面中的位置探讨
2013/04/11 Javascript
node.js中的fs.writeFile方法使用说明
2014/12/14 Javascript
js获取checkbox值的方法
2015/01/28 Javascript
jQuery支持动态参数将函数绑定到事件上的方法
2015/03/17 Javascript
jquery调整表格行tr上下顺序实例讲解
2016/01/09 Javascript
jQuery弹层插件jquery.fancybox.js用法实例
2016/01/22 Javascript
Javascript实现图片轮播效果(二)图片序列节点的控制实现
2016/02/17 Javascript
JS实现的打字机效果完整实例
2016/06/20 Javascript
jquery表格datatables实例解析 直接加载和延迟加载
2016/08/12 Javascript
详解Nodejs内存治理
2018/05/13 NodeJs
JavaScript中var、let、const区别浅析
2018/06/24 Javascript
小程序ios音频播放没声音问题的解决
2018/07/11 Javascript
react-native使用leanclound消息推送的方法
2018/08/06 Javascript
vue项目中,main.js,App.vue,index.html的调用方法
2018/09/20 Javascript
Vue模板语法中数据绑定的实例代码
2019/05/17 Javascript
Python多线程获取返回值代码实例
2020/02/17 Python
印度尼西亚综合购物网站:Lazada印尼
2016/09/07 全球购物
法国珠宝店:CLEOR
2017/01/29 全球购物
FLOS美国官网:意大利高级照明工艺的传奇
2018/08/07 全球购物
Notino希腊:购买香水和美容产品
2019/07/25 全球购物
Kipling澳洲官网:购买凯浦林包包
2020/12/17 全球购物
市场开发计划书
2014/05/07 职场文书
艾滋病宣传活动总结
2014/05/08 职场文书
小学六一儿童节活动方案
2014/08/27 职场文书
财务管理专业自荐书
2014/09/02 职场文书
卖车协议书范本4篇
2014/10/01 职场文书
大明湖导游词
2015/02/03 职场文书
2015年教育实习工作总结
2015/04/24 职场文书
天那边观后感
2015/06/09 职场文书
在 Golang 中实现 Cache::remember 方法详解
2021/03/30 Python