2016-06-13 23 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)155キロバイト enter image description here

(X 936 312)342キロバイト

enter image description here


編集:

[OK]を、私は作り付けの画像ビューアで画像を回転させる試みその場合も同様に増加しています。だから、それはPython自体に固有のものではありません。圧縮の詳細それが回転で圧縮されにくい理由はまだ分かりませんか?そして、これは、私が試みているすべての画像で起こっているのですが、この特定の画像ではありません。それに応じてタグを更新する。

+0

回転させると圧縮がうまくいかないことがあります。 –

+0

@ MarkSetchellなぜ、それは一般的に起こりますか? –

+0

私はそうしていますが、それを書いたGlenn Randers-Pehrsonに遅れて言い渡して、それよりもずっとマイルを説明することができます.2時間でオンラインになると思います。もちろん、私が提案したもの以外のものかもしれません。 –

答えて

1

PNGは、各行の「フィルタリング」によって画像を圧縮し、「過去」の近傍(前の行および/または列)の関数として各ピクセルの値を予測し、次にZLIBを使用して予測誤差を圧縮します(収縮)。 ここの問題は、このように見えます。縦の画像にはほぼ縦縞があります。行に沿ってスキャンすると、かなり予測可能な中範囲のパターン(約8の類似の色に続いて明るい色の短いバースト)を有する。このことは、短距離予測はあまり成功しないが、予測誤差は非常に繰り返しやすいパターンを得ることを示唆しており、これは圧縮が比較的容易でなければならない。これは、画像が回転しても起こりません。

異なる水平/垂直サイズが問題ではないことを確認しました。元の画像を9回繰り返して、より大きな正方形(900x900)を作成しました。準垂直ストライプのPNG画像のサイズは、他のサイズの約半分です。

上記を確認するもう1つの実験:両方の画像をグレースケールBMP(これは圧縮されていない形式で、1行に沿ってピクセルあたり1バイトを保存する)として保存します。 2つの293.110バイトの画像が得られます。標準ZIPコンプレッサー(ZLIBの収縮と同じ家庭)で両方を圧縮します。垂直の画像は、もう一方の画像のサイズの約半分になります。

関連する問題