如何在Kivy中插入带有圆角边框的图像,同时裁剪它以保持其比例?

问题描述 投票:0回答:1

我有一个方形图像,我想将其显示为圆角矩形的背景。我想避免这个图像变形。这是我的意思的直观解释。

Explanation_Image

我尝试创建画布并将图像设置为 RoundedRectangle 的源以获得所需的视觉效果。然而,图像会被扭曲以适应矩形,这会改变图像的比例。这不是我想要得到的;有没有办法自动裁剪图像?我尝试使用 Kivy 2.2 的属性 fit_mode 但它不适用于 RoundedRectangle 。

这是我的Python文件:

from kivy.app import App
from kivy.lang import Builder
from kivy.uix.relativelayout import RelativeLayout
  
class CustomImage(RelativeLayout):
    pass

class MyScreen(RelativeLayout):
    pass
  
kv = Builder.load_file("draft_question.kv")
  
class MyApp(App):
    def build(self):
        return kv
  
if __name__ == "__main__":
    MyApp().run()

这是我的 .kv 文件:

#:kivy 2.2.1

<CustomImage>:

    canvas.before:
        RoundedRectangle:
            pos: (0,0)
            size: self.size
            source: "image.jpg"
            radius: [40,]
            #fit_mode: "cover"

MyScreen:
    CustomImage:
        size_hint: (0.6, 0.2)
        pos_hint: {"center_x": 0.5, "center_y": 0.5}

提前感谢您的帮助!

python kivy kivy-language
1个回答
0
投票

您可以使用

Stencil
将图像剪辑为您想要的内容。这是对您的
kv
的修改:

<CustomImage>:

    canvas.before:
        StencilPush
        RoundedRectangle:
            pos: (0,0)
            size: self.size
            radius: [40,]
        StencilUse
        Rectangle:
            source: 'image3.jpg'
            pos: 0, 0
            size: max(*self.size), max(*self.size)
        StencilUnUse
        RoundedRectangle:
            pos: (0,0)
            size: self.size
            radius: [40,]
        StencilPop

显示的图像部分取决于

pos
size
Rectangle
。如果您的图像是正方形的,那么您必须确保
Rectangle
也是正方形以避免变形。

© www.soinside.com 2019 - 2024. All rights reserved.