Salvarea imaginii cu PIL (Programare, Python, Bibliotecă De Imagistică Python)

Kyle Grage a intrebat.
a intrebat.

Încerc să salvez o imagine pe care am creat-o de la zero cu 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")

și primesc următoarea eroare:

Traceback (ultimul apel cel mai recent): File „”, line 1, in File „C:Python27libsite-packagesspyderlibwidgetsexternalshellsitecustomize.py”, line 523, in runfile execfile execfile(filename, namespace) File „C:Python27Libsite-packagesxypyimgmake. py”, line 125, in newImg1.PIL.save(„img1.png”) Fișier „C:Python27libsite-packagesPILImage.py”, line 512, in getattr raise AttributeError(name) AttributeError: PIL

Am nevoie de ajutor pentru a interpreta această eroare și pentru a salva imaginea în mod corespunzător ca „img1.png” (nu mă deranjează că imaginea este salvată în locul de salvare implicit).


UPDATE:

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

și primesc următoarea eroare:

… newImg1.save(„img1.png”) Fișier „C:Python27libsite-packagesPILImage.py”, linia 1439, in save save_handler(self, fp, filename) Fișier „C:Python27libsite-packagesPILPngImagePlugin. py”, linia 572, în _save ImageFile._save(im, _idat(fp, chunk), [(„zip”, (0,0)+im.size, 0, rawmode)]]) Fișier „C:Python27libsite-packagesPILImageFile.py”, linia 481, în _save e = Image._getencoder(im.mode, e, a, im.encoderconfig) Fișier „C:Python27libsite-packagesPILImage.py”, linia 399, în _getencoder return apply(encoder, (mode,) + args + extra) TypeError: este necesar un număr întreg

Comentarii

  • eliminați PIL. din newImg1.PIL.save("img1.png"), și încercați. –  > Por Srinivas Reddy Thatiparthy.
  • Unde ați învățat despre utilizarea newimg1.PIL.save()? Inventați noi metode API? –  > Por Andreas Jung.
  • Downvoted pentru utilizarea creativă a unor noi metode API sau pentru că ați încercat ceva fără să fi verificat documentația. –  > Por Andreas Jung.
  • asta a fost ultima mea încercare… Am actualizat postarea cu eroarea pe care o produce sugestia de mai sus –  > Por Kyle Grage.
3 răspunsuri
Steve Barnes

PIL nu este un atribut al lui newImg1, dar newImg1 este o instanță a PIL.Image, deci are o metodă de salvare, astfel încât următoarele ar trebui să funcționeze.

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

Rețineți că simpla apelare a unui fișier .png nu îl face unul, deci trebuie să specificați formatul fișierului ca al doilea parametru.

încercați:

type(newImg1)
dir(newImg1)

și

help(newImg1.save)

Comentarii

  • Răspuns extins. Rețineți că lista de parametri pentru salvare variază în funcție de format. –  > Por Steve Barnes.
  • Ați lăsat în continuare în .PIL în save apel care a cauzat eroarea inițială. –  > Por Mark Ransom.
  • La naiba, asta primesc pentru că am editat sub influența unui anestezic general. –  > Por Steve Barnes.
  • Mulțumesc pentru noul răspuns. Totuși, timpul a expirat, așa că am trecut PIL într-o funcție matplotlib. Din anumite motive, nu a fost nicio problemă cu salvarea în acest fel… Cred că orice funcționează. –  > Por Kyle Grage.
Sean True

Cum nu-mi place să văd întrebări fără un răspuns complet:

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

ceea ce duce la un model de test.

Pentru a utiliza adresarea de tip array pe imagine în loc de putpixel, convertiți-o într-un array numpy:

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

Bhartendu

Încercați acest lucru:

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