Kivy - 图片



能够显示图片是任何GUI应用程序的基本要求。Kivy框架包含Image组件作为图像容器。它能够加载来自png、jpg和GIF文件的图像数据。对于SVG文件,你可能需要使用名为Svg的另一个组件。

Kivy包含两个图像组件——ImageAsyncImage。它们定义在"kivy.uix.image"模块中。

Image组件用于加载本地机器上可用的图像文件。

from kivy.uix.image import Image
img = Image(source = 'logo.png')

要从任何外部来源加载图像,你需要使用AsyncImage组件。AsyncImage类是Image类的子类。

from kivy.uix.image import AsyncImage
img = AsyncImage(source = 'http://xyz.com/logo.png')

如果你需要通过从URL检索图像来显示它们,AsyncImage会在后台线程中执行此操作,而不会阻塞你的应用程序。

Image类定义了以下属性:

  • source - 图像的文件名/来源。source是一个StringProperty,默认为None。

  • fit_mode - 如果图像的大小与组件的大小不同,此属性决定如何调整图像大小以适应组件框。

可用选项

  • scale-down - 对于大于Image组件尺寸的图像,图像将缩小以适应组件框,保持其纵横比且不会拉伸。如果图像的大小小于组件,它将以其原始大小显示。

  • fill - 图像会被拉伸以填充组件,而不管其纵横比或尺寸如何。如果图像的纵横比与组件不同,此选项可能会导致图像变形。

  • contain - 图像将调整大小以适应组件框,保持其纵横比。如果图像大小大于组件大小,行为将类似于“scale-down”。但是,如果图像大小小于组件大小,与“scale-down”不同,图像将调整大小以适应组件。

  • cover - 图像将水平或垂直拉伸以填充组件框,保持其纵横比。如果图像的纵横比与组件不同,则图像将被裁剪以适应。

  • texture - 图像的纹理对象。纹理表示原始加载的图像纹理。根据fit_mode属性,它在渲染期间被拉伸和定位。

  • texture_size - 图像的纹理大小。这表示原始加载的图像纹理大小。

  • color - 图像颜色,格式为(r, g, b, a)。此属性可用于“着色”图像。但是,如果源图像不是灰色/白色,则颜色不会按预期工作。

  • image_ratio - 一个只读属性,返回图像的比例(宽度/高度)。

  • reload() - 从磁盘重新加载图像。这有助于在图像内容更改时从磁盘重新加载图像。

img = Image(source = '1.jpg')
img.reload()

示例

在下面的示例代码中,我们主要尝试演示fit_mode属性的效果。下面是一个“kv”语言脚本,它在轮播组件中显示不同的图像。每个图像都有不同的fit_mode属性值。

“kv”语言脚本如下:

Carousel:
   direction:'top'
   Image:
      source:'1.png'
      fit_mode:"scale-down"
   Image:
      source:"TPlogo.png"
      fit_mode:"contain"
   Image:
      source:"TPlogo.png"
      fit_mode:"fill"
   Image:
      source:"TPlogo.png"
      fit_mode:"cover"

输出

在Kivy App类中加载此脚本并运行后,将根据各自的fit_mode显示不同的图像:

fit_mode = scaled-down

源图像大于Image组件。

kivy images.jpg

fit_mode=contain

源图像小于Image组件。

source image smaller

fit_mode: fill

图像调整大小以适应而不丢失纵横比。

Kivy Image Resized

fill_mode=cover

图像被拉伸以覆盖整个组件区域。

Kivy Image Stretched
广告