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
廣告
© . All rights reserved.