2013-10-10 19 views
9

用PIL(1.1.7)創建的JPEG圖像質量非常差。這裏有一個例子:爲什麼PIL生成的JPEG圖像的質量如此之差?

輸入:http://s23.postimg.org/8bks3x5p7/cover_1.jpg

輸出:http://s23.postimg.org/68ey9zva3/cover_2.jpg

輸出的圖像是用下面的代碼創建:

from PIL import Image 
im = Image.open('/path/to/cover_1.jpg') 
im.save('/path/to/cover_2.jpg', format='JPEG', quality=100) 

紅色的文字看起來真的非常糟糕。用GIMP或Photoshop保存圖像甚至不會接近PIL創建的質量差。 有人知道爲什麼會發生這種情況,以及如何解決?

感謝您的幫助!

+1

您正在保存JPEG的JPEG。你失去了兩次信息。你確定GIMP和Photoshop實際上是在重新處理JPEG,而不僅僅是保存它(因爲程序將它識別爲JPEG,因此對此無能爲力)? – John

+0

感謝您的快速回復。我知道我失去了兩次信息的事實。這只是一個非常簡單的例子。在製作過程中,我也調整了圖像的大小:)。另外,如果我在GIMP或Photoshop中調整圖像大小,則生成的圖像看起來更清晰。這兩人在兩張照片中看起來幾乎一樣,但紅色的文字看起來非常不同。 – Pascal

+0

我不懷疑它從GIMP/Photoshop看起來更清晰。但是它與輸入圖像有什麼不同?將它從GIMP/Photoshop保存爲JPEG後,是否有更改?如果答案是否定的,那麼PIL可能看起來「不好」,因爲它實際上是應用JPEG壓縮,而另一個則不是。看看我在做什麼? – John

回答

23

JPEG質量有兩個部分。第一種是quality設置,您已將其設置爲可能的最高值。

JPEG也使用chroma subsampling,假設色調變化不如亮度變化重要,並且可以安全地丟棄一些信息。不幸的是,在要求苛刻的應用中,這並非總是如此,並且您可以在紅色邊緣上輕鬆注意到這一點PIL不公開一個文檔化的設置來控制這個方面。

編輯帕斯卡貝耶勒:

我只是發現了禁用子採樣的選項。保存圖像時可以設置subsampling = 0,圖像看起來更清晰!感謝您的幫助標記!

im.save('/path/to/cover-2.jpg', format='JPEG', subsampling=0, quality=100)