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

 我这里没有判断文件类型,因为png和jpeg缩放后都不会出现黑色背景,就单独gif不行..查了下资料发现了一个完美的解决办法,附带有详解

现在写东西都喜欢封装成类.....大家调用一下就行了..我就不说怎么调用了
 代码如下:<?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);
 
   }
 
}
 
 
 
说明:因为先前没想那么多所以声明了很多私有的内部变量以便调用...程序看起来很笨拙啊......

时间: 2024-10-03 16:38:59

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

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

现在写东西都喜欢封装成类.....大家调用一下就行了..我就不说怎么调用了 复制代码 代码如下: <?phpclass 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_sou

一个完美php文件上传类使用实例

今天终于算是可以来更新一下paperen的网站,嗯--因为写毕设论文写累了所以就发表一篇关于上传文件类的东东吧,这个类也是自己写的,不知道对大家有没有用,如果觉得可以就拿去用吧.不过在编码上面还是没做好,自己是在utf8的页面将数据进行提交的,所以生成的文件如果保持原来的中文名字的话在文件夹中看到就是乱码的名字,如果不想出现乱码的话需要进行一下编码的转换.?  代码如下 复制代码 <?php define('NO_FILE', '不存在上传文件'); define('NOT_ALLOW_EXT'

一个完美的PHP ZIP压缩类代码

首先实例化,然后传参.两个参数.第一个关于你文件地址的一个Array.第二个是要你要保存的压缩包文件的绝对地址. For example:  代码如下 复制代码         $zipfiles =array("/root/pooy/test1.txt","/root/pooy/test2.txt");         $z = new PHPZip();         //$randomstr = random(8);         $zipfile = T

一个完美的JavaScript操作COOKIE类

 代码如下 复制代码 代码 /**提供客户端cookie操作类    *  * @param string uniqueN 唯一标识  *  * @author (凹凸曼)lyc  * @email jar-c@163.com  *  */ var cacheLY = function(uniqueN){     var uniqueN = (typeof(uniqueN) != "string") ? "" : "uniqueN_" + uni

一个完美网站的101项指标

网站 前言 世界上最有趣的职业是网站设计师,有人为自己的作品喊价5000美金,有人129美金就行,而很多人根本看不出这两者的差别,我见过一个加拿大 Freelancer 设计师,他的网站上有个报价系统,你可以选择自己的预算范围,其中最小的一个选项是2500-5000美金,而在 Craigslist (www.craigslist.org)上,百把美金的网站设计师比比皆是.如果你读 Alistapart (www.alistapart.com),就会知道顶尖设计师整天都在想什么,他们简直是小题大做

一个完美的计数器(怎样防止用户刷新页面时加1)

计数器|刷新|页面 大家好! 今天我想谈谈一个网页的计数器问题,有些网站的计数器在用户刷新一次页面时,记数值会加1,这样的计数器是不健全的.如果你的网站搞一些有奖活动,例如,"如果你是第100000个用户你将得到本站提供的奖品". 所以,下面给出一个计数器的原码,同时你要在这个ASP文件下新建一个counter.txt文件,用于存放记数值.<%function counts(counterfile) dim objfso,objtsapplication.lock '锁定对象se

一个完美创业点子的5个必备因素

如果你是一位想要去改变世界.充满激情的创业者,你就要拥有这样的心态以及走向成功的必须的因素.在这过程中,你会慢慢"感受"到这些.首先,最重要的一点就是你需要一个创业点子.而且必须是一个很好的点子.但是,你如何找到一个完美的创业点子呢?一个绝妙的创业点子往往都是不经意间闪现在脑海中,扎克伯格不就是这样吗?Facebook不也是这样诞生的吗?不过,你到底如何才能分辨这些好的或坏的的创意呢?尤其是这可能是你第一次创业或者只有你一个人单独创业,对于这个点子的可行性,你很容易陷入自我怀疑与犹豫不

如何策划建设一个完美的seo网站

中介交易 SEO诊断 淘宝客 云主机 技术大厅 如何策划建设一个完美的seo网站.建设一个站点,是轻而易举的事情,但是要建设一个会赚钱的站点,那可就得费一番心思了.在西部地区很多人都还许多老观念中乐此不彼,建一个网站几百元的事情,多简单.这种观念也不能怪他们,只能怪成都网站制作者给别人长期酝酿了一种错误的思想,导致别人失去的更多,今天四川昊邦科技想说的是,如何策划建设一个完美的seo网站,seo网站及所谓的营销型网站建设,它是一个看似简单,却需要重视很多细节的策划案,前期没有规划好,将会给后期的

PHP图片等比缩放类SimpleImage使用方法和使用实例分享

 这篇文章主要介绍了PHP图片等比缩放类SimpleImage使用方法和使用实例分享,需要的朋友可以参考下 使用方法示例: 设定宽度,等比例缩放    代码如下: <?php    include('SimpleImage.php');    $image = new SimpleImage();    $image->load('picture.jpg');    $image->resizeToWidth(250);    $image->save('picture2.jpg'