使用PIL保存图像

时间:2013-10-29 06:18:12

标签: python python-imaging-library

我正在尝试使用PIL

保存我从头开始创建的图像
newImg1 = PIL.Image.new('RGB', (512,512))
pixels1 = newImg1.load()

...

for i in range (0,511):
    for j in range (0,511):
       ...
            pixels1[i, 511-j]=(0,0,0)
        ...

newImg1.PIL.save("img1.png")

我收到以下错误:

  

Traceback(最近一次调用最后一次):文件“”,第1行,in      文件   “C:\ Python27 \ LIB \站点包\ spyderlib \部件\ externalshell \ sitecustomize.py”   第523行,在runfile中       execfile(filename,namespace)文件“C:\ Python27 \ Lib \ site-packages \ xy \ pyimgmake.py”,第125行,in       newImg1.PIL.save(“img1.png”)文件“C:\ Python27 \ lib \ site-packages \ PIL \ Image.py”,第512行, getattr       raise AttributeError(name)AttributeError:PIL

我需要帮助解释此错误以及如何将图像正确保存为“img1.png”(我很好将图像保存到默认保存点)。


更新:

from PIL import Image as pimg
...
newImg1 = pimg.new('RGB', (512,512))
...
newImg1.save("img1.png")

我收到以下错误:

  

... newImg1.save(“img1.png”)文件   保存中的“C:\ Python27 \ lib \ site-packages \ PIL \ Image.py”,第1439行       save_handler(self,fp,filename)文件“C:\ Python27 \ lib \ site-packages \ PIL \ PngImagePlugin.py”,第572行,   _保存       ImageFile._save(im,_idat(fp,chunk),[(“zip”,(0,0)+ im.size,0,rawmode)])文件“C:\ Python27 \ lib \ site-packages \ PIL \ ImageFile.py”   第481行,在_save中       e = Image._getencoder(im.mode,e,a,im.encoderconfig)_getencoder中的文件“C:\ Python27 \ lib \ site-packages \ PIL \ Image.py”,第399行       return apply(encoder,(mode,)+ args + extra)TypeError:需要一个整数

3 个答案:

答案 0 :(得分:29)

PIL不是newImg1的属性,但newImg1是PIL.Image的一个实例,因此它有一个保存方法,因此以下内容应该有效。

newImg1.save("img1.png","PNG")

请注意,只调用文件.png不会使其成为一个,因此您需要将文件格式指定为第二个参数。

尝试:

type(newImg1)
dir(newImg1)

help(newImg1.save)

答案 1 :(得分:3)

试试这个:

newImg1 = pimg.as_PIL('RGB', (512,512))
...
newImg1.save('Img1.png')

答案 2 :(得分:0)

我讨厌看到没有完整答案的问题:

from PIL import Image
newImg1 = Image.new('RGB', (512,512))
for i in range (0,511):
    for j in range (0,511):
        newImg1.putpixel((i,j),(i+j%256,i,j))
newImg1.save("img1.png")

这会产生一个测试模式。

要在图像上使用数组样式寻址而不是putpixel,请转换为numpy数组:

import numpy as np
pixels = np.asarray(newImg1)
pixels.shape, pixels.dtype
-> (512, 512, 3), dtype('uint8')