2016-06-13 6 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) 1백55킬로바이트 enter image description here

(312 X 936) 342킬로바이트

enter image description here


편집 :

, 그래서 나는 붙박이 이미지 뷰어로 이미지를 회전하는 시도 확인 의 창문이 있고, 그 경우도 증가하고 있습니다. 그래서 파이썬 그 자체에 국한되지 않습니다. 압축에 대해 자세히 알아보십시오. 아직 회전이 덜 압축 된 이유는 명확하지 않습니다. 그리고 이것은 내가 노력하고있는 모든 이미지들에 대해 일어나고 있으며,이 특별한 것이 아닙니다. 그에 따라 태그를 업데이트합니다.

+0

회전 할 때 압축이 성공적으로 이루어지지 않을 수 있습니다. –

+0

@ MarkSetchell 왜 그런 생각이 드는가? –

+0

글을 작성한 Glenn Randers-Pehrson에게 맡기고 싶습니다. 내가 할 수있는 것보다 훨씬 더 잘 설명 할 수있을 것입니다. 2-3 시간 후에 온라인에 올 것이고 확실히 볼 수있을 것입니다. 물론, 그것은 제가 제안한 것 이외의 다른 것일 수도 있습니다. –

답변

1

PNG는 각 줄을 "필터링"하여 "과거"이웃 (이전 행 및/또는 열)의 함수로 각 픽셀 값을 예측 한 다음 ZLIB를 사용하여 예측 오류를 압축합니다 (꺾다). 여기에 문제가있는 것 같습니다. 수직 이미지에는 거의 수직 줄무늬가 있습니다. 행을 따라 스캔 할 때 상당히 예측 가능한 중간 범위 패턴 (약 8 개의 비슷한 색과 밝은 색의 짧은 버스트)이 있습니다. 이것은 단거리 예측이 그다지 성공적이지는 않지만 예측 오차는 매우 반복적 인 패턴을 얻게 될 것이고 이는 압축하기가 상대적으로 쉽다는 것을 의미합니다. 이미지를 회전해도 발생하지 않습니다.

다른 가로/세로 크기가 문제가되지 않음을 확인했습니다. 원래 이미지를 9 번 반복하여 더 큰 사각형 (900x900)을 만들었습니다. 유사 수직 줄무늬가있는 PNG 이미지의 크기는 다른 크기보다 대략 절반입니다.

위의 내용을 확인하는 또 다른 실험 : 두 이미지를 회색 음영 BMP로 저장합니다.이 이미지는 비 압축 형식으로, 픽셀 당 1 바이트를 행에 저장합니다. 293.110 바이트의 두 이미지를 얻습니다. 표준 ZIP 압축기 (ZLIB의 수축 장치와 동일한 패밀리)로 두 압축하십시오. 수직 이미지는 다시 크기가 다른 이미지의 절반 정도가됩니다.

관련 문제