2015-02-23 28 views
1

當我嘗試僅使用imgsclr 4.2(http://www.thebuzzmedia.com/imgscalr-3-2-released/comment-page-1/#comment-650387)將圖像調整爲特定的寬度和高度時,出現質量問題。使用Java庫imgsclr調整圖像質量問題

我有一個圖像,其中240X320,我必須調整它爲50X75和120X180。我使用下面的代碼分別嘗試了兩種方法(我使用的是imgscalr 4.2)。

image=resize(image,Method.ULTRA_QUALITY, 50,75, OP_ANTIALIAS, OP_BRIGHTER); 
saveImage(image, ImageFormatTypes.JPEG, DESTINATION + RESIZED_IMAGE + 「.」+ImageFormatTypes.JPEG); 

我有兩個問題。與我用於手動調整圖像大小的其他內部工具相比,#1質量非常低。 #2。輸出的寬度從50增加到56,從120增加到135,這很奇怪。

你知道爲什麼會發生這種情況嗎?我感謝您的幫助。 Original Image Resized Image

+0

首先,爲240x320(0.75)的比例輸出爲目標尺寸(0.67)不同,所以imgsclr可能試圖維持原始圖像比例。你還可以提供實際的電話imgsclr,原始和縮放圖像 – MadProgrammer 2015-02-23 20:49:06

+0

@MadProgrammer謝謝你的時間。調整大小是對imgsclr的唯一調用。我有「BufferedImage image = getImageFromLink(link);」然後調用從URL獲取圖像的imgsclr。該網址沒有像.jpg這樣的擴展名,但我確實知道它的圖片。這有幫助嗎? – WowBow 2015-02-23 21:05:29

+0

@MadProgrammer Scalr.resize(image,Method。ULTRA_QUALITY,50,75,OP_ANTIALIAS,OP_BRIGHTER);是什麼調用,但因爲它的靜態和我的方法是靜態的我也不必使用類名Scalar它靜態導入靜態org.imgscalr.Scalr。*; – WowBow 2015-02-23 21:08:06

回答

3

我不認爲核心問題是imgsclr,但隨着jpg選擇。請記住,jpg使用基於損失的算法,轉儲部分圖像以減小圖像的大小。

爲了進行比較,這兩個圖像以下使用相同的方法生產,但左用jpg並使用png的權利(使用ImageIO API)

Compare

所以頂端圖像被輸出相同的主圖像。

第二行是使用ULTRA_QUALITY,AUTOMATIC,BALANCEDQUALITY方法的imgsclr。第二行的最後一張圖片使用的是SPEED

最後一行是嚴重的「其他」縮放方法。前兩種方法使用分而治之的方法,將圖像分成2份,直到達到所需的大小,並顯示here。第一個是「填充」,另一個是「適合」(一個會填滿可用空間,一個會適合)。第三張圖片使用的是Image#getScaledInstance,我好像在某處引入了alpha通道,因此jpg版本是紅色的原因,但我在比較質量;)

尺寸增加的原因可能歸結爲imgsclr試圖保持圖像

最後的長寬比...

enter image description here

此相比BufferedImageOp,使用OP_BRIGHTEROP_ANTIALIASOP_BRIGHTEROP_ANTIALIAS,沒有從右到左...

這些都是爲PNG格式

+0

感謝您的意見。我會給他們一切嘗試。順便說一句,我試圖單獨保存圖像,但它們看起來像是一起作爲一個單獨的圖像。 – WowBow 2015-02-24 23:27:54

+0

是的,我提供的圖像都合併成一個單一的圖像,使發佈更容易 – MadProgrammer 2015-02-24 23:29:29

+0

順便說一句,我應該使用什麼函數來輸出所需的圖像大小,而不關心縱橫比?我的要求需要輸出精確的圖像。縱橫比在這裏不太重要。謝謝 – WowBow 2015-04-20 17:58:12

相關問題