Heim > Backend-Entwicklung > PHP-Tutorial > So generieren Sie transparente PNG-Bildminiaturansichten in PHP

So generieren Sie transparente PNG-Bildminiaturansichten in PHP

WBOY
Freigeben: 2016-08-08 09:33:30
Original
1265 Leute haben es durchsucht

Hinweis: Diese Funktion hängt von der GD2-Grafikbibliothek ab

Vor kurzem wollte ich PHP zum Generieren von Miniaturansichten verwenden. Ich habe online gesucht und diesen Artikel gefunden: Bildminiaturansichten mit PHP generieren

Nach dem Ausprobieren habe ich folgende Probleme festgestellt:

1. Die aus PNG-Bildern generierten Miniaturansichten liegen im JPG-Format vor.

2. Das aus dem PNG-Bild generierte Miniaturbild hat keinen transparenten (halbtransparenten) Effekt (gefüllt mit schwarzem Hintergrund).

3. Die Codesyntax ist relativ alt

Daher haben wir es einfach auf Basis dieser Version modifiziert und optimiert.

PHP generiert eine Miniaturansichtsklasse

<?<span>php </span><span>/*</span><span> * desc: Resize Image(png, jpg, gif)
     * author: 十年后的卢哥哥(http://www.cnblogs.com/lurenjiashuo/)
     * date: 2014.11.13
     * base from: http://www.oschina.net/code/snippet_5189_2491 </span><span>*/</span><span>class</span><span> ResizeImage { </span><span>//</span><span>图片类型</span><span>private</span><span>$type</span><span>; </span><span>//</span><span>实际宽度</span><span>private</span><span>$width</span><span>; </span><span>//</span><span>实际高度</span><span>private</span><span>$height</span><span>; </span><span>//</span><span>改变后的宽度</span><span>private</span><span>$resize_width</span><span>; </span><span>//</span><span>改变后的高度</span><span>private</span><span>$resize_height</span><span>; </span><span>//</span><span>是否裁图</span><span>private</span><span>$cut</span><span>; </span><span>//</span><span>源图象</span><span>private</span><span>$srcimg</span><span>; </span><span>//</span><span>目标图象地址</span><span>private</span><span>$dstimg</span><span>; </span><span>//</span><span>临时创建的图象</span><span>private</span><span>$im</span><span>; </span><span>function</span> __construct(<span>$imgPath</span>, <span>$width</span>, <span>$height</span>, <span>$isCut</span>, <span>$savePath</span><span>) { </span><span>$this</span>->srcimg = <span>$imgPath</span><span>; </span><span>$this</span>->resize_width = <span>$width</span><span>; </span><span>$this</span>->resize_height = <span>$height</span><span>; </span><span>$this</span>->cut = <span>$isCut</span><span>; </span><span>//</span><span>图片的类型</span><span>$this</span>->type = <span>strtolower</span>(<span>substr</span>(<span>strrchr</span>(<span>$this</span>->srcimg,"."),1<span>)); </span><span>//</span><span>初始化图象</span><span>$this</span>-><span>initi_img(); </span><span>//</span><span>目标图象地址</span><span>$this</span> -> dst_img(<span>$savePath</span><span>); </span><span>//</span><span>--</span><span>$this</span>->width = imagesx(<span>$this</span>-><span>im); </span><span>$this</span>->height = imagesy(<span>$this</span>-><span>im); </span><span>//</span><span>生成图象</span><span>$this</span>-><span>newimg();
            ImageDestroy (</span><span>$this</span>-><span>im);
        } </span><span>private</span><span>function</span><span> newimg() { </span><span>//</span><span>改变后的图象的比例</span><span>$resize_ratio</span> = (<span>$this</span>->resize_width)/(<span>$this</span>-><span>resize_height); </span><span>//</span><span>实际图象的比例</span><span>$ratio</span> = (<span>$this</span>->width)/(<span>$this</span>-><span>height); </span><span>if</span>(<span>$this</span>-><span>cut) { </span><span>//</span><span>裁图</span><span>$newimg</span> = imagecreatetruecolor(<span>$this</span>->resize_width,<span>$this</span>-><span>resize_height); </span><span>if</span>(<span>$this</span>->type=="png"<span>) {
                    imagefill(</span><span>$newimg</span>, 0, 0, imagecolorallocatealpha(<span>$newimg</span>, 0, 0, 0, 127<span>));
                } </span><span>if</span>(<span>$ratio</span>>=<span>$resize_ratio</span><span>) { </span><span>//</span><span>高度优先</span> imagecopyresampled(<span>$newimg</span>, <span>$this</span>->im, 0, 0, 0, 0, <span>$this</span>->resize_width,<span>$this</span>->resize_height, ((<span>$this</span>->height)*<span>$resize_ratio</span>), <span>$this</span>-><span>height);
                } </span><span>else</span><span> { </span><span>//</span><span>宽度优先</span> imagecopyresampled(<span>$newimg</span>, <span>$this</span>->im, 0, 0, 0, 0, <span>$this</span>->resize_width, <span>$this</span>->resize_height, <span>$this</span>->width, ((<span>$this</span>->width)/<span>$resize_ratio</span><span>));
                }
            } </span><span>else</span><span> { </span><span>//</span><span>不裁图</span><span>if</span>(<span>$ratio</span>>=<span>$resize_ratio</span><span>) { </span><span>$newimg</span> = imagecreatetruecolor(<span>$this</span>->resize_width,(<span>$this</span>->resize_width)/<span>$ratio</span><span>); </span><span>if</span>(<span>$this</span>->type=="png"<span>) {
                        imagefill(</span><span>$newimg</span>, 0, 0, imagecolorallocatealpha(<span>$newimg</span>, 0, 0, 0, 127<span>));
                    }
                    imagecopyresampled(</span><span>$newimg</span>, <span>$this</span>->im, 0, 0, 0, 0, <span>$this</span>->resize_width, (<span>$this</span>->resize_width)/<span>$ratio</span>, <span>$this</span>->width, <span>$this</span>-><span>height);
                } </span><span>else</span><span> { </span><span>$newimg</span> = imagecreatetruecolor((<span>$this</span>->resize_height)*<span>$ratio</span>,<span>$this</span>-><span>resize_height); </span><span>if</span>(<span>$this</span>->type=="png"<span>) {
                        imagefill(</span><span>$newimg</span>, 0, 0, imagecolorallocatealpha(<span>$newimg</span>, 0, 0, 0, 127<span>));
                    }
                    imagecopyresampled(</span><span>$newimg</span>, <span>$this</span>->im, 0, 0, 0, 0, (<span>$this</span>->resize_height)*<span>$ratio</span>, <span>$this</span>->resize_height, <span>$this</span>->width, <span>$this</span>-><span>height);
                }
            } </span><span>if</span>(<span>$this</span>->type=="png"<span>) {
                imagesavealpha(</span><span>$newimg</span>, <span>true</span><span>);
                imagepng (</span><span>$newimg</span>,<span>$this</span>-><span>dstimg);
            } </span><span>else</span><span> {
                imagejpeg (</span><span>$newimg</span>,<span>$this</span>-><span>dstimg);
            }
        } </span><span>//</span><span>初始化图象</span><span>private</span><span>function</span><span> initi_img() { </span><span>if</span>(<span>$this</span>->type=="jpg"<span>) { </span><span>$this</span>->im = imagecreatefromjpeg(<span>$this</span>-><span>srcimg);
            } </span><span>if</span>(<span>$this</span>->type=="gif"<span>) { </span><span>$this</span>->im = imagecreatefromgif(<span>$this</span>-><span>srcimg);
            } </span><span>if</span>(<span>$this</span>->type=="png"<span>) { </span><span>$this</span>->im = imagecreatefrompng(<span>$this</span>-><span>srcimg);
            }
        } </span><span>//</span><span>图象目标地址</span><span>private</span><span>function</span> dst_img(<span>$dstpath</span><span>) { </span><span>$full_length</span> = <span>strlen</span>(<span>$this</span>-><span>srcimg); </span><span>$type_length</span> = <span>strlen</span>(<span>$this</span>-><span>type); </span><span>$name_length</span> = <span>$full_length</span>-<span>$type_length</span><span>; </span><span>$name</span> = <span>substr</span>(<span>$this</span>->srcimg,0,<span>$name_length</span>-1<span>); </span><span>$this</span>->dstimg = <span>$dstpath</span><span>;
        }
    } </span>?>
