-
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);
- }
- }
说明:因为先前没想那么多所以声明了很多私有的内部变量以便调用...程序看起来很笨拙啊......
出处:http://www.phpfensi.com/php/20201105/13406.html
栏目列表
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比
一款纯 JS 实现的轻量化图片编辑器
关于开发 VS Code 插件遇到的 workbench.scm.
前端设计模式——观察者模式
前端设计模式——中介者模式
创建型-原型模式