溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

php怎么實(shí)現(xiàn)縮放圖片不變形

發(fā)布時(shí)間:2020-07-03 17:54:03 來源:億速云 閱讀:195 作者:Leah 欄目:編程語(yǔ)言

php怎么實(shí)現(xiàn)縮放圖片不變形?很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。

代碼:

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

參數(shù)說明:

$im 圖片對(duì)象,應(yīng)用函數(shù)之前,你需要用imagecreatefromjpeg()讀取圖片對(duì)象,如果PHP環(huán)境支持PNG,GIF,也可使用imagecreatefromgif(),imagecreatefrompng();

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

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

$name 生成的圖片名

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

代碼注釋:

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

第8~26行:通過計(jì)算實(shí)際圖片寬高與需要生成圖片的寬高的壓縮比例最終得出進(jìn)行圖片縮放是根據(jù)寬度還是高度進(jìn)行縮放,當(dāng)前程序是根據(jù)寬度進(jìn)行圖片縮放。如果你想根據(jù)高度進(jìn)行圖片縮放,你可以將第22行的語(yǔ)句改成$widthratio>$heightratio

第28~31行:如果實(shí)際圖片的長(zhǎng)度或者寬度小于規(guī)定生成圖片的長(zhǎng)度或者寬度,則要么根據(jù)長(zhǎng)度進(jìn)行圖片縮放,要么根據(jù)寬度進(jìn)行圖片縮放。

第33~34行:計(jì)算最終縮放生成的圖片長(zhǎng)寬。

第36~45行:根據(jù)計(jì)算出的最終生成圖片的長(zhǎng)寬改變圖片大小,有兩種改變圖片大小的方法:ImageCopyResized()函數(shù)在所有GD版本中有效,但其縮放圖像的算法比較粗糙。ImageCopyResamples(),其像素插值算法得到的圖像邊緣比較平滑,但該函數(shù)的速度比ImageCopyResized()慢。

第47~49行:最終生成經(jīng)過處理后的圖片,如果你需要生成GIF或PNG,你需要將imagejpeg()函數(shù)改成imagegif()或imagepng()

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

特別說明:

GD庫(kù)1.6.2版以前支持GIF格式,但因GIF格式使用LZW演算法牽涉專利權(quán),因此在GD1.6.2版之后不支持GIF的格式。如果你是WINDOWS的環(huán)境,你只要進(jìn)入PHP.INI文件找到extension=php_gd2.dll,將#去除,重啟APACHE即可,如果你是Linux環(huán)境,又想支持GIF,PNG,JPEG,你需要去下載libpng,zlib,以及freetype字體并安裝。

看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝您對(duì)億速云的支持。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI