Python使用PIL裁剪图像时_idat无fileno属性报错如何解决?
PIL裁剪图像
_idat属性报错解决方案 报错根因
这个报错的高频触发原因有两个:
- 你调用
Image.crop()时传参顺序错误,生成了非法的裁剪区域,导致图像数据处理异常 - 旧版本Pillow的
show()方法存在临时文件处理的已知bug,或是系统缺少图形化图片查看器、源图像损坏/格式不匹配
修复步骤
第一步:修正crop方法传参顺序
PIL的Image.crop()要求传入的坐标元组顺序为 (left, upper, right, lower)(左边界、上边界、右边界、下边界),你当前代码中顺序为左、右、上、下,参数顺序错误会直接触发异常。
修正后的代码如下:
from PIL import Image image = Image.open('/root/Downloads/crew.jpg') Left = int(input('Left : ')) Right = int(input('Right : ')) Upper = int(input('Upper : ')) Lower = int(input('Lower : ')) # 修正参数顺序,同时添加合法性校验 if Right <= Left or Lower <= Upper: raise ValueError("非法裁剪坐标:右边界必须大于左边界,下边界必须大于上边界") crop_box = (Left, Upper, Right, Lower) crop_image = image.crop(crop_box) # 先保存到本地再调用show,规避临时文件处理bug crop_image.save("cropped_crew.jpg") crop_image.show()
第二步:如果修正参数后仍报错,按以下顺序排查
- 确认源图像正常:用系统自带图片查看器打开
/root/Downloads/crew.jpg,确认没有损坏,同时确认图像实际格式和后缀一致,不要手动修改图像后缀名 - 升级Pillow到最新稳定版,执行命令:
pip install --upgrade pillow - 如果你使用的是无图形界面的Linux服务器环境,
show()方法无法正常调用,直接删除该行代码,查看save方法保存到本地的裁剪后图片即可
内容的提问来源于stack exchange,提问作者Vinura Yashohara
相关产品推荐
相关产品推荐

