无法在Python中保存图像

问题描述 投票:0回答:1

我正在用Python制作一个控制台录音机。 但是,当它尝试将 60.png 保存在 FRAMES 目录中时,它失败并出现错误。 这是我的代码:

import os
from PIL import Image, ImageDraw
c = 1
def save():
    global c
    m = Image.new("RGB",(400,200),"#004c66")
    draw = ImageDraw.Draw(m)
    draw.text((5,5),text=output,fill=(255,255,255))
    with open(f"FRAMES/{c}.png","a+b") as fp:
        m.save(fp,"PNG")
    c+=1
output = 'Welcome to movieconsole!\nVersion: 0.1\n'
save()
with open('commands.txt') as fp:
  for i in fp.read().splitlines():
    if len(os.getcwd()) < 30:
        output += os.getcwd() + '$ '
    else:
        output += os.getcwd()[0:30] + '...$ '
    save()
    for l in i:
        output += l
        save()
    output += '\n'
    a = os.popen(i)
    for p in a.read().splitlines():
        output+=p+"\n"
        save()
        if len(output.splitlines()) > 12:
            output = '\n'.join(output.splitlines()[1::])
    if i[0:2] == 'cd':
        os.chdir(' '.join(i.split()[1::]))
    if len(output.splitlines()) > 12:
        output = '\n'.join(output.splitlines()[1::])
print(output)

错误是:

FileNotFoundError: [Errno 2] No such file or directory: 'FRAMES/60.png'

python image python-imaging-library
1个回答
0
投票

我认为问题在于您在程序运行时更改目录(响应

cd
作为输入)。然后,当您尝试在名为
FRAMES
的子目录中写入时,它就不再存在了。

我建议您使用

Pathlib
(它是标准库的一部分,不需要安装)并在程序启动时创建到输出目录的absolute路径,然后在构造输出文件名时使用它:

from pathlib import Path

# Near start of code... create output dir and save absolute path
out = Path('FRAMES').absolute()
out.mkdir(exist_ok = True)

然后,稍后,当您想要写入第 60 帧时:

i = 60
filepath = out / f'{i}.png'
image.save(str(filepath))

请注意,绝对路径是以斜杠开头的,并且不受目录更改的影响。相反,相对路径是相对于当前工作目录表示的,因此它取决于您当前在文件系统中的位置。

© www.soinside.com 2019 - 2024. All rights reserved.