我只在PIL中使用CMYK tif图像时遇到麻烦。问题是一切似乎都很好,我可以加载文件,保存它,但当我裁剪它并尝试保存它时python.exe只是挂起。这是我会议的粗略记录:
>>> import os
>>> from PIL import Image
>>> os.listdir(".")
['CMYK_TIFF.tif', 'GRAYSCALE_TIFF.tif', 'RGB_TIFF.tif']
>>> im = Image.open("CMYK_TIFF.tif")
>>> im
<PIL.TiffImagePlugin.TiffImageFile image mode=CMYK size=4320x3240 at 0x2630B88>
>>> points = (12, 3, 44, 88)
>>> im = im.crop(points)
>>> im
<PIL.Image._ImageCrop image mode=CMYK size=32x85 at 02630B48>
>>> im.save("new_image.tif")
此时python.exe崩溃了。这不是一个孤立的问题,它在这一点上是一致的。
非常感谢任何帮助!
PD:我在Windows 7 x64操作系统中使用python 2.7.3和PIL 1.1.7。
PD2:Python崩溃转储:
Descripción (description)
Ruta de acceso de la aplicación con errores (filepath to the application with errors): C:\Python27\python.exe
Firma del problema (problem signature)
Nombre de evento de problema (name of the event or problem): APPCRASH
Nombre de la aplicación (application name): python.exe
Versión de la aplicación (aplication version): 0.0.0.0
Marca de tiempo de la aplicación (timestamp): 4f84a524
Nombre del módulo con errores (Name of the module with errors): MSVCR90.dll
Versión del módulo con errores (version of the module with errors): 9.0.30729.6161
Marca de tiempo del módulo con errores (module timestamp): 4dace4e7
Código de excepción (exception code): c0000005
Desplazamiento de excepción (exception displacement): 000000000001e2e0
Versión del sistema operativo (OS version): 6.1.7601.2.1.0.256.48
Id. de configuración regional (regional configuration id): 11274
Información adicional 1: 3312
Información adicional 2: 3312c03e983672d704c6ef8ee1696a00
Información adicional 3: b29d
Información adicional 4: b29dcc8fc6f4d939931d139c4d9e8d31
Información adicional sobre el problema
Id. de depósito: 67567272
答案 0 :(得分:1)
crop
函数实际上是懒惰的,这意味着在您尝试访问像素之前不会发生裁剪,在save
期间会发生这种情况。
您可以通过致电load
:
>>> im = im.crop(points)
>>> im
<PIL.Image._ImageCrop image mode=CMYK size=32x85 at 02630B48>
>>> im.load()
<PixelAccess at 0x108d2ba70>
>>> im.save("new_image.tif")
我最初建议将其作为一种帮助调试问题的方法,因为有三件事情可能发生:
load
崩溃,则问题在于强制评估作物。 load
成功,但save
崩溃,则问题在于保存(某些)TIFF图像。 save
触发评估的方式中存在某个错误懒惰的功能。当然,在选项3中,如果你只是试图通过一次性任务,你可能不关心进一步调试。但是很有可能它会再次弹出不同的图像,所以如果你正在尝试构建一个更广泛使用的程序,最好继续调试问题(从崩溃转储中获取堆栈跟踪)。
有关上述所有功能的详细信息,请参阅the docs。