Image.save()和Image.show()为同一图像提供不同的结果

时间:2016-08-01 04:59:46

标签: python-2.7 python-imaging-library

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

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()

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

我认为奇怪的是,您显示的图像与原始图像完全相同,但保存的图像不是。您从变量img2设置arr,该变量取自img1,然后从未更改过。您应该在创建arr[:,:,3] = alpha之前设置img2

示例:

>>> 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]])