PIL图像对象是否可变?

时间:2017-03-09 06:07:35

标签: python python-imaging-library pillow 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()

应用渐变后,结果不应该被更改。

我想知道为什么Image PIL类中的实例不可变?

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

提前致谢。

1 个答案:

答案 0 :(得分:1)

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

如果您传递类似list / dict / object的内容作为参数,则可以在函数内修改它的部件(列表元素,dict成员),并查看这些修改在调用代码中。但是,您在上面发布的代码中没有必要这样做,只需使用return