Numpy结合Pillow实现图像创建

Numpy结合Pillow实现图像创建

文档格式

(115, 114, 114)
(116, 113, 111)
(114, 110, 107)
(109, 104, 102)
(104, 99, 97)
(101, 93, 91)
(97, 89, 86)
(92, 83, 81)
(86, 78, 75)
(81, 72, 70)
(76, 66, 65)
(70, 61, 59)
...
1000000 条数据 14M

错误版本。

import numpy as np
from PIL import Image

# 读取文本文件
with open("filename.txt", "r") as f:
    data = f.readlines()

# 假设每行数据包含三个数字,分别代表 RGB 值
# 创建 NumPy 数组
# 由于您提到有 1000000 行数据,每行 3 个数字,我们可以推断出图片尺寸为 1000x1000
image_array = np.array([list(map(int, line.strip().split(','))) for line in data])

# 将 NumPy 数组转换为 Pillow Image 对象
# 由于 NumPy 数组的形状为 (1000000, 3),我们需要将其重塑为 (1000, 1000, 3)
# 其中 3 代表 RGB 通道
image_array = image_array.reshape((1000, 1000, 3))

# 创建 Pillow Image 对象
image = Image.fromarray(image_array)

# 保存图片
image.save("output_image.png")

基础版本

from PIL import Image
import numpy as np

def readFile(_f):
    with open(_f, 'r') as f:
        data = f.readlines()
    return data

if __name__ == '__main__':
    data = readFile('result.txt')

    x = [list(map(int,line.strip()[1:-1].split(','))) for line in data]
    img_array = np.array(x)

    c = img_array.reshape((1000,1000,3))
    # 这一句话很关键,不然会报错
    c = c.astype(np.uint8)
    img = Image.fromarray(c)
    img.save('result.png')

进阶版本

# -*- coding: utf-8 -*-
from PIL import Image
import numpy as np

# def s_c(val):
#     v = [int(c.strip()) for c in val.decode('utf-8')[1:-1].split(',')]
#     print(v)
#     return v
C = 'utf-8'

def c1(v):
    return int(v.decode(C).strip()[1::])

def c2(v):
    return int(v.decode(C).strip())

def c3(v):
    return int(v.decode(C).strip()[:-1])

if __name__ == '__main__':
    data = np.loadtxt('result.txt', delimiter=',', dtype=np.uint8, converters={0: c1, 1: c2, 2: c3})
    data = data.reshape((1000, 1000, 3))
    # img1 水平翻转,垂直翻转
    data = data[:, ::-1, :]
    data = data[::-1, :, :]
    img = Image.fromarray(data)
    img.transpose(Image.ROTATE_180)
    img.save('premiere1.png')

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注