Python Image Library - IndexError: string index out of range | Same code one works the other not

Python Image Library - IndexError: string index out of range | Same code one works the other not

我的任务获取了一些包含 header + 图片内容的文件。在 header 提取并创建可识别并正确打开的 image.png 之后。该程序适用于 windows 和 python 2.7.9 以及 PIL

时的最新版本

之后图像从 png 转换为 jpeg。 代码片段:

im = Image.open("c:\1\rawfile.png")
im.save('c:\1\rawfile.jpeg',"JPEG")

这里出现错误(在 im.save() 行),只有在加载之后,如果我做 img.crop(x), img.rotate(x) 相同出现错误。

Traceback (most recent call last):
  File "getMail.py", line 225, in <module>
    start_deamon()
  File "getMail.py", line 217, in start_deamon
    deamon.process_email()
  File "getMail.py", line 114, in process_email
    self.img_conv.convert_file('c:\1\rawfile\rawfile.png', 'c:\1\rawfile\rawfile.jpg' )
  File "getMail.py", line 162, in convert_file
    im.save('c:\1\rawfile.jpeg',"JPEG")
  File "C:\Python27\lib\site-packages\PIL\Image.py", line 1406, in save
    self.load()
  File "C:\Python27\lib\site-packages\PIL\ImageFile.py", line 198, in load
    s = read(self.decodermaxblock)
  File "C:\Python27\lib\site-packages\PIL\PngImagePlugin.py", line 391, in load_read
    cid, pos, len = self.png.read()
  File "C:\Python27\lib\site-packages\PIL\PngImagePlugin.py", line 96, in read
    len = i32(s)
  File "C:\Python27\lib\site-packages\PIL\PngImagePlugin.py", line 44, in i32
    return ord(c[3]) + (ord(c[2])<<8) + (ord(c[1])<<16) + (ord(c[0])<<24)
IndexError: string index out of range

我已经尝试将 LOAD_TRUNCATED_IMAGES 设置为 YES 但它没有用。我也尝试过没有运气的绝对路径。

在对相同文件使用相同硬编码路径的调试独立程序中,它可以工作! (文件由文件编辑器创建、转换和正确读取)

try:
    with open( 'c:\1\rawFile', 'rb') as fin:
        data = fin.read()
        fin.close()
except:
    print 'error1' 

#do my stuff here

try:
    with open( 'c:\1\rawfile.png', 'wb') as fout:
        fout.write(data[index:])
        fout.close()
except:
    print 'error2'
try:
 Image.open('c:\1\rawfile.png').save('c:\1\rawfile.jpg')
except:
    print 'error 3'

如果我在主项目上对文件路径进行硬编码,它将失败并给出 IndexError。

正在使用原始 PIL。相反,我已经 升级 到 Pillow(一个 PIL 叉子),它用下面的代码解决了这个问题。 (as already described)

from PIL import ImageFile

#To ensure that *.png file are read
ImageFile.LOAD_TRUNCATED_IMAGES = True