在python中将两张照片合并为一张照片

2024-04-19 11:21:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试创建新的照片,每一张都是从24张照片的列表中并排拍摄的照片。我最终想要每一对组合(共276对)在一张新照片上。不过,目前我只是想让程序把两张照片粘贴到一张新照片上,但我得到了一个错误。代码和错误如下:

from PIL import Image
import os
import itertools

plist = os.listdir('image_resize')
for p in plist[:]:
    if not(p.endswith('.png')):
        plist.remove(p)
print(plist)

os.chdir('C:\Python35-32\Scripts\image_resize')

def get_pics(x,y):
    w = os.getcwd()
    op = plist[x]
    op2 = plist[y]
    pic = Image.open(os.path.join(w,op))
    pic2 = Image.open(os.path.join(w,op2))
    pic.copy()
    pic2.copy()
    new_image = Image.new("RGB", (1280,400))
    new_image.save('conjoined_pics', format='PNG')
    pic.paste(Image.open('new_image'), (20,400,620,0))
    pic2.paste(Image.open('new_image'), (660,400,1260,0))


get_pics(0,1)       


#def get_permutations():
    #newlist = list(itertools.permutations(plist, 2))
    #print (newlist)

以下是错误消息:

^{pr2}$

Tags: imageimportnewgetos错误open照片
2条回答

错误消息准确地说明了错误所在:您试图打开的图像文件不存在。我将尝试在使用os.path.join(w, op)行之前打印它的值,看看它是否有意义。在

我建议你使用两个全局变量来代替文件名。在

编辑:我不认为这与处理图像有关。这可能是一些简单的错误,你只是没有注意到。在您的函数中尝试如下操作:

fn = os.path.join(w, op)
print(fn, os.path.exists(fn))
pic = Image.open(fn)

我再次查看错误消息,似乎您必须在代码的"os.path.join(...)"部分加上引号。你问题中的代码就是你正在运行的代码吗?在

编辑:建议编辑

^{pr2}$

为了好玩,也许为了测试您的Python,您可以使用GNU parallel和ImageMagick在一个一行程序中并行地生成所有图像(假设您的24个图像名为“image??”)????。巴布亚新几内亚”

parallel '[ "{1}" != "{2}" ] && convert {1} {2} +append result{#}.png' ::: image* ::: image*

如果您想了解它是如何工作的,请在命令行上的 dry-run后添加parallel,它将显示它将执行的操作:

^{pr2}$

相关问题 更多 >