problem
我可以使用以下命令加载图片Image()
kivy 中的模块。This这就是我如何安装 kivy 以便我可以查看 TIFF 文件。但现在每次加载 TIFF 图像时,我都会收到一个又一个弹出警告,从而中断程序。
TIFFReadDirectory warning:
unknown field with tag 18246 (0x4746)
TIFFReadDirectory warning:
unknown field with tag 18249 (0x4749)
TIFFReadDirectory warning:
unknown field with tag 20752 (0x5110)
TIFFReadDirectory warning:
unknown field with tag 20753 (0x5111)
TIFFReadDirectory warning:
unknown field with tag 20754 (0x5112)
TIFFReadDirectory warning:
unknown field with tag 40092 (0x9c9c)
TIFFReadDirectory warning:
unknown field with tag 40093 (0x9c9d)
TIFFReadDirectory warning:
unknown field with tag 40094 (0x9c9e)
澄清一下,这些警告都没有出现在 python 日志中。这些都是在我的程序显示 TIFF 文件之前出现的单独警告框。我听说一个名为 libtiff 的库往往会导致此问题。
code
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.clock import Clock
from kivy.uix.image import Image
class ContainerBox(BoxLayout):
def __init__(self, **kwargs):
super(ContainerBox, self).__init__(**kwargs)
self.orientation = 'vertical'
self.picture = Image(allow_stretch=True, source='..\pics\snorlax.tif')
Clock.schedule_once(lambda dt: self.add_widget(self.picture), timeout=0.1)
class SimpleImage(App):
def build(self):
return ContainerBox()
if __name__ == '__main__':
SimpleImage().run()
技术细节
- 图片可以下载here.
- 我修改了这个文件的exif数据。我可能在文件中添加了一些非标准标签。但我对 jpg 文件和 png 文件做了同样的事情。这些并没有引起像这样烦人的弹出窗口。
- 我使用的是Kivy版本1.11.1
- 据Anaconda称,虚拟环境运行的是Python 3.5.6
- 我在 Windows 7 上通过 PyCharm 运行它
- 这些是来自 python 日志的详细信息:
[INFO ] [deps ] Successfully imported "kivy_deps.glew" 0.1.12
[INFO ] [deps ] Successfully imported "kivy_deps.sdl2" 0.1.22
[INFO ] [Kivy ] v1.11.1
[INFO ] [Kivy ] Installed at "C:\Users\H\venvs\env1\lib\site-packages\kivy\__init__.py"
[INFO ] [Python ] v3.6.0 (v3.6.0:41df79263a11, Dec 23 2016, 08:06:12) [MSC v.1900 64 bit (AMD64)]
[INFO ] [Python ] Interpreter at "C:\Users\H\venvs\env1\Scripts\python.exe"
[INFO ] [Factory ] 184 symbols loaded
[INFO ] [Image ] Providers: img_tex, img_dds, img_sdl2, img_gif (img_pil, img_ffpyplayer ignored)
[INFO ] [Loader ] using a thread pool of 2 workers
[INFO ] [Text ] Provider: sdl2
[INFO ] [Window ] Provider: sdl2
[INFO ] [GL ] Using the "OpenGL" graphics system
[INFO ] [GL ] Backend used <sdl2>
[INFO ] [GL ] OpenGL version <b'4.0.0 - Build 9.18.10.3204'>
[INFO ] [GL ] OpenGL vendor <b'Intel'>
[INFO ] [GL ] OpenGL renderer <b'Intel(R) HD Graphics 4600'>
[INFO ] [GL ] OpenGL parsed version: 4, 0
[INFO ] [GL ] Shading version <b'4.00 - Build 9.18.10.3204'>
[INFO ] [GL ] Texture max size <8192>
[INFO ] [GL ] Texture max units <16>
[INFO ] [Window ] auto add sdl2 input provider
我问你的问题
是否可以抑制这些警告?我认为它们是由 kivy 调用的某个库生成的。它甚至可能是我无法编辑的预编译代码。
我花了很长时间用 Kivy 制作一个复杂的用户界面。我真的不想放弃所有这些工作。但我可能愿意将其迁移到 C++,理论上我可以控制更多代码。这有必要甚至可能吗?