PIL 图像对象是否可变?

Is an PIL image object mutable?

我尝试运行一个看起来像这样的函数:

#file A_FILE
from PIL import Image

def apply_black_gradient(input_img, output_img, gradient):
    # parameters:
    # input_img : Image object
    # output_img: Image object
    # gradient: gradient rate applied to input_img

    ...Some codes here...
    output_img = Image.alpha_composite(input_im, gradient_im)

    return

我的问题是当我在另一个文件中使用该函数时

from A_FILE import apply_black_gradient

apply_black_gradient(img1,img2,gradient)

img2.show()

应用渐变后结果未发生变化。

我想知道为什么 PILImage class 中的实例不可变?

我确定该算法有效,因为当我使用 return output_img 我得到了正确的结果。我只想将结果传递给参数。

提前致谢。

这是对Python的误解,不是PIL。在 apply_black_gradient 中,您将值分配给 output_img。这只会更改函数内存储在该变量中的值。因此在 apply_black_gradient 中,output_img 的值已更改,但这 而不是 更改了您其他文件中 img2 的值。在这种情况下,最好的办法就是按你说的return output_img

如果你传递类似 list/dict/object 的东西作为参数,你可以在函数内部修改它的 部分 (列表的元素,字典的成员) ,并在调用代码中查看这些修改。但是在上面发布的代码中不需要这样做,只需使用 return.