2015-10-16 41 views
1

我使用ImageMagick的轉換那樣的PDF文件轉換成PNG巴布亞新幾內亞:ImageMagick的PDF轉換爲固定寬度或高度

convert -density 150 file.pdf -quality 100 res.png 

的問題是,根據該文件的結果圖片的大小而不同內容。我怎樣才能選擇一個特定的最大高度和最大寬度像素的結果圖片?

回答

3

更新回答

從您的意見,我想我更好地瞭解你現在想要什麼。所以,我認爲你需要的身份是這樣的:

Required Resolution  Required Height 
------------------- = --------------- 
Current Resolution  Current Height 

但請記住,適用於X方向和Y方向。因此,讓我們讓ImageMagick計算出您需要的x分辨率和y分辨率以獲得您想要的輸出大小 - 使用ImageMagick的fx方法更容易,因爲它適用於Windows和Linux,而且我碰巧知道您有已經安裝了ImageMagick的,而您可能沒有bc或任何在Windows上做數學:

#!/bin/bash 
# New width and new height that you want 
nh=1000 
nw=500 

# Calculate Resolution needed in Height 
rh=$(identify -format "%[fx:int(($nh*resolution.y)/h)]" doc.pdf) 
echo $rh 

# Calculate Resolution needed in Width 
rw=$(identify -format "%[fx:int(($nw*resolution.x)/w)]" doc.pdf) 
echo $rw 

所以,如果我用一個文件名爲doc.pdf測量595x842,它輸出85和60的X和Y密度。如果我再使用

convert -density 85 doc.pdf a.jpg 

它在702x994出來 - 這是接近1000的高度,我想

,如果我用

convert -density 60 doc.pdf a.jpg 

它在496x702這是出來接近我想要的500的寬度。

在前面,你可以使用:

identify -format "%[fx:int(($nh*resolution.y)/h)]" doc.pdf 

,而不是把結果賦值給一個變量,像我一樣 - 我只是這樣做,因爲我通常以後要使用的變量。

原來的答案

就在裏面添加-resize WIDTHxHEIGHT轉換後設置你想要的大小。因此,在具體而言,如果你想讓它不超過1500x2000以上,同時保留原始寬高比,這樣做:

convert -density 150 file.pdf -quality 100 -resize 1500x2000 res.png 

如果你想讓它不超過800像素寬,不關心的高度,做:

convert -density 150 file.pdf -quality 100 -resize 800x res.png 

如果你想讓它不超過1000像素高,並且不關心的寬度,這樣做:

convert -density 150 file.pdf -quality 100 -resize x1000 res.png 

如果你喜歡「鏡廳」的效果,想要它1200x1800來得及什麼,並與長寬比,做:

convert -density 150 file.pdf -quality 100 -resize 1200x1800! res.png 
+0

非常感謝。我試圖讓事情變得更快,並以您的方式將它轉換爲大文件,然後調整大小,這可能需要很長時間。例如,600的大小和100x100的大小調整將需要很長時間,直到大圖像準備好,然後調整大小,相反,首先創建大小合適的圖像。 – amitdar

+0

對不起,我把你的問題解釋爲你知道你想使用'-density 150'(因爲那是你編碼的),然後你想調整你的圖像大小 - 而不是你想通過只使用最小密度......如果您在文件上使用ImageMagick命令「identify -verbose someFile.pdf」,它們是否都具有相同的分辨率?它是72x72嗎?因爲輸出文件的大小直接與密度成比例變化。 –

+0

我已經更新了我的答案 - 請再看一次。另外,如果性能對您來說是一個大問題,並且您需要轉換大量PDF文件,請考慮使用'GNU Parallel',如果您使用的是像Linux或OSX這樣的體面操作系統。 –