php生成图片缩略图,支持png透明
发布时间:2020-05-25 03:33:38 所属栏目:PHP 来源:互联网
导读:注:此功能依赖GD2图形库最近要用php生成缩略图,在网上找了一下,发现了这篇文章:PHP生成图片缩略图试用了一下后,发现有这样几个问题:1、png图片生成的缩略图是jpg格式的2、png图片生成的缩略图没有了透明(半透明)效果(填充了黑色背景)3、代码语法比
|
试用了一下后,发现有这样几个问题: 1、png图片生成的缩略图是jpg格式的 2、png图片生成的缩略图没有了透明(半透明)效果(填充了黑色背景) 3、代码语法比较老 因此,在这个版本的基础上简单修改优化了一下。 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;">图片的类型</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;">生成图象</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值 (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
