이전에 이미지를 base64로 변환하고 pickle
으로 저장 한 .obj
파일이 있습니다.pickle.load - EOFError : 입력이 끊어졌습니다.
pickle
으로 .obj
파일을로드하고 코드를 base64에서 이미지로 변환하고 pygame
으로로드하려고하면 문제가 발생합니다.
이미지를로드 기능 :
def mainDisplay_load(self):
main_folder = path.dirname(__file__)
img_main_folder = path.join(main_folder, "sd_graphics")
# loadImg
self.mainTerminal = pg.image.load(path.join(img_main_folder, self.main_uncode("tr.obj"))).convert_alpha()
파일을 디코딩 기능 :
def main_uncode(self, object):
openFile = open(object, "rb")
str = pickle.load(openFile)
openFile.close()
fileData = base64.b64decode(str)
return fileData
코드가 실행될 때 내가 오류 :
str = pickle.load(openFile)
EOFError: Ran out of input
어떻게 해결할 수 있습니까?
- 파이썬 버전 : 3.6.2
- 파이 게임 버전 :
: 1.9.3import base64, pickle with open("terminal.png", "rb") as imageFile: str = base64.b64encode(imageFile.read()) print(str) file_pi = open("tr.obj","wb") pickle.dump(str,file_pi) file_pi.close() file_pi2 = open("tr.obj","rb") str2 = pickle.load(file_pi2) file_pi2.close() imgdata = base64.b64decode(str2) filename = 'some_image.jpg' # I assume you have a way of picking unique filenames with open(filename, 'wb') as f: f.write(imgdata)
업데이트 1
이 내가 .obj
파일을 만드는 데 사용되는 코드입니다
파일이 만들어지면 파일이로드되고 두 번째 이미지가 만들어집니다. 이는 이미지가 동일하거나 변환에 오류가 있는지 확인하는 것입니다.
이미지에서 볼 수 있듯이 코드를 사용하여 이미지를로드했지만 저장하는 대신 pygame
에로드됩니다. 그리고 그것이 실수가 일어나는 곳입니다.
업데이트 2
나는 결국 그것을 해결할 수있었습니다. 메인 코드에서
: 라이브러리에서def mainDisplay_load(self):
self.all_graphics = pg.sprite.Group()
self.graphics_menu = pg.sprite.Group()
# loadImg
self.img_mainTerminal = mainGraphics(self, 0, 0, "sd_graphics/tr.obj")
포함하는 그래픽 클래스 : 나는 그런 일을해야하는 이유에 대한 질문에 대한
import pygame as pg
import base64 as bs
import pickle as pk
from io import BytesIO as by
from lib.setting import *
class mainGraphics(pg.sprite.Sprite):
def __init__(self, game, x, y, object):
self.groups = game.all_graphics, game.graphics_menu
pg.sprite.Sprite.__init__(self, self.groups)
self.game = game
self.object = object
self.outputGraphics = by()
self.x = x
self.y = y
self.eventType()
self.rect = self.image.get_rect()
self.rect.x = self.x * tilesizeDefault
self.rect.y = self.y * tilesizeDefault
def eventType(self):
openFile = open(self.object, "rb")
str = pk.load(openFile)
openFile.close()
self.outputGraphics.write(bs.b64decode(str))
self.outputGraphics.seek(0)
self.image = pg.image.load(self.outputGraphics).convert_alpha()
, 그것은 간단하다
any attacker with sufficient motivation can still get to it easily
파이썬은 무료이며 공개되어 있습니다.
한편으로는 의도적으로 숨겨진 데이터를 수정 및 복구하는 사람이 있습니다. 그러나 파이썬이 더 복잡하고 보호 된 언어와 같이 공개 언어 인 경우, 동기 부여가 가장 큰 것은 게임이나 프로그램을 해독하고 동일한 데이터를 검색 할 수 있습니다.
반면에 우리에게는 기초 만 알고있는 사람이나 그렇지 않은 사람이 있습니다. 언어에 대해 모르고 파일을 해독하지 않고도 파일에 액세스 할 수없는 사람.
필자는 내 관점에서 보면 파일을 동기 부여 된 사람으로부터 보호 할 필요가 없음을 이해할 수 있습니다. 보다 복잡하고 보호 된 언어를 사용하더라도 동기 부여를받은 사람은 자신이 원하는 것을 얻을 수 있습니다. 보호는 언어에 대한 지식이없는 사람들에 대해 사용됩니다.
'_load' 함수에 오류가있는 것 같습니다. 압축되지 않은 이미지 데이터를 폴더 이름과 연결하고 있습니까? 또한 도움이 필요한 경우 설명하는 대신 이러한 파일을 만드는 데 사용 된 코드를 게시 할 수 있습니다. 그렇듯이 상당히 번거로운 단계가있는 것처럼 보입니다. – jsbueno
BTW, 당신이보고 한 오류는 위에서 언급 한 부분 앞에서 발생합니다. 오류도 마찬가지입니다. 문제는 파일을 만드는 중에 발생하는 것 같습니다. – jsbueno
.obj 파일을 만드는 데 사용하는 코드를 추가했습니다. – BlackFenix06