Python:TIFFReadDirectory 警告:带有标记的未知字段
Python: TIFFReadDirectory warning: unknown field with tag
问题
我可以在 kivy 中使用 Image()
模块加载图片。 是我安装 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)
为了澄清,none 这些警告出现在 python 日志中。这些都是在我的程序显示 TIFF 文件之前出现的所有单独的警告框。我听说一个叫做 libtiff 的库容易导致这个问题。
代码
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
- 我是 运行 通过 PyCharm 在 Windows 7
- 这些是 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++,理论上我可以控制更多的代码。这是必要的还是可能的?
在脚本的开头,我添加了
import ctypes
libbytiff = ctypes.CDLL("libtiff-5.dll")
libbytiff.TIFFSetWarningHandler.argtypes = [ctypes.c_void_p]
libbytiff.TIFFSetWarningHandler.restype = ctypes.c_void_p
libbytiff.TIFFSetWarningHandler(None)
并且警告停止了。
问题
我可以在 kivy 中使用 Image()
模块加载图片。
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)
为了澄清,none 这些警告出现在 python 日志中。这些都是在我的程序显示 TIFF 文件之前出现的所有单独的警告框。我听说一个叫做 libtiff 的库容易导致这个问题。
代码
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
- 我是 运行 通过 PyCharm 在 Windows 7
- 这些是 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++,理论上我可以控制更多的代码。这是必要的还是可能的?
在脚本的开头,我添加了
import ctypes
libbytiff = ctypes.CDLL("libtiff-5.dll")
libbytiff.TIFFSetWarningHandler.argtypes = [ctypes.c_void_p]
libbytiff.TIFFSetWarningHandler.restype = ctypes.c_void_p
libbytiff.TIFFSetWarningHandler(None)
并且警告停止了。