ここで働いている例:ここでは
import io
import zipfile
from kivy.core.image import Image as CoreImage
from kivy.uix.image import Image
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
class testApp(App):
def get_image_from_memory(self):
with io.BytesIO(open("archer_F_idle.zip", "rb").read()) as f:
imgzip = f.read()
print(imgzip)
zipped_imgs = zipfile.ZipFile(f)
print(zipped_imgs, zipped_imgs.namelist(),zipped_imgs.filename)
return Image(source=zipped_imgs)
def build(self):
self.b = BoxLayout()
self.b.add_widget(self.get_image_from_memory())
return self.b
if __name__ == '__main__':
testApp().run()
は次のエラーです。
import io
import zipfile
from kivy.core.image import Image as CoreImage
from kivy.uix.image import Image
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
class testApp(App):
def get_image_from_memory(self):
with zipfile.ZipFile("C:/Users/gmn/Downloads/Cover.zip") as myzip:
with myzip.open('Cover.jpg') as myfile:
ci = CoreImage(io.BytesIO(myfile.read()), ext="jpg")
return Image(texture=ci.texture)
def build(self):
self.b = BoxLayout()
self.b.add_widget(self.get_image_from_memory())
return self.b
if __name__ == '__main__':
testApp().run()
UPD:
Zipファイルが1枚のまたは複数の画像が含まれている必要があり、あなたがあなたにジップファイル名と画像EXC /ファイル名を変更していることを確認します。
import io
import zipfile
from itertools import cycle
from kivy.clock import Clock
from kivy.core.image import Image as CoreImage
from kivy.uix.image import Image
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.properties import StringProperty
class ZipAnimationImage(Image):
zip_source = StringProperty('')
def __init__(self, **kwargs):
self._cycle = None
super(Image, self).__init__(**kwargs)
Clock.schedule_interval(self._update, 1.0)
def _update(self, *args):
if self._cycle:
self.texture = next(self._cycle).texture
def on_zip_source(self, *args):
cis = []
with zipfile.ZipFile(self.zip_source) as z:
names = z.namelist()
for name in names:
ext = name.split('.')[-1]
with z.open(name) as f:
ci = CoreImage(io.BytesIO(f.read()), ext=ext)
cis.append(ci)
self._cycle = cycle(cis) if cis else None
class testApp(App):
def build(self):
self.b = BoxLayout()
self.b.add_widget(ZipAnimationImage(zip_source='C:/Users/gmn/Downloads/test.zip'))
return self.b
if __name__ == '__main__':
testApp().run()
ミハイル、お返事ありがとうございました。はい、それは間違いなく動作しますが、Image Widgetに.zipファイルを直接フィードし、アニメーションのようなすべてのイメージを循環させるのと同じ方法で、複数のイメージを読み込む方法を変更するにはどうすればよいでしょうか?私は、さまざまなイメージを含むzipファイルの複数のバリエーションを読み込み、必要に応じて呼び出すことを計画しています。 –
@KevinAlvarezプロトタイプで答えを更新しました。あなたを正しく理解すれば、あなたがしたいことをします。 –
ありがとうございます!これは正確に動作します、私は座って、起こっているすべてを消化する必要があります。解決策に関する質問があれば、私はあなたを迎えてくれるでしょう。そうでなければ、私の質問に答えました! –