函數resizeImage($im,$maxwidth,$maxheight,$name,$filetype)
{
$ pic _ width = imagesx($ im);
$ pic _ height = imagesy($ im);
if(($ maxwidth & amp;& amp$ pic _ width & gt$ maxwidth)($ max height & amp;& amp$ pic _ height & gt$maxheight))
{
if($ maxwidth & amp;& amp$ pic _ width & gt$maxwidth)
{
$ width ratio = $ maxwidth/$ pic _ width;
$ resizewidth _ tag = true
}
if($max height & amp;& amp$ pic _ height & gt$maxheight)
{
$ height ratio = $ max height/$ pic _ height;
$ resizeheight _ tag = true
}
if($ resize width _ tag & amp;& amp$resizeheight_tag)
{
if($ width ratio & lt;$heightratio)
$ ratio = $ widthratio
其他
$ ratio = $ heightratio
}
if($ resize width _ tag & amp;& amp!$resizeheight_tag)
$ ratio = $ widthratio
if($ resize height _ tag & amp;& amp!$resizewidth_tag)
$ ratio = $ heightratio
$ newwidth = $ pic _ width * $ ratio
$ newheight = $ pic _ height * $ ratio
if(function _ exists(" imagecopyresampled "))
{
$ newim = imagecreatetruecolor($ new width,$ new height);
imagecopyresampled($newim,$im,0,0,0,$newwidth,$newheight,$pic_width,$ pic _ height);
}
其他
{
$newim = imagecreate($newwidth,$ new height);
imagecopyrestized($ newim,$im,0,0,0,$newwidth,$newheight,$pic_width,$ pic _ height);
}
$name = $name。$ filetype
imagejpeg($newim,$ name);
image destroy($ newim);
}
其他
{
$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 & gt$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格式,但在1.6.2版本之後不支持GIF格式,因為GIF格式中LZW算法的使用涉及專利權。如果是WINDOWS環境,輸入PHP就可以了。INI文件找到extension=php_gd2.dll,去掉#並重啟APACHE。如果是Linux環境,想支持GIF、PNG、JPEG,需要下載安裝libpng、zlib、freetype字體。
好了,PHP圖像壓縮功能完成了,最後總結壹下整個處理思路:
通過計算實際圖片的長寬與生成圖片的指定長寬之間的縮放比例,根據實際需求計算出最終生成圖片的大小(圖片是按寬度縮放還是按高度縮放),然後利用PHP圖片處理函數對圖片進行處理,最後輸出圖片。
以上是關於PHP圖片處理中如何壓縮圖片並保持不失真的函數描述。