Heim  >  Artikel  >  Backend-Entwicklung  >  (Praktisches) Beispiel für die Generierung von Miniaturansichten mit PHP

(Praktisches) Beispiel für die Generierung von Miniaturansichten mit PHP

黄舟
黄舟Original
2017-02-08 09:19:531425Durchsuche

Ich arbeite derzeit an Miniaturansichten und möchte zwei Methoden mit Ihnen teilen

$source_path: der Pfad des Originalbilds

$NewImagePath: generiert den Miniaturansichtspfad

$ target_width: Miniaturbildbreite

$target_height: Miniaturbildhöhe

<?php

    function getCropper($source_path,$NewImagePath, $target_width, $target_height)
    {
        $source_info   = getimagesize($source_path);
        $source_width  = $source_info[0];
        $source_height = $source_info[1];
        $source_mime   = $source_info[&#39;mime&#39;];
        $source_ratio  = $source_height / $source_width;
        $target_ratio  = $target_height / $target_width;

        // 源图过高
        if ($source_ratio > $target_ratio)
        {
            $cropped_width  = $source_width;
            $cropped_height = $source_width * $target_ratio;
            $source_x = 0;
            $source_y = ($source_height - $cropped_height) / 2;
        }
        // 源图过宽
        elseif ($source_ratio < $target_ratio)
        {
            $cropped_width  = $source_height / $target_ratio;
            $cropped_height = $source_height;
            $source_x = ($source_width - $cropped_width) / 2;
            $source_y = 0;
        }
        // 源图适中
        else
        {
            $cropped_width  = $source_width;
            $cropped_height = $source_height;
            $source_x = 0;
            $source_y = 0;
        }

        switch ($source_mime)
        {
            case &#39;image/gif&#39;:
                $source_image = imagecreatefromgif($source_path);
                break;

            case &#39;image/jpeg&#39;:
                $source_image = imagecreatefromjpeg($source_path);
                break;

            case &#39;image/png&#39;:
                $source_image = imagecreatefrompng($source_path);
                break;

            default:
                return false;
                break;
        }

        $target_image  = imagecreatetruecolor($target_width, $target_height);
        $cropped_image = imagecreatetruecolor($cropped_width, $cropped_height);

        // 图片裁剪
        imagecopy($cropped_image, $source_image, 0, 0, $source_x, $source_y, $cropped_width, $cropped_height);
        // 图片缩放
        imagecopyresampled($target_image, $cropped_image, 0, 0, 0, 0, $target_width, $target_height, $cropped_width, $cropped_height);


        header(&#39;Content-Type: image/jpeg&#39;);
        imagejpeg($target_image,$NewImagePath,100);
        imagedestroy($source_image);
        imagedestroy($target_image);
        imagedestroy($cropped_image);
        
    }

Die folgende Methode besteht darin, ein Miniaturbild zu generieren und es mit weißen Rändern zu füllen

<?php
//生成缩略图,填充白边
    function getCrops($src_path,$NewImagePath,$width,$height){

        //源图对象
        $src_image = imagecreatefromstring(file_get_contents($src_path));
        $source_info   = getimagesize($src_path);
        $source_mime   = $source_info[&#39;mime&#39;];
        $src_width = imagesx($src_image);
        $src_height = imagesy($src_image);

        switch ($source_mime)
        {
            case &#39;image/gif&#39;:
                $src_image = imagecreatefromgif($src_path);
                break;

            case &#39;image/jpeg&#39;:
                $src_image = imagecreatefromjpeg($src_path);
                break;

            case &#39;image/png&#39;:
                $src_image = imagecreatefrompng($src_path);
                break;

            default:
                return false;
                break;
        }


        //生成等比例的缩略图
        //$tmp_image_width = 0;
        //$tmp_image_height = 0;
        if ($src_width / $src_height >= $width / $height) {

            $tmp_image_width = $width;
            $tmp_image_height = round($tmp_image_width * $src_height / $src_width);

        } else {

            $tmp_image_height = $height;
            $tmp_image_width = round($tmp_image_height * $src_width / $src_height);
        }

        $tmpImage = imagecreatetruecolor($tmp_image_width, $tmp_image_height);
        imagecopyresampled($tmpImage, $src_image, 0, 0, 0, 0, $tmp_image_width, $tmp_image_height, $src_width, $src_height);

        //添加白边
        $final_image = imagecreatetruecolor($width, $height);
        $color = imagecolorallocate($final_image, 255, 255, 255);
        imagefill($final_image, 0, 0, $color);
        $x = round(($width - $tmp_image_width) / 2);
        $y = round(($height - $tmp_image_height) / 2);
        imagecopy($final_image, $tmpImage, $x, $y, 0, 0, $tmp_image_width, $tmp_image_height);

        //输出图片
        header(&#39;Content-Type: image/jpeg&#39;);
        imagejpeg($final_image,$NewImagePath,100);
        imagedestroy($src_image);
        imagedestroy($final_image);


    }


Das Obige ist der Inhalt der (praktischen) PHP-Methode zum Generieren von Miniaturansichten. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!


Stellungnahme:
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