blog.Ring.idv.tw

PHP 縮圖製作(Image Thumbnail) - GD Library

PHP 縮圖製作(Image Thumbnail) - GD Library


最近剛好需要用到一個縮圖技巧~ 所以我Google了一下~ 想找到PHP製作縮圖的方式~

而Google出來的結果發現到~ 使用官方所採用的GD libraryImageMagick 兩者較常被使用~

這裡我就直接用官方所採用的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);
	}
}
?>

參考資源

PHP: Image - Manual

How to Resize an Image Using PHP - Image Resizing Script

2008-02-28 21:54:37

11 comments on "PHP 縮圖製作(Image Thumbnail) - GD Library"

  1. 1. 呈現 說:

    之前中師那個是用GD library,產生的縮圖感覺會有鋸齒(我覺得滿明顯的)
    可能用ImageMagick就會好些吧!不過我沒用過呀~~~Orz

    2008-02-28 23:28:18

  2. 2. Shen 說:

    嗯~ 有機會再來玩玩ImageMagick吧~ 不然我想PHP官網應該也會重視這個問題的~ 謝嚕 ^^v

    2008-02-29 01:18:13

  3. 3. 小海 說:

    可以試試看 imagick extension, 品質好很多, 而且不用寫 library, 因為一行就縮好圖了 :p

    2008-02-29 08:40:43

  4. 4. Shen 說:

    Hi 小海, thank you~
    不過你指的一行該不會是「MS-DOS Command」吧?
    如果是的話,那我需要較「穩固」的程式寫法~
    因為用指令的方式有時候會出現不可避免的錯誤...
    感覺上和程式的整合總有個gap存在... 所以我通常會盡量避免~
    但如果要快速解決的話~ 其實指令的方式也不失為一個可用的方法啦~ ^^

    2008-03-01 01:17:34

  5. 5. 小海 說:

    呵, 不是 command 內~
    由於用 exec 的方式在 run 我也覺得不穩固 XD

    可以看到下面這裡, 就可以知道我說的了 :p
    http://tw.php.net/manual/en/ref.imagick.php

    先前在用 GD 就是覺得品質不好, 用起來也太麻煩, 用了 imagick 之後... 我就完全放棄用 GD 來做縮圖的動作了 XD

    2008-03-01 10:40:46

  6. 6. Shen 說:

    ^^ thank you, 熊熊沒注意到~ 一直在看「http://www.imagemagick.org/script/index.php」
    雖然這個extension目前還是實驗階段~ 不過剛試用了一下~ 的確效果比GD要來得好~ ^^(大膽假設)
    有時間再用SNR來比較一下~(小心求證) 呵~

    2008-03-01 16:20:55

  7. 7. 小海 說:

    哈, 雖然這個 extension 還在實驗階段沒錯, 不過我已經把他用在 production enviroment 了說。

    PS. 這個 extension 在縮 GIF 好像會有問題 XD

    對了~ 感謝大大 PHP Question 的解答! :D

    2008-03-01 19:12:29

  8. 8. Shen 說:

    不會不會~ 一起教學相長呀~ ^^

    2008-03-02 13:13:08

  9. 9. johnpupu 說:

    http://valokuva.org/
    這個blog 還滿多imagick 的應用範例..
    你可以參考看看

    2008-03-03 08:17:24

  10. 10. Shen 說:

    感謝johnpupu分享這麼好的資源 ^^

    2008-03-03 09:51:34

  11. 11. Yen 說:

    ImageMagick 我們公司完全禁止XDDD 過了好多年 剛好今天遇到客戶PHP4 GD 有問題剛好 把學長的範例改來測試

    2010-04-15 23:29:58

Leave a Comment

Copyright (C) Ching-Shen Chen. All rights reserved.

::: 搜尋 :::

::: 分類 :::

::: Ads :::

::: 最新文章 :::

::: 最新回應 :::

::: 訂閱 :::

Atom feed
Atom Comment