'使用PIL crop图像的错误:AttributeError: ''_idat'' object has no attribute ''fileno'' '

在使用PIL的Image类的crop方法切割图像时如果报如下错误:

AttributeError: '_idat' object has no attribute 'fileno'

During handling of the above exception, another exception occurred:

File "/home/username/anaconda3/lib/python3.7/site-packages/PIL/ImageFile.py", line 489, in _save
    e.setimage(im.im, b)
SystemError: tile cannot extend outside image

则问题是因为传入crop的box参数超过了图像的边框. 上面第一个错误会让人误以为是图像本身的错误或者编码错误,解决该问题的过程中我尝试了在save函数中显示指定图像格式,如'PNG'等, 都不能解决问题.

最后查看文档中crop方法的box参数解决了问题:

box – The crop rectangle, as a (left, upper, right, lower)-tuple.

说明传入的参数是给定的"左边位置,上边位置,右边位置,下边位置"的tuple数据类型,并且要注意右边下边都要分别比左边和上边大,否则就会报上面的错误.

你可能感兴趣的:(随笔,[工具])