python - 如何从 RGBA 像素数组构造 PIL 图像?
问题描述
我的目标是使用 PIL 从图像中提取一些细节,有效地裁剪它。
为此,我使用Image.getdata()
获取图像中像素的列表,因为检查和修改这对我来说更容易。
在我进行了所有更改之后,我留下了一个以元组表示的像素数组。为简单起见,这样的数组可能如下所示:
new_pixels = [
(255, 0, 0, 255),
(0, 255, 0, 255),
(0, 0, 255, 255),
(0, 0, 0, 255)
]
我在 PIL 文档中看到了一些有趣的东西,即classmethod fromarray
,但是将数组传递给这个函数会给出错误消息:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python39\lib\site-packages\PIL\Image.py", line 2741, in fromarray
arr = obj.__array_interface__
AttributeError: 'list' object has no attribute '__array_interface__'
用二维列表尝试相同的结果会得到相同的结果。
最后的问题是,我将如何将此数组转换为稍后可以保存的 PIL Image 对象?
解决方案
不确定这是否是您要查找的内容:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Thu Feb 4 17:10:02 2021
@author: Pietro
"""
from PIL import Image
import numpy as np
new_pixels = np.array([
(255, 0, 0, 255),
(0, 255, 0, 255),
(0, 0, 255, 255),
(0, 0, 0, 255)
]).astype('uint8')
new_pixelsRGBA = np.array([[
[255, 0, 0, 255],
[0, 255, 0, 255],
[0, 0, 255, 255],
[0, 0, 0, 255]]
]).astype('uint8')
new_pixelsRGBA2 = np.array([[
[255, 0, 0, 255],
[0, 255, 0, 255]],
[[0, 0, 255, 255],
[0, 0, 0, 255]]
]).astype('uint8')
pippo = Image.fromarray(new_pixels)
pippoRGBA = Image.fromarray(new_pixelsRGBA, mode='RGBA')
# pippoRGBA = Image.fromarray(new_pixelsRGBA)
print('pippo image size : ', pippo.size)
print('pippo image mode : ', pippo.mode)
pippo.show()
print('pippoRGBA image size : ', pippoRGBA.size)
print('pippoRGBA image mode : ', pippoRGBA.mode)
pippoRGBA.show()
pippoRGBA2 = Image.fromarray(new_pixelsRGBA2)
print('pippoRGBA2 image size : ', pippoRGBA2.size)
print('pippoRGBA2 image mode : ', pippoRGBA2.mode)
pippoRGBA2.show()
我得到的图像是:
pippo 图像尺寸 : (4, 4)
pippo 图像模式:L:(8 位像素,黑白)
显然您的阵列不是 RGBA 像素阵列?!或不 ?
使用我的 new_imageRGBA 或 new_imageRGBA2 数组见上面我得到:
pippoRGBA 图像尺寸 : (4, 1)
pippoRGBA 图像模式:RGBA
或(pippoRGBA2 图像):
pippoRGBA2 图像尺寸:(2, 2)
pippoRGBA2 图像模式:RGBA
注意 :
pippoRGBA = Image.fromarray(new_pixelsRGBA)
也可以;PIL 知道我们在谈论 RGBA 数组
推荐阅读
- javascript - 在静态 HTML 中使用 Material-UI React
- vb.net - 搜索字符串列表,如果它与带有类似运算符的字符串匹配
- amazon-web-services - 在 Terraform aws_appautoscaling_policy 中使用 AWS CloudWatch 数学表达式指标
- ansible - Ansible playbook vars 用作同一 playbook 任务中的映射
- javascript - Async/Await 不等待前一个函数完成
- android - Android 上的 gRPC 跟踪
- php - PUT 请求不会将嵌套集合更新到测试中。在之前执行另一个请求时工作
- django - 如何将 ForeignKey 与 ManyToManyField django 查询集相加
- python-3.x - 执行请求双引号
- wso2 - 在 AM 中将 IS 设置为密钥管理器后无法登录 WSO2 IS 管理控制台