首頁  >  文章  >  後端開發  >  PHP圖片縮放函數:實現等比例不失真縮放

PHP圖片縮放函數:實現等比例不失真縮放

WBOY
WBOY原創
2016-08-08 09:30:20979瀏覽
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);
    }           
}

參數說明

$im 圖片對象,應用函數之前,你需要用imagecreatefromjpeg()讀取圖片對象,如果PHP環境支援PNG,GIF,也可使用imagecreatefromgif(),imcreatefromgif ;

$maxwidth 定義產生圖片的最大寬度(單位:像素)

$maxheight 產生圖片的最大高度(單位:像素)

$name 產生的圖片名稱

$filetype 最終產生的圖片類型(.jpg /.png/.gif)

程式碼註解

第3~4行:讀取需要縮放的圖片實際寬高

第8~26行:透過計算實際圖片寬高與需要產生圖片的寬高的壓縮比例最終得出進行圖片縮放是根據寬度還是高度進行縮放,當前程式是根據寬度進行圖片縮放。

如果你想依照高度進行圖片縮放,你可以將第22行的語句改成$widthratio>$heightratio

第28~31行:如果實際圖片的長度或寬度小於規定產生圖片的長度或寬度,則要么根據長度進行圖片縮放,要么根據寬度進行圖片縮放。

第33~34行:計算最終縮放產生的圖片長寬。

第36~45行:根據計算出的最終生成圖片的長寬改變圖片大小,

有兩種改變圖片大小的方法:ImageCopyResized()函數在所有GD版本中有效,但其縮放圖像的演算法比較粗糙。 ImageCopyResamples(),其像素插值演算法所得到的影像邊緣較為平滑,但該函數的速度比ImageCopyResized()慢。

第47~49行:最終產生經過處理後的圖片,

如果你需要產生GIF或PNG,你需要將imagejpeg()函數改成imagegif()或imagepng()

第51~56行:如果實際圖片的長寬小於規定產生的圖片長寬,則保持圖片原樣,同理,如果你需要產生GIF或PNG,你需要將imagejpeg()函數改成imagegif()或imagepng()。

特別說明

  GD庫1.6.2版以前支援GIF格​​式,但因GIF格式使用LZW算法牽涉專利權,因此在GD1.6.2版之後不支援GIF的格式。如果你是WINDOWS的環境,你只要進入PHP.INI檔案找到extension=php_gd2.dll,將#移除,重啟APACHE即可,如果你是Linux環境,又想支援GIF,PNG,JPEG,你需要去下載libpng ,zlib,以及freetype字型並安裝。

以上就介紹了PHP圖片縮放函數:實現等比例不失真縮放,包括了方面的內容,希望對PHP教程有興趣的朋友有所幫助。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn