Skip to content

Zeroplex 生活隨筆

軟體開發、伺服器和生活瑣事

小 縮小字型大小。 中 重設字型大小。 大 放大字型大小。

GD vs. Imagick (ImageMagick)

Posted on 2010 年 1 月 10 日2021 年 3 月 12 日 By 日落 在〈GD vs. Imagick (ImageMagick)〉中有 2 則留言

由於之前聽到網路上傳言 ImageMagick 函式庫的效能比 GD 還要好,不過找不到實在測試資料,所以自己來跑測試。

測試方式是由自己的一張全景照片 (512 x 512, 340KB) 分別用 GD 與 ImageMagick 的縮圖函式進行縮圖 (256 x 256),並紀錄執行函式所需要的時間。


產生縮圖用的程式碼分別如下:

Imagick.php:

<?php
function mtime()
{
   list($usec, $sec) = explode(" ", microtime());
   return ((float)$usec + (float)$sec);
}
$img = new Imagick();
$img->readImage('lenna.jpg');

for($a=0;$a<5;$a++){
   $start = mtime();
   $img->resizeImage(256,256,Imagick::FILTER_LANCZOS,1);
   $stop = mtime();
   echo ($stop - $start)."n";
   exec('sleep 1');
}

$img->writeImage('s_imagick.jpg');
$img->clear();
$img->destroy();
?>

gd.php:

<?php
function mtime()
{
          list($usec, $sec) = explode(" ", microtime());
          return ((float)$usec + (float)$sec);
}

$src = imagecreatefromjpeg("lenna.jpg");
$thumb = imagecreatetruecolor(256,256);
$src_w = imagesx($src);
$src_h = imagesy($src);

for($a=0;$a<5;$a++){
   $start = mtime();
   imagecopyresampled($thumb, $src, 0, 0, 0, 0, 256, 256, $src_w, $src_h);
   $stop = mtime();
   exec('sleep 1');
   echo  ($stop - $start)."n";
}

imagejpeg($thumb, "s_gd.jpg");
?>

由於 PHP 原本的 time() 精確度只有到秒,對於這種小圖檔實在不夠用,於是找了 microtime() 來紀錄時間,呼叫 mtime() 以後會傳回當時的毫秒數並以 float 儲存,縮圖完畢在將結束時間與開始時間相減取得執行時間。

分別執行五次並紀錄結果。

使用 ImageMagick 函式庫:

0.050060033798218
0.048804998397827
0.051737070083618
0.048964977264404
0.048758983612061    平均:0.0496652126312256 秒

使用 GD 函式庫:

0.094849109649658
0.095477104187012
0.096488952636719
0.097059011459351
0.098549127578735    平均:0.096484661102295 秒

接下來比較原始圖檔以及縮圖品質。


原始圖 340 KB (點圖放大)


ImageMagick resizeImage() 產生出來的縮圖 50 KB


GD imagecopyresampled() 產生出來的縮圖 12 KB

產生出來的縮圖感覺 ImageMagick 的銳利度較高,可由帽子上的紋路看出。在這次測試時 ImagickMagic 些微勝出。

前一次測試時使用相機拍攝的 2.7M 全景圖製作 3/10 的縮圖,反而是 ImageMagick 較慢,時間接近 GD 的二倍,但是銳利度仍然是 ImageMagick 較高。但 ImageMagick 的銳利度是可以調整的,如果將銳利度降低不知速度是否會加快。

Tags:PHP, 網路架站

文章導覽

Previous Post: 西子灣夕陽
Next Post: 電子書取代實體書?

Comments (2) on “GD vs. Imagick (ImageMagick)”

  1. 匿名表示:
    2010 年 1 月 13 日10:45

    基本上size差太多,明顯看出ImageMagick的品質好於GD,GD影像的細節不見太多了 參數再調一下讓兩張size差不多再來比品質和時間。

    回覆
  2. 日落 Zero表示:
    2010 年 1 月 13 日10:49

    感謝回覆!

    回覆

發佈回覆給「匿名」的留言 取消回覆

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *


其他

關於我  (About me)

小額贊助

  文章 RSS Feed

  留言 RSS Feed

Apache AWS Bash C/C++ Docker FreeBSD GCP Git Google Java JavaScript Laravel Linux Microsoft MSSQL MySQL Nginx PHP PHPUnit PostgreSQL Python Qt Ubuntu Unix Vim Web Windows WordPress XD 作業系統 分享 好站推薦 專題 攝影 新奇搞笑 新聞 旅遊 生活雜記 程式設計 網路架站 網頁設計 資訊學習 資訊安全 遊戲 音樂


創用 CC 授權條款
本著作係採用創用 CC 姓名標示-相同方式分享 4.0 國際 授權條款授權.