PHP圖片處理之使用imagecopyresampled函數(shù)實(shí)現(xiàn)圖片縮放例子
網(wǎng)站優(yōu)化不能只定在代碼上,內(nèi)容也是網(wǎng)站最需要優(yōu)化的對(duì)象之一,而圖像又是網(wǎng)站中最主要的內(nèi)容。圖像的優(yōu)化最需要處理的就是將所有上傳到網(wǎng)站中的大圖片自動(dòng)縮放稱小圖(在網(wǎng)頁(yè)中大小夠用就行),以減少N倍的存儲(chǔ)空間,并提高下載瀏覽的速度。所以圖片縮放成一個(gè)動(dòng)態(tài)網(wǎng)站必須要處理的任務(wù),經(jīng)常和文件上傳綁定在一起工作,能在上傳圖片的同時(shí)就調(diào)整其大小。當(dāng)然有時(shí)也需要單獨(dú)處理圖片縮放,例如在做圖片列表時(shí),如果直接用大圖而在顯示時(shí)才將其縮放成小圖,這樣做不僅下載速度會(huì)變慢,也會(huì)降低頁(yè)面響應(yīng)時(shí)間。通常遇到這樣的應(yīng)用都是在上傳圖片時(shí),再為圖片縮放出一個(gè)專門(mén)用來(lái)做列表的小圖標(biāo),當(dāng)單擊這個(gè)小圖標(biāo)時(shí),才會(huì)去下載大圖瀏覽。
使用GD庫(kù)處理圖片縮放,通常使用imagecopyresized()和imagecopyresampled()兩個(gè)函數(shù)中的一個(gè),而使用imagecopyresampled()函數(shù)處理后質(zhì)量會(huì)更好一些。這里只介紹一下imagecopyresampled()函數(shù)的使用方法。該函數(shù)的原型如下所示:
bool imagecopyresampled(resource dst_image,resource src_image,int dst_x,int dst_y,int src_x,int src_y,int dst_w,int dst_h ,int src_w,int src_h)
該函數(shù)將一幅圖像中的正方形區(qū)域復(fù)制到另一個(gè)圖像中,平滑地插入像素值,因此減小了圖像的大小而仍然保持了極高的清晰度。如果成功,則返回TRUE,失敗則返回FALSE。參數(shù)dst_image和src_image分別是目標(biāo)圖像和源圖像的標(biāo)識(shí)符。如果源和目標(biāo)的寬度和高度不同,則會(huì)進(jìn)行相應(yīng)的圖像收縮和拉伸,坐標(biāo)指的是左上角。本函數(shù)可用來(lái)在同一幅圖內(nèi)部復(fù)制(如果dst_image和src_image相同的話)但如果區(qū)域交迭,則結(jié)果不可預(yù)知。在下面的示例中,以JPEG圖片格式為例,編寫(xiě)一個(gè)圖像縮放的函數(shù)thumb(),代碼如下所示:
<?php
//用于對(duì)圖片進(jìn)行縮放
function thumb($filename,$width=200,$height=200){
//獲取原圖像$filename的寬度$width_orig和高度$height_orig
list($width_orig,$height_orig) = getimagesize($filename);
//根據(jù)參數(shù)$width和$height值,換算出等比例縮放的高度和寬度
if ($width && ($width_orig<$height_orig)){
$width = ($height/$height_orig)*$width_orig;
}else{
$height = ($width / $width_orig)*$height_orig;
}
//將原圖縮放到這個(gè)新創(chuàng)建的圖片資源中
$image_p = imagecreatetruecolor($width, $height);
//獲取原圖的圖像資源
$image = imagecreatefromjpeg($filename);
//使用imagecopyresampled()函數(shù)進(jìn)行縮放設(shè)置
imagecopyresampled($image_p,$image,0,0,0,0,$width,$height,$width_orig,$height_orig);
//將縮放后的圖片$image_p保存,100(質(zhì)量最佳,文件最大)
imagejpeg($image_p,$filename);
imagedestroy($image_p);
imagedestroy($image);
}
thumb("brophp.jpg",100,100);
?>
相關(guān)文章
PHP設(shè)計(jì)模式之裝飾器模式定義與用法簡(jiǎn)單示例
這篇文章主要介紹了PHP設(shè)計(jì)模式之裝飾器模式定義與用法,結(jié)合簡(jiǎn)單實(shí)例形式分析了php裝飾器模式的概念、原理、定義與簡(jiǎn)單使用方法,需要的朋友可以參考下2018-08-08swfupload 多文件上傳實(shí)現(xiàn)代碼
swfupload 采用flash+ajax方式上傳文件2008-08-08php實(shí)現(xiàn)模擬post請(qǐng)求用法實(shí)例
這篇文章主要介紹了php實(shí)現(xiàn)模擬post請(qǐng)求用法,分析了php模擬post請(qǐng)求的三種常見(jiàn)用法,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-07-07PHP基于curl實(shí)現(xiàn)模擬微信瀏覽器打開(kāi)微信鏈接的方法示例
這篇文章主要介紹了PHP基于curl實(shí)現(xiàn)模擬微信瀏覽器打開(kāi)微信鏈接的方法,結(jié)合實(shí)例形式分析了php使用curl通過(guò)設(shè)置HTTP_USER_AGENT實(shí)現(xiàn)模擬微信瀏覽器相關(guān)操作技巧,需要的朋友可以參考下2019-02-02php常用日期時(shí)間函數(shù)實(shí)例小結(jié)
這篇文章主要介紹了php常用日期時(shí)間函數(shù),結(jié)合實(shí)例形式總結(jié)分析了php日期時(shí)間相關(guān)的時(shí)間戳、格式化、時(shí)區(qū)獲取與設(shè)置、時(shí)間戳轉(zhuǎn)換與計(jì)算等相關(guān)操作技巧,需要的朋友可以參考下2019-07-07PHP執(zhí)行l(wèi)inux系統(tǒng)命令的常用函數(shù)使用說(shuō)明
php下執(zhí)行l(wèi)inux系統(tǒng)命令的函數(shù),需要的朋友可以參考下。2010-04-04