Saving Image with PIL
Question:
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:Python27libsite-packagesspyderlibwidgetsexternalshellsitecustomize.py”,
line 523, in runfile
execfile(filename, namespace) File “C:Python27Libsite-packagesxypyimgmake.py”, line 125, in
newImg1.PIL.save(“img1.png”) File “C:Python27libsite-packagesPILImage.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:Python27libsite-packagesPILImage.py”, line 1439, in save
save_handler(self, fp, filename) File “C:Python27libsite-packagesPILPngImagePlugin.py”, line 572, in
_save
ImageFile._save(im, _idat(fp, chunk), [(“zip”, (0,0)+im.size, 0, rawmode)]) File “C:Python27libsite-packagesPILImageFile.py”,
line 481, in _save
e = Image._getencoder(im.mode, e, a, im.encoderconfig) File “C:Python27libsite-packagesPILImage.py”, line 399, in _getencoder
return apply(encoder, (mode,) + args + extra) TypeError: an integer is required
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)
Try this:
newImg1 = pimg.as_PIL('RGB', (512,512))
...
newImg1.save('Img1.png')
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')
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:Python27libsite-packagesspyderlibwidgetsexternalshellsitecustomize.py”,
line 523, in runfile
execfile(filename, namespace) File “C:Python27Libsite-packagesxypyimgmake.py”, line 125, in
newImg1.PIL.save(“img1.png”) File “C:Python27libsite-packagesPILImage.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:Python27libsite-packagesPILImage.py”, line 1439, in save
save_handler(self, fp, filename) File “C:Python27libsite-packagesPILPngImagePlugin.py”, line 572, in
_save
ImageFile._save(im, _idat(fp, chunk), [(“zip”, (0,0)+im.size, 0, rawmode)]) File “C:Python27libsite-packagesPILImageFile.py”,
line 481, in _save
e = Image._getencoder(im.mode, e, a, im.encoderconfig) File “C:Python27libsite-packagesPILImage.py”, line 399, in _getencoder
return apply(encoder, (mode,) + args + extra) TypeError: an integer is required
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)
Try this:
newImg1 = pimg.as_PIL('RGB', (512,512))
...
newImg1.save('Img1.png')
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')