首页 > 解决方案 > 从数组转换回来时如何保留PNG图像的颜色

问题描述

每当我将 PNG 图像转换为 np.array 然后将其转换回 PNG 时,我都会丢失图像的所有颜色。当我从 np.array 转换回来时,我希望能够保留原始 PNG 的颜色。

原始PNG图像

在此处输入图像描述

我的代码:

from PIL import Image    

im = Image.open('2007_000129.png')
im = np.array(im)

#augmenting image
im[0,0] = 1

im = Image.fromarray(im, mode = 'P')

输出图像的黑白版本

在此处输入图像描述

我也尝试使用getpaletteputpalette但这不起作用,它只返回一个 NonType 对象。

im = Image.open('2007_000129.png')
pat = im.getpalette()
im = np.array(im)
im[0,0] = 1
im = Image.fromarray(im, mode = 'P')
im= im.putpalette(pat)

标签: pythonnumpypython-imaging-librarypngcolor-palette

解决方案


您的图像使用调色板使用单通道颜色。试试下面的代码。您还可以在 PIL 中“P”和“L”模式下的图像有什么区别?

from PIL import Image    
import numpy as np


im = Image.open('gsmur.png')
rgb = im.convert('RGB')
np_rgb = np.array(rgb)
p = im.convert('P')
np_p = np.array(p)

im = Image.fromarray(np_p, mode = 'P')
im.show()
im2 = Image.fromarray(np_rgb)
im2.show()

推荐阅读