【发布时间】:2017-12-22 21:26:26
【问题描述】:
我想让用户通过我的 kivy 应用中的滑块来调整图像的对比度。因为我想实时修改和更新当前图像。我正在努力在 Kivy 中实施。
通过研究问题,我认为我应该使用 StringIO 和/或 ImageLoaderPyGame(这些资源在本文底部列出)。问题是我很困惑如何将它绑定到我的 kv 文件,以及如何用我当前的图像正确实现 StringIO 和 ImageLoaderPyGame。一些描述我正在尝试做的伪代码是:
Slider :
id: contrast
value: 100
min: 0
max: 199
on_value: root.update_contrast(contrast.value)
Image :
id: displayed_image
source: root.display_path
Python 代码:
def update_contrast(self, value):
buff = StringIO(self.display_image)
buff.seek(0)
img = ImageLoaderPygame(buff)
self.display_image = self.change_contrast(img, value)
这给出了以下错误:
buff = StringIO(self.display_image)
TypeError: initial_value must be str or None, not numpy.ndarray
我理解这意味着我需要使用 None 或字符串来启动 StringIO 对象,但我对如何合并当前显示图像(通过文件路径变量定义 - 我也不能用于实例化)感到困惑StringIO,我得到仍然可以理解的错误-“路径应该是字符串、字节、os.PathLike 或整数,而不是 _io.StringIO”)
总结 目前,我有一个显示图像对象,通过用户指定的文件路径定义(kv 图像标签需要显示图像)。我不知道如何让用户有效地调整显示图像的对比度。我想我需要使用 StringIO 和 ImageLoaderPyGame,但是我看不到如何将文件路径和 StringIO/ImageLoaderPyGame 绑定在一起。
注意:change_contrast与这里建议的方法类似:Change contrast of image in PIL
def change_contrast(img, level):
factor = (259 * (level + 255)) / (255 * (259 - level))
def contrast(c):
return 128 + factor * (c - 128)
return img.point(contrast)
试过
【问题讨论】:
-
您建议的方法有什么问题?
-
我已经更新了上面问题的描述。最终,我看不到如何将 StringIO/ImageLoaderPyGame 与我的应用程序显示的图像一起使用,该图像是通过文件路径定义的。
标签: python kivy python-imaging-library