注意:这个
函数依赖于GD2的图形库
最近,您必须使用PHP生成缩略图,并在网上查找并找到这篇文章:PHP生成
图片缩略图。
经过一番试验,我们
发现有几个问题。
1,PNG图片生成的缩略图是JPG格式的。
2,PNG图片生成的缩略图没有透明(半透明)效果(填充黑色
背景)。
三.代码语法比较旧。
因此,在这个版本的基础上对一个简单的
修改进行了
优化。
缩略图类的PHP生成
< PHP
*
*
属性:
调整图像(PNG,JPG,GIF)
*十年后作者的兄弟。
*
日期:2014.11.13
* /
类resizeimage {
图片
类型 私人$类型;
实际宽度
私人宽度;
/实际高度
私人身高;
更改宽度后/
私人resize_width美元;
在高度改变之后/
私人resize_height美元;
是否削减计划
私人削减;
/源图像
私人srcimg美元;
目标地址的映像
私人dstimg美元;
创建临时映像
私人即时通讯;
功能__construct(imgpath美元美元美元,宽度,高度,从而美元美元,
保存路径){
美元-> srcimg = $ imgpath;
美元-> resize_width = $宽度;
美元-> resize_height = $高度;
美元->切= $被切断;
类型图片
美元->类型= strtolower(substr(strrchr(美元-> srcimg,,),1));
初始化图像
美元-> initi_img();
目标地址的映像
这dst_img美元($保存路径);
美元->宽度= imagesx(美元-> IM);
美元->高度= imagesy(美元-> IM);
生成图像
美元-> newimg();
销毁一图像(美元-> IM);
}
私有函数newimg(){
在比值/图像变化后
resize_ratio美元=(美元-> resize_width)/(美元-> resize_height);
实际图像的比例
$ =($ - >宽度)($ - >高度);
如果($ - >削减){
剪切/映射
newimg美元=新建一个真彩色图像(美元-> resize_width,美元-> resize_height);
如果($ = type =PNG ){
imagefill(newimg美元,0, 0,imagecolorallocatealpha(newimg美元,0, 0, 0,127));
}
如果(美元比> = $ resize_ratio){
高优先级
imagecopyresampled(newimg美元,美元->通讯,0, 0, 0,0,美元-> resize_width,美元-> resize_height,(美元->高度)* $ resize_ratio),美元->高度);
{人}
宽度优先
imagecopyresampled(newimg美元,美元->通讯,0, 0, 0,0,resize_width美元->,-> resize_height美元,美元->宽度(($这->宽度)/ $ resize_ratio));
}
{人}
不要剪切/映射
如果(美元比> = $ resize_ratio){
newimg美元=新建一个真彩色图像(美元-> resize_width,(($这-> resize_width) /价格比);
如果($ = type =PNG ){
imagefill(newimg美元,0, 0,imagecolorallocatealpha(newimg美元,0, 0, 0,127));
}
imagecopyresampled(newimg美元,美元->通讯,0, 0, 0,0,美元-> resize_width,(美元-> resize_width) /价格比,美元->美元->宽度、高度);
{人}
newimg美元=新建一个真彩色图像(($这-> resize_height)* $比美元-> resize_height);
如果($ = type =PNG ){
imagefill(newimg美元,0, 0,imagecolorallocatealpha(newimg美元,0, 0, 0,127));
}
imagecopyresampled(newimg美元,美元->通讯,0, 0, 0,0,(美元-> resize_height)* $比美元-> resize_height,美元->美元->宽度、高度);
}
}
如果($ = type =PNG ){
imagesavealpha(newimg美元,真的);
Imagepng ($newimg, $this->dstimg);
{人}
imagejpeg(newimg美元,美元-> dstimg);
}
}
初始化图像
私有函数initi_img(){
如果($ = type = ){
美元->我= imagecreatefromjpeg(美元-> srcimg);
}
如果($typegif){
美元->我= imagecreatefromgif(美元-> srcimg);
}
如果($ = type =PNG ){
美元->我= imagecreatefrompng(美元-> srcimg);
}
}
图像/目标地址
私有函数dst_img($ dstpath){
full_length美元= strlen(美元-> srcimg);
type_length美元= strlen(美元->型);
name_length美元美元美元type_length full_length =;
$name = substr(美元-> srcimg,0,name_length-1美元);
美元-> dstimg = $ dstpath;
}
}
>
使用
在使用时,可以直接调用类的构造函数,构造函数如下所示:
resizeimage美元=新resizeimage(imgpath美元美元美元,宽度,高度,从而美元美元,保存路径);
参数 imgpath美元:原始图片地址
宽度:缩略图的宽度。
高度:高缩略图
从而美元:是否切断,布尔值
为保存路径:缩略图的地址(可以作为原始图片地址相同)
样品
< PHP
包括resizeimage .php;
jpgresize美元=新resizeimage(IMG / test_1920_1200 .webp
PNG
pngresize美元=新resizeimage(IMG / test_1024_746 PNG 。
>
影响