程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP綜合 >> PHP自定義圖片縮放函數實現等比例不失真縮放的方法

PHP自定義圖片縮放函數實現等比例不失真縮放的方法

編輯:PHP綜合

本文實例講述了PHP自定義圖片縮放函數實現等比例不失真縮放的方法。分享給大家供大家參考,具體如下:

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(),imagecreatefrompng();

$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圖形與圖片操作技巧匯總》、《PHP數組(Array)操作技巧大全》、《PHP數學運算技巧總結》、《php日期與時間用法總結》、《php面向對象程序設計入門教程》、《php字符串(string)用法總結》、《php+mysql數據庫操作入門教程》及《php常見數據庫操作技巧匯總》

希望本文所述對大家PHP程序設計有所幫助。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved