gpt4 book ai didi

python - 使用 PIL,如何在使用 .load() 后保存经过处理的图像?

转载 作者:太空宇宙 更新时间:2023-11-04 06:24:23 27 4
gpt4 key购买 nike

如何从使用 image.load() 操作的数据中保存图像文件?

这是我的代码,用于合并两张相同大小的图片

from PIL import Image
import random

image1 = Image.open("me.jpg")
image2 = Image.open("otherme.jpg")

im1 = image1.load()
im2 = image2.load()

width, height = image1.size

newimage = Image.new("RGB",image1.size)
newim = newimage.load()

xx = 0
yy = 0

while xx < width:
while yy < height:
if random.randint(0,1) == 1:
newim[xx,yy] = im1[xx,yy]
else:
newim[xx,yy] = im2[xx,yy]
yy = yy+1
xx = xx+1

newimage.putdata(newim)
newimage.save("new.jpg")

当我运行它时,我得到了这个错误。

Traceback (most recent call last):
File "/home/dave/Desktop/face/squares.py", line 27, in <module>
newimage.putdata(newim)
File "/usr/lib/python2.7/dist-packages/PIL/Image.py", line 1215, in putdata
self.im.putdata(data, scale, offset)
TypeError: argument must be a sequence

使用 .load() 生成的字典不是一个序列吗?我在谷歌上找不到其他人有这个问题。

最佳答案

load 返回的字典(实际上不是字典)图像中的数据。您不必使用 putdata 重新加载它。只需删除该行即可。

此外,使用 for 循环代替 while 循环:

for xx in range(0, width):
for yy in range(0, height):
if random.randint(0,1) == 1:
newim[xx,yy] = im1[xx,yy]
else:
newim[xx,yy] = im2[xx,yy]

现在不需要初始化和递增 xxyy

你甚至可以使用 itertools.product:

for xx, yy in itertools.product(range(0, width), range(0, height)):
if random.randint(0,1) == 1:
newim[xx,yy] = im1[xx,yy]
else:
newim[xx,yy] = im2[xx,yy]

关于python - 使用 PIL,如何在使用 .load() 后保存经过处理的图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9383078/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com