Home > Backend Development > PHP Tutorial > (Practical) Example of how to generate thumbnails with PHP

(Practical) Example of how to generate thumbnails with PHP

黄舟
Release: 2023-03-05 15:10:01
Original
1449 people have browsed it

I’m working on thumbnail stuff recently, and I’d like to share two methods with you

$source_path: The path of the original image

$NewImagePath: Generate the thumbnail path

$ target_width: thumbnail width

$target_height: thumbnail height

<?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);
        
    }
Copy after login

The following method is to generate a thumbnail and fill it with white edges

<?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);


    }
Copy after login


The above is the content of the (Practical) PHP method for generating thumbnails. For more related content, please pay attention to the PHP Chinese website (www.php.cn)!


Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template