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

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 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);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值