Home  >  Article  >  Backend Development  >  PHP image scaling function: achieve equal proportions without distortion

PHP image scaling function: achieve equal proportions without distortion

WBOY
WBOYOriginal
2016-08-08 09:30:20979browse
function resizeImage($im,$maxwidth,$maxheight,$name,$filetype)
{
    $pic_width = imagesx($im);
    $pic_height = imagesy($im);

    if(($maxwidth && $pic_width > $maxwidth) || ($maxheight && $pic_height > $maxheight))
    {
        if($maxwidth && $pic_width>$maxwidth)
        {
            $widthratio = $maxwidth/$pic_width;
            $resizewidth_tag = true;
        }

        if($maxheight && $pic_height>$maxheight)
        {
            $heightratio = $maxheight/$pic_height;
            $resizeheight_tag = true;
        }

        if($resizewidth_tag && $resizeheight_tag)
        {
            if($widthratio<$heightratio)
                $ratio = $widthratio;
            else
                $ratio = $heightratio;
        }

        if($resizewidth_tag && !$resizeheight_tag)
            $ratio = $widthratio;
        if($resizeheight_tag && !$resizewidth_tag)
            $ratio = $heightratio;

        $newwidth = $pic_width * $ratio;
        $newheight = $pic_height * $ratio;

        if(function_exists("imagecopyresampled"))
        {
            $newim = imagecreatetruecolor($newwidth,$newheight);
           imagecopyresampled($newim,$im,0,0,0,0,$newwidth,$newheight,$pic_width,$pic_height);
        }
        else
        {
            $newim = imagecreate($newwidth,$newheight);
           imagecopyresized($newim,$im,0,0,0,0,$newwidth,$newheight,$pic_width,$pic_height);
        }

        $name = $name.$filetype;
        imagejpeg($newim,$name);
        imagedestroy($newim);
    }
    else
    {
        $name = $name.$filetype;
        imagejpeg($im,$name);
    }           
}

Parameter description:

$im image object, before applying the function, You need to use imagecreatefromjpeg() to read the image object. If the PHP environment supports PNG, GIF, you can also use imagecreatefromgif(), imagecreatefrompng() ;

$maxwidth defines the maximum width of the generated image (unit: pixel)

$maxheight The maximum height of the generated image (unit: pixel)

$name The generated image name

$filetype The final generated image type (.jpg /.png/.gif)

Code comments:

Line 3~4: Read the actual width and height of the image that needs to be scaled

Line 8~26: Calculate the actual width and height of the image and the image that needs to be generated The compression ratio of width and height ultimately determines whether to scale the image based on width or height. The current program scales the image based on width. If you want to scale the image based on height, you can change the statement on line 22 to $widthratio>$heightratio

Line 28~31: If the length or width of the actual image is smaller than the specified length or width of the generated image, Then either the image is scaled according to the length or the image is scaled according to the width.

Line 33~34: Calculate the length and width of the final zoomed image.

Line 36~45: Change the image size according to the calculated length and width of the final generated image. There are two methods to change the image size: The ImageCopyResized() function is valid in all GD versions, but its algorithm for scaling images Relatively rough. ImageCopyResamples(), the image edges obtained by its pixel interpolation algorithm are relatively smooth, but the speed of this function is slower than ImageCopyResized().

Line 47~49: The processed image is finally generated. If you need to generate GIF or PNG, you need to change the imagejpeg() function to imagegif() or imagepng()

Line 51~56: If the length and width of the actual image is smaller than the specified length and width of the generated image, keep the image as it is. Similarly, if you need to generate GIF or PNG, you need to change the imagejpeg() function to imagegif() or imagepng().

Special note:

GD library version 1.6.2 previously supported the GIF format, but because the GIF format uses the LZW algorithm and involves patent rights, the GIF format is not supported after GD version 1.6.2. If you are in a WINDOWS environment, you only need to enter the PHP.INI file and find extension=php_gd2.dll, remove the #, and restart APACHE. If you are in a Linux environment and want to support GIF, PNG, and JPEG, you need to download libpng , zlib, and freetype fonts and install them.

The above introduces the PHP image scaling function: achieving equal proportions without distortion, including aspects of the content. I hope it will be helpful to friends who are interested in PHP tutorials.

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