功能依赖GD2图形库
PHP生成缩略图,在网上找了一下,发现了这篇文章:PHP生成图片缩略图
试用了一下后,发现有这样几个问题:
2、png图片生成的缩略图没有了透明(半透明)效果(填充了黑色背景)
3、代码语法比较老
因此,在这个版本的基础上简单修改优化了一下。
PHP生成缩略图类
PHP
图片类型
</span><span style="color: #0000ff;">function</span> __construct(<span style="color: #800080;">$imgPath</span>,<span style="color: #800080;">$width</span>,<span style="color: #800080;">$height</span>,<span style="color: #800080;">$isCut</span>,<span style="color: #800080;">$savePath</span><span style="color: #000000;">) {
</span><span style="color: #800080;">$this</span>->srcimg = <span style="color: #800080;">$imgPath</span><span style="color: #000000;">;
</span><span style="color: #800080;">$this</span>->resize_width = <span style="color: #800080;">$width</span><span style="color: #000000;">;
</span><span style="color: #800080;">$this</span>->resize_height = <span style="color: #800080;">$height</span><span style="color: #000000;">;
</span><span style="color: #800080;">$this</span>->cut = <span style="color: #800080;">$isCut</span><span style="color: #000000;">;
</span><span style="color: #008000;">//</span><span style="color: #008000;"><a href="/tag/tupian/" target="_blank" class="keywords">图片</a>的类型</span>
<span style="color: #800080;">$this</span>->type = <span style="color: #008080;">strtolower</span>(<span style="color: #008080;">substr</span>(<span style="color: #008080;">strrchr</span>(<span style="color: #800080;">$this</span>->srcimg,"."),1<span style="color: #000000;">));
</span><span style="color: #008000;">//</span><span style="color: #008000;">初始化图象</span>
<span style="color: #800080;">$this</span>-><span style="color: #000000;">initi_img();
</span><span style="color: #008000;">//</span><span style="color: #008000;">目标图象地址</span>
<span style="color: #800080;">$this</span> -> dst_img(<span style="color: #800080;">$savePath</span><span style="color: #000000;">);
</span><span style="color: #008000;">//</span><span style="color: #008000;">--</span>
<span style="color: #800080;">$this</span>->width = imagesx(<span style="color: #800080;">$this</span>-><span style="color: #000000;">im);
</span><span style="color: #800080;">$this</span>->height = imagesy(<span style="color: #800080;">$this</span>-><span style="color: #000000;">im);
</span><span style="color: #008000;">//</span><span style="color: #008000;"><a href="/tag/shengcheng/" target="_blank" class="keywords">生成</a>图象</span>
<span style="color: #800080;">$this</span>-><span style="color: #000000;">newimg();
ImageDestroy (</span><span style="color: #800080;">$this</span>-><span style="color: #000000;">im);
}
</span><span style="color: #0000ff;">private</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> newimg() {
</span><span style="color: #008000;">//</span><span style="color: #008000;">改变后的图象的比例</span>
<span style="color: #800080;">$resize_ratio</span> = (<span style="color: #800080;">$this</span>->resize_width)/(<span style="color: #800080;">$this</span>-><span style="color: #000000;">resize_height);
</span><span style="color: #008000;">//</span><span style="color: #008000;">实际图象的比例</span>
<span style="color: #800080;">$ratio</span> = (<span style="color: #800080;">$this</span>->width)/(<span style="color: #800080;">$this</span>-><span style="color: #000000;">height);
</span><span style="color: #0000ff;">if</span>(<span style="color: #800080;">$this</span>-><span style="color: #000000;">cut) {
</span><span style="color: #008000;">//</span><span style="color: #008000;">裁图</span>
<span style="color: #800080;">$newimg</span> = imagecreatetruecolor(<span style="color: #800080;">$this</span>->resize_width,<span style="color: #800080;">$this</span>-><span style="color: #000000;">resize_height);
</span><span style="color: #0000ff;">if</span>(<span style="color: #800080;">$this</span>->type=="png"<span style="color: #000000;">) {
imagefill(</span><span style="color: #800080;">$newimg</span>,imagecolorallocatealpha(<span style="color: #800080;">$newimg</span>,127<span style="color: #000000;">));
}
</span><span style="color: #0000ff;">if</span>(<span style="color: #800080;">$ratio</span>>=<span style="color: #800080;">$resize_ratio</span><span style="color: #000000;">) {
</span><span style="color: #008000;">//</span><span style="color: #008000;">高度优先</span>
imagecopyresampled(<span style="color: #800080;">$newimg</span>,<span style="color: #800080;">$this</span>->im,<span style="color: #800080;">$this</span>->resize_width,<span style="color: #800080;">$this</span>->resize_height,((<span style="color: #800080;">$this</span>->height)*<span style="color: #800080;">$resize_ratio</span>),<span style="color: #800080;">$this</span>-><span style="color: #000000;">height);
} </span><span style="color: #0000ff;">else</span><span style="color: #000000;"> {
</span><span style="color: #008000;">//</span><span style="color: #008000;">宽度优先</span>
imagecopyresampled(<span style="color: #800080;">$newimg</span>,<span style="color: #800080;">$this</span>->width,((<span style="color: #800080;">$this</span>->width)/<span style="color: #800080;">$resize_ratio</span><span style="color: #000000;">));
}
} </span><span style="color: #0000ff;">else</span><span style="color: #000000;"> {
</span><span style="color: #008000;">//</span><span style="color: #008000;">不裁图</span>
<span style="color: #0000ff;">if</span>(<span style="color: #800080;">$ratio</span>>=<span style="color: #800080;">$resize_ratio</span><span style="color: #000000;">) {
</span><span style="color: #800080;">$newimg</span> = imagecreatetruecolor(<span style="color: #800080;">$this</span>->resize_width,(<span style="color: #800080;">$this</span>->resize_width)/<span style="color: #800080;">$ratio</span><span style="color: #000000;">);
</span><span style="color: #0000ff;">if</span>(<span style="color: #800080;">$this</span>->type=="png"<span style="color: #000000;">) {
imagefill(</span><span style="color: #800080;">$newimg</span>,127<span style="color: #000000;">));
}
imagecopyresampled(</span><span style="color: #800080;">$newimg</span>,(<span style="color: #800080;">$this</span>->resize_width)/<span style="color: #800080;">$ratio</span>,<span style="color: #800080;">$this</span>-><span style="color: #000000;">height);
} </span><span style="color: #0000ff;">else</span><span style="color: #000000;"> {
</span><span style="color: #800080;">$newimg</span> = imagecreatetruecolor((<span style="color: #800080;">$this</span>->resize_height)*<span style="color: #800080;">$ratio</span>,<span style="color: #800080;">$this</span>-><span style="color: #000000;">resize_height);
</span><span style="color: #0000ff;">if</span>(<span style="color: #800080;">$this</span>->type=="png"<span style="color: #000000;">) {
imagefill(</span><span style="color: #800080;">$newimg</span>,(<span style="color: #800080;">$this</span>->resize_height)*<span style="color: #800080;">$ratio</span>,<span style="color: #800080;">$this</span>-><span style="color: #000000;">height);
}
}
</span><span style="color: #0000ff;">if</span>(<span style="color: #800080;">$this</span>->type=="png"<span style="color: #000000;">) {
imagesavealpha(</span><span style="color: #800080;">$newimg</span>,<span style="color: #0000ff;">true</span><span style="color: #000000;">);
imagepng (</span><span style="color: #800080;">$newimg</span>,<span style="color: #800080;">$this</span>-><span style="color: #000000;">dstimg);
} </span><span style="color: #0000ff;">else</span><span style="color: #000000;"> {
imagejpeg (</span><span style="color: #800080;">$newimg</span>,<span style="color: #800080;">$this</span>-><span style="color: #000000;">dstimg);
}
}
</span><span style="color: #008000;">//</span><span style="color: #008000;">初始化图象</span>
<span style="color: #0000ff;">private</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> initi_img() {
</span><span style="color: #0000ff;">if</span>(<span style="color: #800080;">$this</span>->type=="jpg"<span style="color: #000000;">) {
</span><span style="color: #800080;">$this</span>->im = imagecreatefromjpeg(<span style="color: #800080;">$this</span>-><span style="color: #000000;">srcimg);
}
</span><span style="color: #0000ff;">if</span>(<span style="color: #800080;">$this</span>->type=="gif"<span style="color: #000000;">) {
</span><span style="color: #800080;">$this</span>->im = imagecreatefromgif(<span style="color: #800080;">$this</span>-><span style="color: #000000;">srcimg);
}
</span><span style="color: #0000ff;">if</span>(<span style="color: #800080;">$this</span>->type=="png"<span style="color: #000000;">) {
</span><span style="color: #800080;">$this</span>->im = imagecreatefrompng(<span style="color: #800080;">$this</span>-><span style="color: #000000;">srcimg);
}
}
</span><span style="color: #008000;">//</span><span style="color: #008000;">图象目标地址</span>
<span style="color: #0000ff;">private</span> <span style="color: #0000ff;">function</span> dst_img(<span style="color: #800080;">$dstpath</span><span style="color: #000000;">) {
</span><span style="color: #800080;">$full_length</span> = <span style="color: #008080;">strlen</span>(<span style="color: #800080;">$this</span>-><span style="color: #000000;">srcimg);
</span><span style="color: #800080;">$type_length</span> = <span style="color: #008080;">strlen</span>(<span style="color: #800080;">$this</span>-><span style="color: #000000;">type);
</span><span style="color: #800080;">$name_length</span> = <span style="color: #800080;">$full_length</span>-<span style="color: #800080;">$type_length</span><span style="color: #000000;">;
</span><span style="color: #800080;">$name</span> = <span style="color: #008080;">substr</span>(<span style="color: #800080;">$this</span>->srcimg,<span style="color: #800080;">$name_length</span>-1<span style="color: #000000;">);
</span><span style="color: #800080;">$this</span>->dstimg = <span style="color: #800080;">$dstpath</span><span style="color: #000000;">;
}
}
?>
使用
= resizeimage($imgPath,$width,$height,$isCut,$savePath);
参数
$imgPath:原图片地址
$width:缩略图宽
$height:缩略图高
$isCut:是否裁剪,bool值
示例
PHP
"ResizeImage.PHP"
</span><span style="color: #008000;">//</span><span style="color: #008000;">jpg</span>
<span style="color: #800080;">$jpgResize</span> = <span style="color: #0000ff;">new</span> ResizeImage("img/test_1920_1200.jpg",320,240,<span style="color: #0000ff;">false</span>,"img/test_320_240.jpg"<span style="color: #000000;">);
</span><span style="color: #008000;">//</span><span style="color: #008000;">png</span>
<span style="color: #800080;">$pngResize</span> = <span style="color: #0000ff;">new</span> ResizeImage("img/test_1024_746.png","img/test_320_240.png"<span style="color: #000000;">);
?>
效果
403f0.jpg" alt="">