[Python] PIL save

Dario Bertini berdario a gmail.com
Ven 27 Dic 2013 13:37:12 CET


2013/12/26 Daniele Zambelli <daniele.zambelli at gmail.com>:
>  from PIL.Image import open as imopen
>
> [...]
>
>   def save(self, filename):
>         """Save graphic window to png or ps file."""
>         nfps = filename+'.ps'
>         nfpng = filename+'.png'
>         print(nfps, nfpng)
>         self._canvas.postscript(file=nfps)
>         imopen(nfps).save(nfpng)
>         os.remove(nfps)
>
> Chiamo il metodo con il comando:
>
>     [...]
>     p.save('esagono')
>     [...]
>
> (dove "p" è un oggetto della classe che contiene "save")
> quando il metodo viene eseguito sotto Python 2.7 funziona, qundo lo
> eseguo sotto Python 3.3 ottengo:
>
> TypeError: must be str, not bytes


Sembra un bug di Pillow...

os.popen apre un fd che s'aspetta di ricevere testo unicode (così sui
2 piedi non ho trovato l'opzione per aprirlo come binary)

subprocess invece si aspetta di ricevere un buffer (bytes support
l'interfaccia buffer, le unicode str no)

ho provato a modificare al volo il codice di Pillow 2.2.2 nel mio
site-packages e sembra funzionare con la patch allegata

per applicarla, vai nel tuo PIL in site-packages ( per esempio, `cd
(pew sitepackages_dir)/PIL` )
ed esegui

patch -p0 EpsImagePlugin.py eps.patch

(magari cancella anche __pycache__ )

la patch è abbastanza grezza, il codice potrebbe beneficiare di un po'
di refactoring

avrei anche dovuto controllare che il bug non sia già stato riportato
(e magari fixato in master), ma dove sono ora al momento la
connessione fa un po' schifio

(altrimenti, una volta ripulita la patch, bisognerebbe mandarla upstream)
-------------- next part --------------
A non-text attachment was scrubbed...
Name: eps.patch
Type: text/x-patch
Size: 636 bytes
Desc: not available
URL: <http://lists.python.it/pipermail/python/attachments/20131227/17faf7de/attachment.bin>


Maggiori informazioni sulla lista Python