django-photologue:如何将图像缩放到框并填充背景

发布于 2024-10-17 00:20:11 字数 170 浏览 2 评论 0原文

我正在使用 django-photologue(使用 1pinax)并希望将图像缩放到框(100 像素 x 100 像素)。 肖像图像的高度应缩放至 100 像素,宽度应填充颜色。

I´m using django-photologue (with 1pinax) and want to scale images to a box (100px x 100px).
Portrait images should be scaled to height 100px and the width should be filled with a color.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

娇纵 2024-10-24 00:20:11

您可以将 PIL 与变换矩阵一起使用。例如,以下
功能在单个操作中调整大小和裁剪。我个人更喜欢裁剪
而不是用颜色填充它,但您可以根据需要进行调整。

def resize_and_crop(im, mask_width=1000, mask_height=1000):
    width, height = im.size
    aspect = 1.0*width/height
    mask_aspect = 1.0*mask_width/mask_height
    if width != mask_width or height != mask_height:
        if aspect > mask_aspect:
            ratio = 1.0*height/mask_height
            imt = im.transform((mask_width, mask_height), 
                                Image.AFFINE, 
                               (ratio, 0, (width-mask_width*ratio)/2, 0, ratio, 0),
                               Image.CUBIC)
        else:
            ratio = 1.0*width/mask_width
            imt = im.transform((mask_width, mask_height), 
                               Image.AFFINE, 
                               (ratio, 0, 0, 0, ratio, (height-mask_height*ratio)/2),
                               Image.CUBIC)
    else:
        imt = im
    return imt

You can use PIL with a transformation matrix. For example, the following
function resize and crop in a single operation. Personally I prefer to crop
rather than fill it with a color, but you can adjust it to your needs.

def resize_and_crop(im, mask_width=1000, mask_height=1000):
    width, height = im.size
    aspect = 1.0*width/height
    mask_aspect = 1.0*mask_width/mask_height
    if width != mask_width or height != mask_height:
        if aspect > mask_aspect:
            ratio = 1.0*height/mask_height
            imt = im.transform((mask_width, mask_height), 
                                Image.AFFINE, 
                               (ratio, 0, (width-mask_width*ratio)/2, 0, ratio, 0),
                               Image.CUBIC)
        else:
            ratio = 1.0*width/mask_width
            imt = im.transform((mask_width, mask_height), 
                               Image.AFFINE, 
                               (ratio, 0, 0, 0, ratio, (height-mask_height*ratio)/2),
                               Image.CUBIC)
    else:
        imt = im
    return imt
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文