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 相关文章推荐
NT IIS下用ODBC连接数据库
Oct 09 PHP
PHP源码之 ext/mysql扩展部分
Jul 17 PHP
Php图像处理类代码分享
Jan 19 PHP
定义php常量的详解
Jun 09 PHP
php去除字符串中空字符的常用方法小结
Mar 17 PHP
php+ajax制作无刷新留言板
Oct 27 PHP
Zend Framework教程之Zend_Registry对象用法分析
Mar 22 PHP
PHP云打印类完整示例
Oct 15 PHP
thinkPHP5实现数据库添加内容的方法
Oct 25 PHP
php获取手机端的号码以及ip地址实例代码
Sep 12 PHP
PHP基于cookie实现统计在线人数功能示例
Jan 16 PHP
PHP中md5()函数的用法讲解
Mar 30 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
xml+php动态载入与分页
2006/10/09 PHP
需要注意的几个PHP漏洞小结
2012/02/05 PHP
封装ThinkPHP的一个文件上传方法实例
2014/10/31 PHP
smarty的section嵌套循环用法示例
2016/05/28 PHP
php有效防止图片盗用、盗链的两种方法
2016/11/01 PHP
phpStorm2020 注册码
2020/09/17 PHP
javascript自启动函数的问题探讨
2013/10/05 Javascript
JavaScript的事件代理和委托实例分析
2015/03/25 Javascript
JavaScript实现的简单拖拽效果
2015/06/01 Javascript
AngularJS基础 ng-disabled 指令详解及简单示例
2016/08/01 Javascript
JS实现将数字金额转换为大写人民币汉字的方法
2016/08/02 Javascript
js选项卡的制作方法
2017/01/23 Javascript
JavaScript+HTML5实现的日期比较功能示例
2017/07/12 Javascript
深入理解React高阶组件
2017/09/28 Javascript
vue-cli+webpack项目 修改项目名称的方法
2018/02/28 Javascript
vue配置多页面的实现方法
2018/05/22 Javascript
详解几十行代码实现一个vue的状态管理
2019/01/28 Javascript
js验证身份证号码记录的方法
2019/04/26 Javascript
vue项目如何监听localStorage或sessionStorage的变化
2021/01/04 Vue.js
在Python下尝试多线程编程
2015/04/28 Python
Python函数可变参数定义及其参数传递方式实例详解
2015/05/25 Python
Python复制文件操作实例详解
2015/11/10 Python
Python实现计算最小编辑距离
2016/03/17 Python
pandas 数据归一化以及行删除例程的方法
2018/11/10 Python
对python实现模板生成脚本的方法详解
2019/01/30 Python
Python实现二叉树的常见遍历操作总结【7种方法】
2019/03/06 Python
Python树莓派学习笔记之UDP传输视频帧操作详解
2019/11/15 Python
Python docutils文档编译过程方法解析
2020/06/23 Python
python右对齐的实例方法
2020/07/05 Python
Myprotein亚太地区:欧洲第一在线运动营养品牌
2020/12/20 全球购物
《路旁的橡树》教学反思
2014/04/07 职场文书
活动宣传策划方案
2014/05/23 职场文书
销售队伍口号
2014/06/11 职场文书
2014年办公室人员工作总结
2014/12/09 职场文书
主持人开幕词
2015/01/29 职场文书
浅谈@Value和@Bean的执行顺序问题
2021/06/16 Java/Android