我试图旋转一些图片,其宽度超过高度左右的左上角,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 312
(312 X 936) 342 936
编辑:
好的,我试着用内置的窗口图像查看器旋转图像,在这种情况下也会增加。因此,这并不是Python本身所特有的。更多关于压缩的内容。我还不清楚为什么旋转时它会压缩得更少?我正在尝试的所有图像都会发生这种情况,而不是这个特定的图像。相应地更新标记。
发布于 2016-06-13 10:46:06
PNG通过“过滤”每一行压缩图像,试图将每个像素的值作为“过去”邻居(前一行和/或列)的函数来预测,然后使用ZLIB (Deflate)压缩预测误差。这里的问题似乎是:垂直图像几乎有垂直条纹;当沿着行扫描时,它有一个相当可预测的中程图案(大约8种相似的颜色,然后是短的浅色)。这表明,虽然短期预测不是很成功,但预测误差会有一个高度重复的模式,这应该是相对容易压缩的。当图像被旋转时,这种情况不会发生。
我验证了不同的水平/垂直尺寸并不是问题所在:我通过重复原始图像9次,得到了一个更大的正方形(900x900)。具有准垂直条纹的PNG图像大小约为另一幅图像的一半。
另一个实验证实了上述情况:将两个图像保存为灰度BMP (这是一种未压缩格式,它沿行存储每像素一个字节)。你会得到两个293.110字节的图像。用标准的ZIP压缩机压缩它们(与ZLIB的排气系列相同)。同样,垂直图像的大小大约是另一张的一半。
https://stackoverflow.com/questions/37786313
复制