【问题标题】:How can images be modified and appended to the end of a list with python using PIL?如何使用 PIL 使用 python 修改图像并将其附加到列表的末尾?
【发布时间】:2019-12-24 20:48:52
【问题描述】:

我正在尝试使用 for 循环修改图像的颜色值,然后将修改后的图像副本附加到列表中。每次我运行我的 for 循环时,我列表中的所有图像都会被修改,而不是 for 循环生成一个新副本,该副本将附加到列表的末尾。结果,所有图像最终看起来都像 for 循环的最后一次迭代。我当前的代码如下。请指教。

import PIL
from PIL import Image
from PIL import ImageEnhance

pic=Image.open("pic.gif")
pic=pic.convert('RGB')
width, height = pic.size

pics=[]
for intens in [.1, .5, .9]:
    for x in range(pic.width):
        for y in range(pic.height):
            a = pic.getpixel((x,y))
            a = (int(a[0]*intens), a[1], a[2])
            pic.putpixel((x,y),a)
    pics.append(pic)

【问题讨论】:

  • 想想你实际创建了多少pictures。
  • 我看到我只修改了一个变量“pic”,并将该变量附加到列表“pics”中。我怎样才能将 'pic' 的副本附加到已修改并具有自己唯一变量名的 'pics' 列表中?
  • 您正在尝试列出 3 个图像,其中第一个具有所有红色值除以 10,第二个具有所有红色值除以 2,第三个具有红色值乘以0.9。对吗?
  • 正确!我相信我只是将同一张图片附加到列表中 3 次并修改了 3 次

标签: python-3.x python-imaging-library rgb


【解决方案1】:

为了解决这个问题,我用另一个 for 循环包装了我的强度列表,以便将所有内容再迭代 3 次。

import PIL
from PIL import Image
from PIL import ImageEnhance

pic=Image.open("pic.gif")
pic=pic.convert('RGB')
width, height = pic.size

pics=[]
for i in range(3):
    for intens in [.1, .5, .9]:
        for x in range(pic.width):
            for y in range(pic.height):
                a = pic.getpixel((x,y))
                a = (int(a[0]*intens), a[1], a[2])
                pic.putpixel((x,y),a)
    pics.append(pic)

【讨论】:

  • 您好,请在您的代码中添加一些上下文。帮助解释为什么这是一个好的解决方案以及它如何帮助 OP 解决他们的问题,以及帮助遇到这个线程的人了解您的代码在做什么以及它如何完成手头的任务。您可能还想阅读这篇 Stack Overflow 文章 stackoverflow.com/help/how-to-answer
猜你喜欢
  • 1970-01-01
  • 2019-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-07
  • 1970-01-01
  • 2016-08-04
  • 1970-01-01
相关资源
最近更新 更多