Image.save() 和 Image.show() 对同一图像给出不同的结果

Image.save() And Image.show() Gives Different Result For same Image

我有一个 python 脚本,它将图像作为输入并为图像添加一些效果。添加效果后我正在保存图像,这给了我 100% 正确的结果。但是如果对我之前保存的同一张图片执行 img.show() 它会显示输入图片而不是添加效果的图片。代码如下

import numpy as np
from PIL import Image

img = Image.open("1.png").convert('RGBA')
arr = np.array(img)
alpha = arr[:, :, 3]
n = len(alpha)
alpha[:] = np.interp(np.arange(n), [0, 0.55*n, 0.75*n, n], [255, 255, 0, 0])[:,np.newaxis]
img = Image.fromarray(arr, mode='RGBA')
img.save("2.png")
img.show()

我猜是因为两次都没有使用同一个图像查看器。 img.show() 使用一些不同的图像查看器。尝试使用相同的图像查看器两次顶部打开。

我认为奇怪的不是您显示的图像与原始图像相同,而是您保存的图像不同。您正在从变量 arr 中设置 img2,该变量取自 img1,并且从未更改过。您应该在创建 img2.

之前设置 arr[:,:,3] = alpha

示例:

>>> import numpy as np
>>> a = np.array([[1,1],[2,2]])
>>> a
array([[1, 1],
       [2, 2]])
>>> b = a[:,1]
>>> b
array([1, 2])
>>> b = [0,3]
>>> a
array([[1, 1],
       [2, 2]])
>>> a[:,1] = b
>>> a
array([[1, 0],
       [2, 3]])