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()
应用渐变后结果未发生变化。
我想知道为什么 PIL
的 Image
class 中的实例不可变?
我确定该算法有效,因为当我使用
return output_img
我得到了正确的结果。我只想将结果传递给参数。
提前致谢。
这是对Python的误解,不是PIL。在 apply_black_gradient
中,您将值分配给 output_img
。这只会更改函数内存储在该变量中的值。因此在 apply_black_gradient
中,output_img
的值已更改,但这 而不是 更改了您其他文件中 img2
的值。在这种情况下,最好的办法就是按你说的return output_img
。
如果你传递类似 list/dict/object 的东西作为参数,你可以在函数内部修改它的 部分 (列表的元素,字典的成员) ,并在调用代码中查看这些修改。但是在上面发布的代码中不需要这样做,只需使用 return
.
我尝试运行一个看起来像这样的函数:
#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()
应用渐变后结果未发生变化。
我想知道为什么 PIL
的 Image
class 中的实例不可变?
我确定该算法有效,因为当我使用 return output_img 我得到了正确的结果。我只想将结果传递给参数。
提前致谢。
这是对Python的误解,不是PIL。在 apply_black_gradient
中,您将值分配给 output_img
。这只会更改函数内存储在该变量中的值。因此在 apply_black_gradient
中,output_img
的值已更改,但这 而不是 更改了您其他文件中 img2
的值。在这种情况下,最好的办法就是按你说的return output_img
。
如果你传递类似 list/dict/object 的东西作为参数,你可以在函数内部修改它的 部分 (列表的元素,字典的成员) ,并在调用代码中查看这些修改。但是在上面发布的代码中不需要这样做,只需使用 return
.