2013-03-06 144 views
5

我正在撕裂我的頭髮。使用PHP和ImageMagick將PDF轉換爲高質量JPG

我有一個300 DPI PDF,我想變成300 DPI JPG,這是2550x3300。我被告知ImageMagick可以做到這一點,所以我讓ImageMagick工作,但它只返回一個大小約爲原始PDF大小1/5的JPG。

這不是源圖像 - 我用幾個高質量的PDF完成了它們,它們都有相同的問題。

精練的StackOverflow的想法之後,這是我想出了使用方法:

$im = new imagick($srcimg); 
$im->setImageResolution(2550,3300); 
$im->setImageFormat('jpeg'); 
$im->setImageCompression(imagick::COMPRESSION_JPEG); 
$im->setImageCompressionQuality(100); 
$im->writeImage($targetimg); 
$im->clear(); 
$im->destroy(); 

但它仍然無法正常工作。

我也嘗試過使用$ img-> resizeImage()來調整JPG格式的大小,但是如果尺寸正確,它會以非常差的質量出現。

完全難住。感謝你的幫助!

回答

6

您需要先設置分辨率再讀入圖片,請see this comment on the manual - 看看是否可以。

+0

如果我先放置setImageResolution,那麼這個類還沒有被聲明。如果我做$ im = new imagick(),那麼$ im-> setImageResolution,然後$ im-> readImage($ srcimg),我得到這個錯誤:致命錯誤:未捕獲異常'ImagickException'帶消息'無法處理空Imagick對象'in ... – 2013-03-06 03:07:28

+1

嘗試在空對象上使用'$ im-> setResolution()'(請參閱手冊中的'Imagick :: setResolution' notif) – dakdad 2013-03-06 03:28:33

+0

是的 - 只是做了這個,我得到它的工作,儘管只需要300,300。技巧是切換順序並使用setResolution而不是setImageResolution。謝謝! – 2013-03-06 03:29:24

4

這將是正確的方法,質量會提高。

$im = new imagick(); 
$im->setResolution(300, 300); 
$im->readImage($srcimg); 
$im->setImageFormat('jpeg'); 
$im->setImageCompression(imagick::COMPRESSION_JPEG); 
$im->setImageCompressionQuality(100); 
$im->writeImage($targetimg); 
$im->clear(); 
$im->destroy();