旋转图像会增加其尺寸?
Rotating image increases its size?
我正在尝试将一些宽度大于高度的图像围绕左上角旋转 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
(312 x 936) 342KB
编辑:
好的,所以我尝试使用 windows 的内置图像查看器旋转图像,并且在这种情况下也有所增加。所以它本身并不是真正特定于 Python。更多关于压缩。我仍然不清楚为什么旋转时它的可压缩性会降低?这发生在我尝试的所有图像上,而不是这个特定的图像。相应地更新标签。
PNG 每行 "filtering" 压缩图像,尝试预测每个像素的值作为 "past" 邻居(前一行 and/or 列)的函数,然后使用 ZLIB (Deflate) 压缩预测误差。
这里的问题似乎是这样的:垂直图像几乎有垂直条纹;当沿行扫描时,它具有相当可预测的中等范围图案(大约 8 种相似的颜色,然后是短暂的较浅颜色)。这表明,虽然短程预测不会很成功,但预测误差会得到高度重复的模式,应该相对容易压缩。旋转图像时不会发生这种情况。
我确认 horizontal/vertical 尺寸不同不是问题:我通过将原始图像重复 9 次来制作更大的正方形 (900x900)。带有准垂直条纹的 PNG 图像大约是另一个图像的一半大小。
另一个证实上述内容的实验:将两张图像都保存为灰度 BMP(这是一种未压缩的格式,它沿行每个像素存储一个字节)。您会得到两张 293.110 字节的图像。使用标准 ZIP 压缩器(与 ZLIB 的 deflate 同系列)压缩它们。同样,垂直图像的尺寸大约是另一个图像的一半。
我正在尝试将一些宽度大于高度的图像围绕左上角旋转 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
(312 x 936) 342KB
编辑:
好的,所以我尝试使用 windows 的内置图像查看器旋转图像,并且在这种情况下也有所增加。所以它本身并不是真正特定于 Python。更多关于压缩。我仍然不清楚为什么旋转时它的可压缩性会降低?这发生在我尝试的所有图像上,而不是这个特定的图像。相应地更新标签。
PNG 每行 "filtering" 压缩图像,尝试预测每个像素的值作为 "past" 邻居(前一行 and/or 列)的函数,然后使用 ZLIB (Deflate) 压缩预测误差。 这里的问题似乎是这样的:垂直图像几乎有垂直条纹;当沿行扫描时,它具有相当可预测的中等范围图案(大约 8 种相似的颜色,然后是短暂的较浅颜色)。这表明,虽然短程预测不会很成功,但预测误差会得到高度重复的模式,应该相对容易压缩。旋转图像时不会发生这种情况。
我确认 horizontal/vertical 尺寸不同不是问题:我通过将原始图像重复 9 次来制作更大的正方形 (900x900)。带有准垂直条纹的 PNG 图像大约是另一个图像的一半大小。
另一个证实上述内容的实验:将两张图像都保存为灰度 BMP(这是一种未压缩的格式,它沿行每个像素存储一个字节)。您会得到两张 293.110 字节的图像。使用标准 ZIP 压缩器(与 ZLIB 的 deflate 同系列)压缩它们。同样,垂直图像的尺寸大约是另一个图像的一半。