2016-06-13 164 views
1

我想旋轉一些圖像,其寬度比左上角高出90度。我寫了這個:產生旋轉圖像增加其大小?

from PIL import Image 
import sys, csv, os, traceback, glob 
import shutil, math 

src_im = Image.open("Test.png") 
print src_im.size[0] , ',' , src_im.size[1] 

src_im = src_im.transpose(Image.ROTATE_90) 
src_im = src_im.transpose(Image.FLIP_LEFT_RIGHT) 
src_im = src_im.transpose(Image.FLIP_TOP_BOTTOM) 

src_im.save("TestResult.png") 
print src_im.size[0] , ',' , src_im.size[1] 

輸出是如我所料,但在規模巨大的變化。任何想法,我可能會出錯?

它存儲相同的像素信息,只是旋轉,爲什麼應該有一個圖像大小的變化?

例如。 (936 X 312)155KB enter image description here

(312 X 936)342KB

enter image description here


編輯:

好了,我試圖與內置的圖像查看器旋轉所述圖像的窗戶,而且這種情況也有所增加。所以它本身並不特定於Python。更多關於壓縮。我仍不清楚爲什麼它在旋轉時可壓縮性較差?這是發生在我嘗試的所有圖像上,而不是這個特定的圖像。相應地更新標籤。

+0

旋轉時,它可能不太容易成功壓縮。 –

+0

@MarkSetchell任何想法爲什麼會發生,一般? –

+0

我這樣做,但我寧願推遲給Glenn Randers-Pehrson寫信,並且能夠比我更好地解釋它 - 我想他會在2-3小時內上線,並且一定會看到這一點。當然,這可能與我所建議的不同。 –

回答

1

PNG通過「篩選」每一行來壓縮圖像,嘗試預測每個像素的值作爲「過去」鄰居(先前行和/或列)的函數,然後使用ZLIB壓縮預測誤差(放氣)。 這裏的問題似乎是這樣的:垂直圖像具有幾乎垂直的條紋;當沿行掃描時,它具有相當可預測的中等範圍圖案(約8種相似顏色,接着是較短顏色的短突發)。這表明,雖然短期預測不會很成功,但預測誤差會得到高度重複的模式,應該相對容易壓縮。旋轉圖像時不會發生這種情況。

我證實了不同的水平/垂直尺寸不是問題:我通過重複原始圖像9次製作了一個更大的方形(900x900)。具有準垂直條紋的PNG圖像的尺寸大約是另一個的一半。

確認上述內容的另一個實驗:將這兩個圖像保存爲灰度BMP(這是一種未壓縮的格式,它沿着行存儲每個像素一個字節)。你得到兩個293.110字節的圖像。用標準ZIP壓縮器壓縮它們(與ZLIB的放氣系列相同)。垂直圖像的尺寸也比另一個大一半。