私は.obj
ファイルを持っています。以前はbase64に画像を変換してpickle
で保存しました。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
どうすれば修正できますか?
- Pythonのバージョン:3.6.2
- pygameのバージョン:
: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
ファイルを作成するために使用されるコードであります
ファイルが作成されると、ファイルがロードされ、2番目のイメージが作成されます。これは、画像が同じか、変換にエラーがあるかどうかを確認するためです。
ご覧のとおり、コードの一部を使用して画像をロードしましたが、保存する代わりに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
Pythonは無料で公開されています。
一方で、意図的に隠れデータを修正して回復する人がいます。しかし、Pythonがより複雑で保護された言語のようにオープンな言語である場合、最も意欲的なのは、ゲームやプログラムを解読して同じデータを取得することができます。
一方、私たちには、基礎のみを知っている人、あるいはそれ以外の人がいます。言語について詳しく知らずにファイルにアクセスできない人、またはファイルを解読する人。
私の視点から見ると、ファイルをデコードすることは、動機付けられた人から保護する必要はありません。より複雑で保護された言語でさえ、動機づけられた人は彼が望むものを手に入れることができるからです。保護は、言語を知らない人に対して使用されます。
'_load'関数にエラーがあるようです - デコードされていないイメージデータをフォルダ名と連結していますか? また、意味のあるヘルプが必要な場合は、説明するだけでなく、これらのファイルの作成に使用したコードを投稿することもできます。 これは、かなり冗長な手順があるようです。 – jsbueno
ところで、あなたが報告したエラーは、上記の部分の前に起こります。これもエラーになります。問題は、ファイルの作成中であるように見えます。 – jsbueno
.objファイルの作成に使用するコードを追加しました。 – BlackFenix06