【问题标题】:How to save an image with the Python Image Library如何使用 Python 图像库保存图像
【发布时间】:2015-04-13 16:31:16
【问题描述】:

我是 Python 的初学者,所以这个问题可能很愚蠢,但不幸的是我自己无法弄清楚。

使用以下脚本,我想创建一个黑色图像并将其保存在以下路径下:C://Users/User/Desktop/black.png

def create_file(x=1000,y=10):
    img = Image.new('RGB', (x,y), "black") #creates a new black image
    img.save('C://Users/User/Desktop/black.png')`

现在的重点是我想用这样的函数来假装路径、文件名和文件类型:

create_image(x=1000,y=10,path=C://Users/bsimon/Desktop/,filename=black,filetype=png)`

斗争开始了:

  1. 我找不到确切的语法如何将路径(文件名、文件类型)传递给 img.save 函数

  2. 使用与 png 不同的文件类型时出现错误。 img.save('C://Users/User/Desktop/black.png') 行工作正常,但是当我尝试改用 img.save('C://Users/User/Desktop/black.bmp') 时,我使用(Blender)运行脚本的程序崩溃或陷入无限循环)。

【问题讨论】:

  • 嗯,第一个问题是您忘记了 pathfilenamefiletype 的默认值周围的引号,因此您的 def 语句可能会给您一个 NameError之类的。但是,如果您向我们展示您尝试过的代码并解释我们的问题所在,而不是试图描述它并告诉我们它不起作用,那就太好了。
  • 另外,不要试图在一个问题中问两个不相关的问题(除了碰巧发生在同一个程序中)。如果语法不正确,我不确定你是如何解决第二个问题的,但大概这意味着你可以编写一个很好的示例程序来演示第二个问题,这意味着你可以编写一个很好的单独的问题。
  • 假设path='C://Users/bsimon/Desktop'filename='black'filetype='png' 那么img.save(os.path.join(path, filename+os.extsep+filetyp) 应该适用于支持的filetyps。
  • @abarnert 谢谢你的帮助。我遇到了第二个问题,因为在之前我只使用了“严格”​​行img.save('C://Users/User/Desktop/rainbow.png'),并且它起作用了。所以我将文件的结尾更改为.bmp 以获得不同的文件类型。但我明白你要写一个单独的问题,我会这样做。 @martineau 谢谢,它有效:)
  • 关于第二个问题的简短说明:这可能是关于如何配置 PIL/Pillow 的问题(尤其是如果您实际上使用的是旧 PIL 而不是现代 PIL Pillow),所以也许一定要准确解释你是如何安装它的(例如,“我从Christoph Gohlke's Windows packages page 下载了 Pillow‑2.8.1‑cp33‑none‑win32.whl 并安装了它”或“我运行了 pip install pillow,它看起来就像我有 2.8.0" 或其他版本一样。

标签: python image python-imaging-library


【解决方案1】:

认为你要找的是这个:

def create_image(x=1000, y=10, path="C:/Users/bsimon/Desktop/",
                 filename="black", filetype="png"):
    img = Image.new('RGB', (x,y), "black")
    fullpath = os.path.join(path, filename + '.' + filetype)
    img.save(fullpath)

那么你可以这样称呼它:

create_image(filename="empty")

传递您想要的任何参数(带关键字),它会为所有其他参数使用默认值(就像您已经使用 xy 的默认值一样)。


请注意,您总是需要在 Python 中为字符串文字加上引号。你不能只写filename=black;这表示filename 的默认值是全局变量black 中的任何值(你可能没有,所以你得到一个NameError),而不是字符串"black"

接下来,要将像"black" 这样的基本文件名和像"png" 这样的扩展名组合成一个完整的文件名,Python 没有这样做的功能,所以你必须手动完成,比如filename + '.' + filetype。但是要组合像C:/Users/bsimon/Desktop/ 这样的目录名和像"black.png" 这样的文件名,Python确实有一个函数 os.path.join——你应该使用它,因为你可能会遇到一些棘手的边缘情况否则会出错。

您的问题 #2 似乎与您的问题 #1 完全无关,所以我不会在这里回答;为此创建一个单独的问题。

【讨论】:

  • 嘿,非常感谢你! Everythink现在工作正常。我的误解一方面是引号,另一方面是与完整路径结合使用 os.path.join 的语法 :) 很抱歉将 2 个问题放在一起。
  • @RothWar:没问题。这里的帮助真的很值得一读——它比大多数网站要好得多,而且他们还在不断改进它——但大多数人都是通过反复试验来学习的,只要你愿意学习(而不是为你的错误)没有人会真正嫉妒你......
猜你喜欢
  • 2011-09-20
  • 2022-09-23
  • 2020-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多