実際、PDF の最初のページの単純な JPG プレビューを生成するのに Imagick ライブラリは必要ありません。必要なのは GhostScript だけです。
GhostScript を使用したコマンド ライン変換は、Imagick よりも常に高速です (コマンド ラインまたは PHP 経由)。
12 ページと 650kb の例:
- コマンドライン GhostScript => 0.6 秒
- コマンドライン Imagick => 0.8 秒
- PHP 拡張 Imagick => 2.22 秒
一部のドキュメントでは、Imagick は直接 GS コマンド ラインで 1.5 秒に対して 20 秒かかります。
ここに私のテストスクリプトがあります
<?php
$pathToPdf = realpath("in.pdf");
$pathToJpg = "./out.jpg";
$pathToPng = "./out.png";
try
{
$time_start = microtime(true);
$gsCall = "\"C:\Program Files (x86)\gs\gs9.06\bin\gswin32.exe\" -q -dBATCH -dMaxBitmap=300000000 -dNOPAUSE -dSAFER -sDEVICE=jpeg -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -dFirstPage=1 -dLastPage=1 -sOutputFile=\"{0}\" \"{1}\" -c quit";
$gsCall = str_replace(array('{0}', '{1}'), array($pathToJpg, $pathToPdf), $gsCall); // or use sprintf
$str = exec($gsCall, $output=array(), $returnValue);
echo $gsCall.'<br><br>';
$time_end = microtime(true);
$time = $time_end - $time_start;
if($returnValue == 0)
print "<br><br>Conversion OK ".$time;
else
print "<br><br>Conversion failed.<br />".var_dump($output);
$time_start = microtime(true);
exec('convert "'.$pathToPdf.'[0]" "'.$pathToPng.'"', $output, $returnValue);
$time_end = microtime(true);
$time = $time_end - $time_start;
if($returnValue == 0)
print "<br><br>Conversion OK ".$time;
else
print "<br><br>Conversion failed.<br />".var_dump($output);
$time_start = microtime(true);
$im = new Imagick($pathToPdf);
$im->setIteratorIndex(0);
$im->setCompression(Imagick::COMPRESSION_LZW);
$im->setCompressionQuality(90);
$im->setImageFormat("png");
$im->writeImage('\\\\DELL-PC\Shared\test.png');
//$im->thumbnailImage(200, 0);
//echo $im;
$time_end = microtime(true);
$time = $time_end - $time_start;
print "<br><br>Conversion OK ".$time;
}
catch(Exception $e)
{
echo $e->getMessage();
}
?>