You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在循环中使用PIL transpose方法报错:Image模块无属性i

问题解决:PIL transpose循环迭代报错修复

错误原因

你代码里的coins.transpose(Image.i)写法存在两个核心问题:

  1. 属性访问逻辑错误:Image.i会让Python把i当作Image模块的固定属性名,但i是循环变量,存储的是字符串(如'FLIP_LEFT_RIGHT'),Python不会自动将字符串映射为模块的对应常量,因此触发AttributeError。
  2. 对象类型不匹配:skimage.data.coins()返回的是numpy数组,并非PIL的Image对象,直接调用transpose方法会引发额外兼容性问题。

修复方案

提供两种可行的修复方式:

方式一:使用getattr()动态映射字符串到Image常量

通过getattr()函数动态获取Image模块中对应字符串的常量值,同时将numpy数组转为PIL Image对象:

from PIL import Image
from skimage import data

flips = ['FLIP_LEFT_RIGHT','FLIP_TOP_BOTTOM']

# 将skimage返回的numpy数组转为PIL Image对象
coins_img = Image.fromarray(data.coins())

for flip_mode in flips:
    # 动态获取对应翻转模式的常量
    flipped_img = coins_img.transpose(getattr(Image, flip_mode))
    display(flipped_img)

方式二:直接存储Image常量到列表

跳过字符串环节,直接将Image模块的翻转常量存入列表,无需动态映射:

from PIL import Image
from skimage import data

# 直接使用Image模块的内置常量
flips = [Image.FLIP_LEFT_RIGHT, Image.FLIP_TOP_BOTTOM]

coins_img = Image.fromarray(data.coins())

for flip_mode in flips:
    flipped_img = coins_img.transpose(flip_mode)
    display(flipped_img)

内容的提问来源于stack exchange,提问作者Alain Michael Janith Schroter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 15:55:19