2015-11-20 1 views
0

Je veux convertir une chaîne qui contient les données d'une image PNG dans l'image à nouveau et blit dans Pyglet. Mais je ne l'ai pas fait. Afficher cette erreur:Convertir une chaîne dans Image et blit dans Pyglet

Erreur:

File "a14.py", line 52, in __init__ 
     self.sprite = pyglet.sprite.Sprite(img, 0, 0) 
    File "/usr/local/lib/python3.4/dist-packages/pyglet-1.2.4-py3.4.egg/pyglet/sprite.py", line 234, in __init__ 
     AttributeError: 'bytes' object has no attribute 'get_texture' 

code: ------------------------------- ----------------------------------

imageData:

8950 4e47 0d0a 1a0a 0000 000d 4948 4452 
0000 0010 0000 001c 0806 0000 0068 313f 
1a00 0000 0473 4249 5408 0808 087c 0864 
8800 0002 0249 4441 5438 8d95 552d 8cdb 
3018 7dad 0a02 47a6 2bec 58d8 32b4 c2b0 
8d4c 0a8c 74c4 5649 d819 e6c0 a181 05e6 
5848 1593 d319 562a c958 60c7 3c66 5898 
69a4 d0ac 0349 9c38 3fd5 ee49 561c e77b 
ef7b 9fe3 2f59 ecf3 fc8a 191c 291d ad7d 
cb73 eb7e 758b 287c 562f 6400 a27a 1a52 
6a89 8c04 8e94 1a62 515d e0c6 0a1b 6c81 
2241 e145 a364 8b7e 092d b9a8 2e00 8040 
f1b9 eab0 6f5c 2ca7 c881 e237 c900 b06b 
ca5c b664 e212 437e 0b96 730f 348b a0b5 
ae47 6f3e 2c61 0500 8245 0009 e178 be21 
b770 1c07 5a96 f555 6b43 340e ee7f ff42 
5a1d c616 4838 e9ec fed3 07fc fdf9 3851 
0217 5dd6 34ab 27ea 54bb e102 5a96 803a 
8d04 572f 1f3f 83f5 ea76 d2ac 0e06 e078 
3e92 700d b60e ac04 169a 7370 0570 d52c 
32a3 5dbb 35f6 797e 5d36 22b6 7500 5a96 
c6c9 4c62 0083 93b8 a3b4 b33c 83b4 3ae0 
fd97 1fdd 1e0c 558f 94a2 70eb f7cd 9b43 
b50d d726 a64f 1e09 f41b 292c 5310 9740 
7905 183f 770e c8c6 12b1 7a81 b8c4 3c10 
3e1b 9101 80f1 f3cc 3968 d076 e2ff c208 
482f 3135 b722 aefc 8a94 6c2c c2b0 046b 
0fa4 9780 cbd8 7426 571c 5040 8a4e 84f1 
335e 5e5f a705 36c1 3b48 d422 2d3c 7542 
db83 a590 c8b6 299e 1eee a605 5a91 4b90 
c10f bd9b b5b7 307b f0f4 7087 f3a1 dbc0 
5248 33e7 6189 5248 9c0f 172b fba4 833e 
fa22 7358 0cff 0bdf 9fff cc06 0fb3 4f3a 
88dc 7414 148b 0a49 b8c6 8e56 e32f d254 
f010 5a31 c4a2 8256 cc7c 8d67 1d4c 89c4 
a276 e54c b8fb 0775 650d 8c04 f5e9 f200 
0000 0049 454e 44ae 4260 82 

le code que j'ai essayé:

import pyglet 
import binascii 

class Window(pyglet.window.Window): 

    def __init__(self, *args, **kwargs): 
     super(Window, self).__init__(*args, **kwargs) 

     imgData = #ABOVE /\, IN MY CODE IMAGEDATA IS HERE 

     img = "".join(imgData.split()) 

     img = binascii.unhexlify(img) 

     self.sprite = pyglet.sprite.Sprite(img, 0, 0) 

    def on_draw(self): 
     self.clear() 
     self.sprite.draw() 

def main(): 
    window = Window(width=640, height=480, caption='Pyglet') 
    pyglet.app.run() 

if __name__ == '__main__': 
    main() 

Il existe un moyen de le faire, si oui, comment? Est-ce que quelqu'un peut m'aider?

+0

image PNG est un format de fichier spécialisé (comme JPG, GIF, BMP) avec des données compressées. 'Sprite' attend' class' avec des données d'image (sans compression), pas 'bytes array'. – furas

Répondre

1

Sprite attend image objet pas bytes array. Vous pouvez utiliser io.BytesIO pour utiliser des octets en tant qu'objet de fichier, puis le charger à l'aide de image.load().

exemple travaillant à plein

import pyglet 
import binascii 
import io 

imgData = '''8950 4e47 0d0a 1a0a 0000 000d 4948 4452 
0000 0010 0000 001c 0806 0000 0068 313f 
1a00 0000 0473 4249 5408 0808 087c 0864 
8800 0002 0249 4441 5438 8d95 552d 8cdb 
3018 7dad 0a02 47a6 2bec 58d8 32b4 c2b0 
8d4c 0a8c 74c4 5649 d819 e6c0 a181 05e6 
5848 1593 d319 562a c958 60c7 3c66 5898 
69a4 d0ac 0349 9c38 3fd5 ee49 561c e77b 
ef7b 9fe3 2f59 ecf3 fc8a 191c 291d ad7d 
cb73 eb7e 758b 287c 562f 6400 a27a 1a52 
6a89 8c04 8e94 1a62 515d e0c6 0a1b 6c81 
2241 e145 a364 8b7e 092d b9a8 2e00 8040 
f1b9 eab0 6f5c 2ca7 c881 e237 c900 b06b 
ca5c b664 e212 437e 0b96 730f 348b a0b5 
ae47 6f3e 2c61 0500 8245 0009 e178 be21 
b770 1c07 5a96 f555 6b43 340e ee7f ff42 
5a1d c616 4838 e9ec fed3 07fc fdf9 3851 
0217 5dd6 34ab 27ea 54bb e102 5a96 803a 
8d04 572f 1f3f 83f5 ea76 d2ac 0e06 e078 
3e92 700d b60e ac04 169a 7370 0570 d52c 
32a3 5dbb 35f6 797e 5d36 22b6 7500 5a96 
c6c9 4c62 0083 93b8 a3b4 b33c 83b4 3ae0 
fd97 1fdd 1e0c 558f 94a2 70eb f7cd 9b43 
b50d d726 a64f 1e09 f41b 292c 5310 9740 
7905 183f 770e c8c6 12b1 7a81 b8c4 3c10 
3e1b 9101 80f1 f3cc 3968 d076 e2ff c208 
482f 3135 b722 aefc 8a94 6c2c c2b0 046b 
0fa4 9780 cbd8 7426 571c 5040 8a4e 84f1 
335e 5e5f a705 36c1 3b48 d422 2d3c 7542 
db83 a590 c8b6 299e 1eee a605 5a91 4b90 
c10f bd9b b5b7 307b f0f4 7087 f3a1 dbc0 
5248 33e7 6189 5248 9c0f 172b fba4 833e 
fa22 7358 0cff 0bdf 9fff cc06 0fb3 4f3a 
88dc 7414 148b 0a49 b8c6 8e56 e32f d254 
f010 5a31 c4a2 8256 cc7c 8d67 1d4c 89c4 
a276 e54c b8fb 0775 650d 8c04 f5e9 f200 
0000 0049 454e 44ae 4260 82''' 

class Window(pyglet.window.Window): 

    def __init__(self, *args, **kwargs): 
     super(Window, self).__init__(*args, **kwargs) 

     img = "".join(imgData.split()) 

     img = binascii.unhexlify(img) 

     file_object = io.BytesIO(img) 

     img = pyglet.image.load("noname.png", file=file_object) 

     self.sprite = pyglet.sprite.Sprite(img, 0, 0) 

    def on_draw(self): 
     self.clear() 
     self.sprite.draw() 

def main(): 
    window = Window(width=640, height=480, caption='Pyglet') 
    pyglet.app.run() 

if __name__ == '__main__': 
    main()