«Путь к файлу содержит нулевые символы» при загрузке файла из .zip с pygame - PullRequest
0 голосов
/ 12 сентября 2018

Я создаю игру, которая включает в себя изображения, текстовые и аудиофайлы, расположенные в защищенном паролем .zip.Я пытаюсь использовать pygame.image.load и показать изображение так:

from zipfile import ZipFile
import pygame
import pyganim
import sys

pygame.init()
root = pygame.display.set_mode((320, 240), 0, 32)
pygame.display.set_caption('image load test')



archive = ZipFile("spam.zip", 'r')
mcimg = archive.read("a.png", pwd=b'onlyforthedev')

mc = pygame.image.load(mcimg)

anime = pyganim.PygAnimation([(mcimg, 100),
                              (mcimg, 100)])
anime.play()

while True:
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()


    windowSurface.fill((100, 50, 50))
    anime.blit(root, (100, 50))
    pygame.display.update()

Это ошибка, которую я получаю из этого:

Traceback (most recent call last):
  File "C:\Users\admin\Desktop\VERY IMPORTANT FOR GAME DISTRIBUTION\few.py", 
  line 41, in <module>
  mc = pygame.image.load(mcimg)
  pygame.error: File path '�PNG


  ' contains null characters

1 Ответ

0 голосов
/ 12 сентября 2018

Функция pygame.image.load может загрузить изображение из источника файла. Вы можете передать либо имя файла, либо файлоподобный объект Python.

Но, на самом деле, вы даете байты изображения.

Чтобы исправить это, вы можете заключить свои байты в экземпляр io.Bytes и использовать его в качестве файлового объекта:

import zipfile
import io

with zipfile.ZipFile("spam.zip", 'r') as archive:
    mcimg = archive.read("a.png", pwd=b'onlyforthedev')

mc = pygame.image.load(io.BytesIO(mcimg))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...