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 常用类汇总 推荐收藏
May 13 PHP
php数组函数序列之array_keys() - 获取数组键名
Oct 30 PHP
destoon二次开发常用数据库操作
Jun 21 PHP
php实现使用正则将文本中的网址转换成链接标签
Dec 03 PHP
php的crc32函数使用时需要注意的问题(不然就是坑)
Apr 21 PHP
PHP的关于变量和日期处理的一些面试题目整理
Aug 10 PHP
Linux系统中设置多版本PHP共存配合Nginx服务器使用
Dec 21 PHP
Laravel路由设定和子路由设定实例分析
Mar 30 PHP
php实现按天数、星期、月份查询的搜索框
May 02 PHP
php通过两层过滤获取留言内容的方法
Jul 11 PHP
ThinkPHP 整合Bootstrap Ajax分页样式
Dec 23 PHP
Thinkphp5.0 框架视图view的比较标签用法分析
Oct 12 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面向对象全攻略 (十五) 多态的应用
2009/09/30 PHP
关于PHP结束标签的使用细节探讨及联想
2013/03/04 PHP
PHP实现HTML生成PDF文件的方法
2014/11/07 PHP
学习php设计模式 php实现合成模式(composite)
2015/12/08 PHP
PHP微信开发之有道翻译
2016/06/23 PHP
基于PHP实现栈数据结构和括号匹配算法示例
2017/08/10 PHP
php实现往pdf中加数字签名操作示例【附源码下载】
2018/08/07 PHP
使用git迁移Laravel项目至新开发环境的步骤详解
2020/04/06 PHP
Nigma vs Liquid BO3 第二场2.13
2021/03/10 DOTA
suggestion开发小结以及对键盘事件的总结(针对中文输入法状态)
2011/12/20 Javascript
jQuery实现切换字体大小的方法
2015/03/10 Javascript
javascript实现简单的分页特效
2015/08/12 Javascript
谈一谈jQuery核心架构设计
2016/03/28 Javascript
用JS动态设置CSS样式常见方法小结(推荐)
2016/11/10 Javascript
如何给ss bash 写一个 WEB 端查看流量的页面
2017/03/23 Javascript
js实现一个猜数字游戏
2017/03/31 Javascript
使用canvas及js简单生成验证码方法
2017/04/02 Javascript
原生JS实现N级菜单的代码
2017/05/21 Javascript
JS解析url查询参数的简单代码
2017/08/06 Javascript
Vue实现调节窗口大小时触发事件动态调节更新组件尺寸的方法
2018/09/15 Javascript
vue数据响应式原理知识点总结
2020/02/16 Javascript
解决vue使用vant下拉框van-dropdown-item 绑定title值不变问题
2020/08/05 Javascript
[03:07]【DOTA2亚洲邀请赛】我们,梦开始的地方
2017/03/07 DOTA
python实现校园网自动登录的示例讲解
2018/04/22 Python
Python3中urlencode和urldecode的用法详解
2019/07/23 Python
如何在VSCode下使用Jupyter的教程详解
2020/07/13 Python
10张动图学会python循环与递归问题
2021/02/06 Python
HTML5如何为形状图上颜色怎么绘制具有颜色和透明度的矩形
2014/06/23 HTML / CSS
物理教育专业毕业生推荐信
2013/11/03 职场文书
幼儿园运动会入场词
2014/02/10 职场文书
文明礼仪伴我行演讲稿
2014/05/12 职场文书
新员工入职欢迎词
2015/01/23 职场文书
2015年秋季小学开学标语
2015/07/16 职场文书
进行数据处理的6个 Python 代码块分享
2022/04/06 Python
多台电脑共享文件怎么设置?多台电脑共享文件操作教程
2022/04/08 数码科技
vue 把二维或多维数组转一维数组
2022/04/24 Vue.js