【问题标题】:python creating an image from RGB tuplespython从RGB元组创建图像
【发布时间】:2017-12-24 15:52:34
【问题描述】:

我有一个包含如下图像数据的多行 .txt 文件:

(198, 252, 247) (255, 255, 250) (254, 253, 248) (251, 252, 246) (247, 248, 240) ... 
(100, 144, 247) (255, 200, 250) (254, 253, 248) (251, 252, 246) (247, 248, 240) ... 

如何将这些数据读入元组?

lst = [((198, 252, 247), (255, 255, 250)), (second line), (thrid) ...]

并最终使用Image 模块将每一行绘制回图像文件中

【问题讨论】:

  • @SoumeshBanerjee 不,我正在尝试从文件中读取元组
  • 元组的分隔符是什么?
  • @SoumeshBanerjee 如果这样可以让生活更轻松,我可以将空格更改为破折号。所以它将是:(198, 252, 247)-(255, 255, 250)-(254, 253, 248)-...
  • @AK_,你说:“我正在尝试从文件中读取元组”。然后,问如何从文件中读取元组。简化问题。

标签: python image drawing draw


【解决方案1】:

只需读取每一行,从中提取三元组值,然后将它们转换为整数。

import re

triplet = r'\((\d+), (\d+), (\d+)\)' # regex pattern

image = []
with open('image.txt') as fp:
    for line in fp:
        image.append([(int(x), int(y), int(z)) for x, y, z in re.findall(triplet, line)])

编辑

要实际绘制图像,请查看this question。但是,这应该有效:

from PIL import Image

width, height = len(image[0]), len(image)
data = sum(image, []) # ugly hack to flatten the image

im = Image.new('RGB', (width, height))
im.putdata(data)
im.save('image.png')

【讨论】:

  • 这行得通;但是您能否添加如何为每个元组绘制图像?
  • 当然。给你。
  • 好的,这行得通;我将编辑一个错误,并将您的回复标记为答案!
  • 如果images = [[(1,1,1),(2,2,2)],[(3,3,3),(4,4,4)]]sum(image, []) 将其展平为[(1,1,1),(2,2,2),(3,3,3),(4,4,4)],这是putdata 所期望的。您对map(sum, image) 的建议编辑只会引发TypeError。 :(
  • 也许你的文件被转置了,行(即len(image))是宽度,列(即len(image[0]))是高度?
【解决方案2】:

首先你需要从文件中扫描和拆分数据,然后你可以从数据中解析元组(字符串元组),然后简单地使用 PIL 创建一个图像对象

def getTuple(s):
    try:
        s = eval(str(s))
        if type(s) == tuple:
            return s
        return
    except:
        return

with open("filename.txt", "rb") as fp:
    im_list = []
    data_points = fp.read()
    data_point_list = data_points.split("-")
    for data_point in data_point_list:
        im_list.append(getTuple(data_point))
    # the code snippet from https://stackoverflow.com/questions/12062920/how-do-i-create-an-image-in-pil-using-a-list-of-rgb-tuples
    im2 = Image.new(im.mode, im.size)
    im2.putdata(list_of_pixels)

【讨论】:

  • getTuple 未定义?我错过了什么?
猜你喜欢
  • 1970-01-01
  • 2020-01-03
  • 2023-03-29
  • 1970-01-01
  • 2018-06-25
  • 1970-01-01
  • 2012-08-17
  • 2016-07-02
  • 2020-12-14
相关资源
最近更新 更多