Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Saving Image with PIL

I am trying to save an image that I created from scratch with 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")

and I get the following error:

Traceback (most recent call last): File "", line 1, in File "C:\Python27\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 523, in runfile execfile(filename, namespace) File "C:\Python27\Lib\site-packages\xy\pyimgmake.py", line 125, in newImg1.PIL.save("img1.png") File "C:\Python27\lib\site-packages\PIL\Image.py", line 512, in getattr raise AttributeError(name) AttributeError: PIL

I need help interpreting this error and how to save the image properly as "img1.png" (I am fine with the image being saved to the default save spot).


UPDATE:

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

and I get the following error:

... newImg1.save("img1.png") File "C:\Python27\lib\site-packages\PIL\Image.py", line 1439, in save save_handler(self, fp, filename) File "C:\Python27\lib\site-packages\PIL\PngImagePlugin.py", line 572, in _save ImageFile._save(im, _idat(fp, chunk), [("zip", (0,0)+im.size, 0, rawmode)]) File "C:\Python27\lib\site-packages\PIL\ImageFile.py", line 481, in _save e = Image._getencoder(im.mode, e, a, im.encoderconfig) File "C:\Python27\lib\site-packages\PIL\Image.py", line 399, in _getencoder return apply(encoder, (mode,) + args + extra) TypeError: an integer is required

like image 420
Kyle Grage Avatar asked Oct 29 '13 06:10

Kyle Grage


People also ask

How do I save a picture from a PIL?

Saving an image can be achieved by using . save() method with PIL library's Image module in Python.

Does PIL work with JPG?

PIL is a free library that adds image processing capabilities to your Python interpreter, supporting a range of image file formats such as PPM, PNG, JPEG, GIF, TIFF and BMP.

What is PIL image format?

Python Imaging Library is a free and open-source additional library for the Python programming language that adds support for opening, manipulating, and saving many different image file formats. It is available for Windows, Mac OS X and Linux. The latest version of PIL is 1.1.


3 Answers

PIL isn't an attribute of newImg1 but newImg1 is an instance of PIL.Image so it has a save method, thus the following should work.

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

Note that just calling a file .png doesn't make it one so you need to specify the file format as a second parameter.

try:

type(newImg1) dir(newImg1) 

and

help(newImg1.save) 
like image 194
Steve Barnes Avatar answered Oct 05 '22 20:10

Steve Barnes


As I hate to see questions without a complete answer:

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")

which yields a test pattern.

To use array style addressing on the image instead of putpixel, convert to a numpy array:

import numpy as np
pixels = np.asarray(newImg1)
pixels.shape, pixels.dtype
-> (512, 512, 3), dtype('uint8')
like image 24
Sean True Avatar answered Oct 05 '22 18:10

Sean True


Try this:

newImg1 = pimg.as_PIL('RGB', (512,512))
...
newImg1.save('Img1.png')
like image 25
Bhartendu Avatar answered Oct 05 '22 18:10

Bhartendu