Nach dem Login kopieren

verwenden

Wenn Sie es verwenden, rufen Sie einfach den Konstruktor der Klasse direkt auf. Der Konstruktor lautet wie folgt:

<span>$resizeimage</span> = <span>new</span> resizeimage($imgPath, $width, $height, $isCut, $savePath);
Nach dem Login kopieren

Parameter

$imgPath: Originalbildadresse

$width: Miniaturbildbreite

$height: Höhe der Miniaturansicht

$isCut: Ob zugeschnitten werden soll, boolescher Wert

$savePath: Miniaturbildadresse (kann mit der Originalbildadresse identisch sein)

Beispiel

<?<span>php </span><span>include</span> "ResizeImage.php"<span>; </span><span>//</span><span>jpg</span><span>$jpgResize</span> = <span>new</span> ResizeImage("img/test_1920_1200.jpg", 320, 240, <span>false</span>, "img/test_320_240.jpg"<span>); </span><span>//</span><span>png</span><span>$pngResize</span> = <span>new</span> ResizeImage("img/test_1024_746.png", 320, 240, <span>false</span>, "img/test_320_240.png"<span>); </span>?>
Nach dem Login kopieren

Wirkung

Das Obige stellt vor, wie PHP transparente PNG-Bild-Miniaturansichten generiert, einschließlich des Inhalts der Generierung von Miniaturansichten in PHP. Ich hoffe, es wird für Freunde hilfreich sein, die sich für PHP-Tutorials interessieren.

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage