Ich möchte Bilder von der Server-Seite und zeigen sie auf der Client-Seite von Pygame und nicht jeden Frame auf der Festplatte speichern. Bilder werden mit base64 kodiert und dekodiert. Wenn Daten von der anderen Seite empfangen werden, wird es zum PIL-Bild dekodiert. Dann kann ich es erfolgreich in eine temporäre Datei speichern, mit Pygame öffnen und anzeigen. aber ich möchte es direkt mit image.tostring() tun, aber noting wird angezeigt Ich bin auch bemerkt, dass wenn ich in temporäre Datei Bilder Attribute speichern sind: Oberfläche (32x32x32 SW)konvertieren pil gif Bild zu pygame Oberfläche ohne es auf der Festplatte zu speichern
und wenn ich es direkt tun: Fläche (32x32x8 SW)
dank:
import base64
from io import BytesIO
import pygame
from PIL import Image
def gif__to_string(filePath):
gif_file = filePath
content = base64.encodestring(open(gif_file, 'rb').read())
return content
def string_to_gif(imageStr):
gif_image = Image.open(BytesIO(base64.b64decode(imageStr)))
return gif_image
def show_gif_working(im):
black = (0, 0, 0)
white = (255, 255, 255)
pygame.init()
width = 350;
height = 400
imageX = 200; # x coordnate of image
imageY = 30; #
screen = pygame.display.set_mode((width, height))
screen.fill(black)
im.save('temp.gif')
surface = pygame.image.load("temp.gif").convert()
screen.blit(surface, (imageY, imageY))
pygame.display.flip()
def show_gif_not_working(im):
black = (0, 0, 0)
white = (255, 255, 255)
pygame.init()
width = 350;
height = 400
imageX = 200; # x coordnate of image
imageY = 30; #
screen = pygame.display.set_mode((width, height))
screen.fill(black)
mode = im.mode
size = im.size
data = im.tostring()
surface1 = pygame.image.fromstring(data, size, mode)
screen.blit(surface1, (imageX, imageY))
pygame.display.flip()
def main():
content = gif__to_string('face5.gif')
print content
myImage = string_to_gif(content)
# show_gif_working(myImage)
show_gif_not_working(myImage)
main()
Werfen Sie einen Blick [hier] (https://Stackoverflow.com/a/30727425/142637) für ein Beispiel. – sloth