2014-10-28 81 views
11

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

系统: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 

谢谢!

+0

此代码适用于我。我唯一能想到的是要么没有适当的编码器,要么就是在'.tif'上绊倒。你有没有尝试将它改为'.tiff'的文件名?在Linux上,'.tif'确实很好,但你永远不知道。保存时发生错误,并且名为'_getencoder'的方法试图返回无效数据,所以我认为它与文件名或编码器有关。 – DuckPuncher 2014-10-28 23:38:29

+0

我在Windows上这样做,但我已经尝试过3.4和2.7。我曾尝试使用.tiff和没有扩展名和“TIF”的文件名。 – Gaudard 2014-10-28 23:50:43

+0

我认为错误指向[unassociated alpha data](http://www.awaresystems.be/imaging/tiff/tifftags/extrasamples.html)。 PIL可以在加载(调整大小之前)作为tif后立即重新保存图像吗?也许你试图摆脱这个数据,绊倒PIL。 – 2014-10-29 01:01:52

回答

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并且没有安装它,所以它失败了。