【问题标题】:Using PIL modifying and then saving a TIFF returns error使用 PIL 修改然后保存 TIFF 返回错误
【发布时间】:2020-09-03 17:24:36
【问题描述】:

TLDR;我正在尝试获取 TIFF,调整它的大小,然后保存它。但是它返回一个错误。如果我将保存的文件类型更改为 png 或 jpg,这将正常工作。

系统:Windows 7 尝试使用 Python 3.4 和 2.7。

代码:

from PIL import Image

try:                                               #test file exists
    im = Image.open(r"c:\temp\file.tif")
except:
    print("Error opening image")

multiply = 5                                       #how much bigger
processing = tuple([multiply*x for x in im.size])  #maths
saved = (r"c:\temp\biggerfile.tif")               #save location

imB = im.resize((processing))                      #resizing

imB.save(saved)                                    #saving

我需要调整 TIFF 的大小,因为我正在使用 tesseract-ocr,并调整图像的大小以获得更好的输出。该程序似乎最适合 TIFF。

我收到的错误是:

_TIFFVSetField: c:\temp\biggerfile.tif: Bad value 2 for "ExtraSamples" tag.
Traceback (most recent call last):
  File "step1.py", line 15, in <module>
    imB.save(saved)
  File "C:\Python34\lib\site-packages\PIL\Image.py", line 1684, in save
    save_handler(self, fp, filename)
  File "C:\Python34\lib\site-packages\PIL\TiffImagePlugin.py", line 1185, in _save
    e = Image._getencoder(im.mode, 'libtiff', a, im.encoderconfig)
  File "C:\Python34\lib\site-packages\PIL\Image.py", line 430, in _getencoder
    return encoder(mode, *args + extra)
RuntimeError: Error setting from dictionary

谢谢!

【问题讨论】:

  • 这段代码对我有用。我唯一能想到的就是您没有合适的 tiff 编码器,或者它可能在.tif 上跳闸。您是否尝试在文件名中将其更改为.tiff?在 linux 上,.tif 就可以了,但你永远不知道。保存时发生错误,并且名为_getencoder 的方法试图返回无效数据,因此我认为它与文件名或编码器有关。
  • 我在windows上做这个,但是3.4和2.7我都试过了。我尝试使用 .tiff 和不带扩展名和“TIF”的文件名。
  • 我认为错误指向unassociated alpha data。 PIL 可以在加载(调整大小之前)后立即将图像重新保存为 tif 吗?也许你试图摆脱这些会影响 PIL 的数据。
  • 你可以试试用枕头代替PIL,pillow.readthedocs.org
  • 首先,是的,总是用枕头代替 PIL。

标签: python python-imaging-library pillow


【解决方案1】:

尝试安装 libtiff http://gnuwin32.sourceforge.net/packages/tiff.htm

File "C:\Python34\lib\site-packages\PIL\TiffImagePlugin.py", line 1185, in _save
e = Image._getencoder(im.mode, 'libtiff', a, im.encoderconfig)

看起来这是阻碍你的错误。它正在尝试访问 libtiff 并且您没有安装它,所以它失败了。

【讨论】:

    【解决方案2】:

    在使用 PIL 将多张图片合并为一张并添加标签时遇到了同样的问题。 我可以通过在 MS Paint 中将 .tif 文件转换为 .png 文件来轻松解决此问题(请不要讨厌我使用 MS :D)。最终合并图像的质量没有降低。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-14
      • 1970-01-01
      • 2016-12-25
      • 2010-12-17
      相关资源
      最近更新 更多