辦公室、工廠專業搬遷 規劃完整搬遷流程動線,不加價,收費合理! | 提供壁癌防治、防水抓漏,全程使用A級防水材 改建工程,免付費諮詢 |
製作電子相簿中的縮圖 |
房東:阿龍 發表時間:2007-03-28 | [檢舉] |
問題說明 我們利用檔案上傳功\能,可以輕易地將相片檔案上傳至伺服器上,並且整理成所謂的「電子相簿」。如果我們希望這本相簿的「目次頁」,能以各張相片的「縮圖」來呈現時,該怎麼辦呢? 以往我會直接用 這種方式,強迫將原圖縮為 100px 的小圖;此法最簡單,但對瀏覽者不利。假若原圖的尺寸是 800x600,用了這種方法,只是在畫面上將圖縮小為 100x75;事實上,瀏覽器所接收到的仍然是原來那個大尺寸的圖。 若要對瀏覽者友善一些的話,得另外使用圖形處理軟體,將大圖另存為小圖,一大一小同時上傳。 上述兩種方法,一個是對瀏覽者不利,另一個則是對管理者麻煩。難道沒有兩全其美的辦法嗎?有的! 我的做法 如果您已經安裝 GD Lib,那麼您就可以藉由 PHP 的 Image Functions 來達成所謂「兩全其美」的目標了。 首先,我們先來看看效果如何? 「原圖」的尺寸為 800x600,大小為 334,438 Bytes。 「縮圖」的尺寸為 160x120,大小為 7,171 Bytes。 -------------------------------------------------------------------------------- 在製作「縮圖」的過程中,有下列幾個重點: 1. 判斷原圖的圖形格式 我在資料庫裡建了一個表格,它有三個欄位:「sn, filename, subname」,當我們上傳一個相片檔案時,我就將原檔的主、副檔名拆開,分別存入「filename」與「subname」欄位裡。 因此,我就可以從資料庫中取得相片檔的副檔名,並據此來判斷其圖形格式了。 2. 傳 Header 給瀏覽器,告知圖檔格式 如果您的相片是 JPEG 格式,您可以這樣送出 Header: Header(\"Content-type: image/JPEG\"); 如果是 PNG 格式,您要改成這樣送 Header: Header(\"Content-type: image/PNG\"); 3. 讀取原圖 與前一則相同,要讀取原圖時,也得視圖檔的格式,而使用不同的方法。若是 JPEG 格式時,您可以用這樣的方法: $src_img = ImageCreateFromJPEG(\"media/river.jpg\"); 以 ImageCreateFromJPEG 讀取相片檔後,PHP 會設定一個儲存空間,以便存放該檔案的內容,而 $src_img 就是用來識別該儲存空間的一組編號。 4. 設定縮圖的尺寸 我打算將縮圖尺寸設為原圖的 20%: $new_W = ImageSX($src_img) * .2; $new_H = ImageSY($src_img) * .2; 其中的 ImageSX 與 ImageSY 是用來讀取原圖的寬度與高度。 5. 定義一個新的圖檔 $dst_img = ImageCreate($new_W, $new_H);(GD 版本早於 2.0.1 者,請用此法) $dst_img = ImageCreatetruecolor($new_W, $new_H);(GD 版本在 2.0.1 以後者,請用此法) 其中的 $dst_img 與先前 $src_img 的意義相同。 6. 將原圖複製、調整尺寸,再貼在新圖上 ImageCopyResized($dst_img, $src_img, 0, 0, 0, 0, $new_W, $new_H, ImageSX($src_img), ImageSY($src_img)); 7. 將所建立的新圖檔輸出 同樣地,要輸出圖檔時,也得視圖檔的格式而定。若是 JPEG 格式時,您可以用這樣的方法: ImageJPEG($dst_img); 8. 釋放所佔用的儲存空間 ImageDestroy($dst_img); ImageDestroy($src_img); 接著,該如何在電子相簿的「目次頁」中,搭配使用上述的「縮圖程式」呢? 要在瀏覽器上顯示一個圖檔,您得這麼寫:。 現在要顯示編號第 3 號相片的縮圖,我們就這麼寫:。 X_19_condensation.php 就是上述的「縮圖程式」,而 sn 則是用來指定相片編號的參數。 為了方便您瞭解全貌,我寫了一支很陽春的「目次頁」程式;若您的相片數量多的話,請再自行加入「分頁」的功\能。 |
廣利不動產-板橋在地生根最實在--新板特區指名度最高、值得您信賴的好房仲 完整房訊,房屋、店面熱門精選物件,廣利不動產 優質仲介,房屋租賃、買賣資訊透明,交易真安心! 廣利不動產-新板特區指名度最高、值得您信賴的好房仲 您的托付,廣利用心為您服務 |