最近剛好需要用到一個縮圖技巧~ 所以我Google了一下~ 想找到PHP製作縮圖的方式~
而Google出來的結果發現到~ 使用官方所採用的GD library、ImageMagick 兩者較常被使用~
這裡我就直接用官方所採用的GD library來做~ 不過「聽說」ImageMagick效率較好~ 有沒有人有相關的建議呢?分享一下唄~
PHP 縮圖製作(Image Thumbnail)
HTML - 上傳頁面
<form action="ImageHandler.php" method="post" enctype="multipart/form-data"> <input type="file" name="uploadfile"/> <input type="submit"/>
ImageHandler.php - 縮圖處理細節封裝在ImageResize.php
下述程式是以縮圖後的尺寸為「100」當基礎,所以寬度和高度的尺寸會自動地照比例縮圖~ 如果您想要客製化更多的功能~ 可以自行擴充或改寫ImageResize.php
<?php require_once 'ImageResize.php'; $ir = new ImageResize(); $ir->readImage($_FILES['uploadfile']['tmp_name']); $ir->thumbnailImage(100); $ir->writeImage($_FILES['uploadfile']['name']); $ir->destory(); ?>
ImageResize.php - 處理縮圖的ImageResize Class
<?php /** * Date: 2008/02/28 * Shen(http://blog.ring.idv.tw) */ class ImageResize { private $src_image; private $src_width; private $src_height; private $dest_image; private $dest_width; private $dest_height; function __construct(){} public function readImage($imgpath) { $this->src_image = imagecreatefromjpeg($imgpath); $size = getimagesize($imgpath); $this->src_width = $size[0]; $this->src_height = $size[1]; } public function thumbnailImage($size) { if($this->src_width > $this->src_height) { $this->dest_width = $size; $this->dest_height = ($this->src_height/$this->src_width)*$size; }else{ $this->dest_height = $size; $this->dest_width = ($this->src_width/$this->src_height)*$size; } $this->dest_image = imagecreatetruecolor($this->dest_width,$this->dest_height); imagecopyresampled($this->dest_image,$this->src_image,0,0,0,0,$this->dest_width,$this->dest_height,$this->src_width,$this->src_height); } public function writeImage($imgpath) { imagejpeg($this->dest_image,$imgpath,100); } public function destory() { imagedestroy($this->src_image); imagedestroy($this->dest_image); } } ?>
參考資源
之前中師那個是用GD library,產生的縮圖感覺會有鋸齒(我覺得滿明顯的)
可能用ImageMagick就會好些吧!不過我沒用過呀~~~Orz
2008-02-28 23:28:18
嗯~ 有機會再來玩玩ImageMagick吧~ 不然我想PHP官網應該也會重視這個問題的~ 謝嚕 ^^v
2008-02-29 01:18:13
可以試試看 imagick extension, 品質好很多, 而且不用寫 library, 因為一行就縮好圖了 :p
2008-02-29 08:40:43
Hi 小海, thank you~
不過你指的一行該不會是「MS-DOS Command」吧?
如果是的話,那我需要較「穩固」的程式寫法~
因為用指令的方式有時候會出現不可避免的錯誤...
感覺上和程式的整合總有個gap存在... 所以我通常會盡量避免~
但如果要快速解決的話~ 其實指令的方式也不失為一個可用的方法啦~ ^^
2008-03-01 01:17:34
呵, 不是 command 內~
由於用 exec 的方式在 run 我也覺得不穩固 XD
可以看到下面這裡, 就可以知道我說的了 :p
http://tw.php.net/manual/en/ref.imagick.php
先前在用 GD 就是覺得品質不好, 用起來也太麻煩, 用了 imagick 之後... 我就完全放棄用 GD 來做縮圖的動作了 XD
2008-03-01 10:40:46
^^ thank you, 熊熊沒注意到~ 一直在看「http://www.imagemagick.org/script/index.php」
雖然這個extension目前還是實驗階段~ 不過剛試用了一下~ 的確效果比GD要來得好~ ^^(大膽假設)
有時間再用SNR來比較一下~(小心求證) 呵~
2008-03-01 16:20:55
哈, 雖然這個 extension 還在實驗階段沒錯, 不過我已經把他用在 production enviroment 了說。
PS. 這個 extension 在縮 GIF 好像會有問題 XD
對了~ 感謝大大 PHP Question 的解答! :D
2008-03-01 19:12:29
不會不會~ 一起教學相長呀~ ^^
2008-03-02 13:13:08
http://valokuva.org/
這個blog 還滿多imagick 的應用範例..
你可以參考看看
2008-03-03 08:17:24
感謝johnpupu分享這麼好的資源 ^^
2008-03-03 09:51:34
ImageMagick 我們公司完全禁止XDDD 過了好多年 剛好今天遇到客戶PHP4 GD 有問題剛好 把學長的範例改來測試
2010-04-15 23:29:58