【问题标题】:pillow conversion increases image size枕头转换增加图像大小
【发布时间】:2021-05-13 18:01:00
【问题描述】:

我正在使用python Pillow库做一个简单的图像格式转换。

这里有一些简单的代码来演示我在做什么

im = Image.open("images/filename.tiff", mode="r")
im.save("images/filename.png", optimize=True)

这导致尺寸平均增加 98%。这是我正在尝试创建的输入 tiff 的数据:

<image mode=1 size=2544x2230>

当我显式转换它时(通过调用 .convert(),大小平均只增加了 87%,但仍然很糟糕。为什么大小膨胀这么多?

这是我尝试过的?

  • 在 .save() 上使用“质量”参数似乎效果不大
  • 将“mode”参数显式传递给保存命令效果不大
  • 使用 .convert("L") 对转换后的整体大小影响不大

编辑

这是一个示例图像,它通过了我上面描述的内容,生成了一个大 87% 的 png 文件、大 907% 的 jpeg 和大 907% 的 jpg。

https://share.getcloudapp.com/YEuR9LqP

Pillow 最新版本:8.2

Python 版本:3.8

在 MacOS 上运行:10.15.7

我是否遗漏了一些明显的东西,或者这只是我对图像库的工作原理缺乏了解?

【问题讨论】:

  • 我没有看到任何明显的东西,所以建议你向pillow的维护者报告一个错误。
  • 请分享您的输入和输出图像的链接。
  • 感谢您的回复。不幸的是,我不能,因为它们是机密图像。我们获得的大多数图像只是扫描的黑白文档。我可以尝试任何明显的事情吗?
  • 当有人说“一个你看不到的图像在平台上变成另一个你也看不到的图像时,很难猜出问题是什么我没有提到使用未指定版本的 PIL"
  • 很公平,你是对的。我编辑了问题,并在转换后包含了其中一张图像及其大小。也许你可以把它放在你的枕头上,看看你得到了什么结果?感谢您的帮助

标签: python python-imaging-library image-conversion


【解决方案1】:

我认为问题在于您的图片是 CCITT Group4 Compressed,它特别适合您的图片内容,并且没有等效的 PNG 格式。

exiftool image-1.tiff 

输出

ExifTool Version Number         : 12.00
File Name                       : image-1.tiff
Directory                       : .
File Size                       : 95 kB
File Modification Date/Time     : 2021:05:17 11:46:57+01:00
File Access Date/Time           : 2021:05:17 11:57:15+01:00
File Inode Change Date/Time     : 2021:05:17 11:46:58+01:00
File Permissions                : rw-r--r--
File Type                       : TIFF
File Type Extension             : tif
MIME Type                       : image/tiff
Exif Byte Order                 : Little-endian (Intel, II)
Image Width                     : 2544
Image Height                    : 2230
Bits Per Sample                 : 1
Compression                     : T6/Group 4 Fax       <--- HERE IT IS
Photometric Interpretation      : WhiteIsZero
Strip Offsets                   : 180
Orientation                     : Horizontal (normal)
Rows Per Strip                  : 2230
Strip Byte Counts               : 96954
X Resolution                    : 300
Y Resolution                    : 300
Resolution Unit                 : inches
Image Size                      : 2544x2230
Megapixels                      : 5.7

在我的 Mac 上,我从 PIL 获得了大小为 138,200 字节的输出 PNG,即使使用 pngcrush 我也只能减少到 124,810 字节:

pngcrush -bruteforce result-opt.png crushed.png
  Recompressing IDAT chunks in result-opt.png to crushed.png
  Total length of data found in critical chunks            =    138200
  Best pngcrush method        =   4 (ws 15 fm 0 zl 9 zs 1) =    124816

【讨论】:

  • 好的,谢谢。所以我在不增加尺寸的情况下转换它不走运?我很感激,我对图像类型/压缩的了解只是肤浅
  • AFAIK,是的,你对 PNG 不走运。或者你可以选择积极乐观,说你已经完全优化了 TIFF ;-)
  • 只是为了跟进我走这条路的全部原因是因为这些图像将进入由 Reportlab 生成的 PDF。不幸的是,每当我输入 tiff 图像时,PDF 的大小就会爆炸。
猜你喜欢
  • 1970-01-01
  • 2014-07-18
  • 2013-05-29
  • 1970-01-01
  • 1970-01-01
  • 2019-07-28
  • 2016-10-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多