我是靠谱客的博主 甜甜网络,最近开发中收集的这篇文章主要介绍Python3 使用PIL将图片切分为九宫格,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

原文链接: Python3 使用PIL将图片切分为九宫格

上一篇: grid 常见布局实现

下一篇: html img 图片缩放

效果为将一张图片经过填充后变为一张正方形的图片,然后切割为3*3的小图片

071544_67Jb_2856757.png

切割后的图片

071708_1cO2_2856757.png

转换步骤

1,新建一个正方形图片,边长是原图片的长宽最大值

    width, height = image.size
    new_len = max(width, height)

    # 将新图片是正方形,长度为原宽高中最长的
    new_image = Image.new(image.mode, (new_len, new_len), color='white')

2,根据两种不同的情况将原图片复制到正方形图片中,位置由左上端点位置确定

072445_XPsw_2856757.png

    if width > height:
        new_image.paste(image, (0, int((new_len - height) / 2)))
    else:
        new_image.paste(image, (int((new_len - width) / 2), 0))
    return new_image

3,图片分割,分割图片需要四个参数,x1,y1,x2,y2,分别表示分割区域的左上端点和右下端点

072123_aVmO_2856757.png

    width, height = image.size
    item_width = int(width / 3)

    # 保存每一个小切图的区域
    box_list = []

    for i in range(3):
        for j in range(3):
            # 切图区域是矩形,位置由对角线的两个点(左上和右下)确定
            box = (j * item_width, i * item_width, (j + 1) * item_width, (i + 1) * item_width)
            box_list.append(box)
    image_list = [image.crop(box) for box in box_list]

4,输出图片到指定路径

    for (index, image) in enumerate(image_list):
        image.save(f"{out_dir}/{index}.png", "PNG")

完整代码

from PIL import Image

import os


def fill_image(image):
    width, height = image.size
    new_len = max(width, height)

    # 将新图片是正方形,长度为原宽高中最长的
    new_image = Image.new(image.mode, (new_len, new_len), color='white')

    # 根据两种不同的情况,将原图片放入新建的空白图片中部
    if width > height:
        new_image.paste(image, (0, int((new_len - height) / 2)))
    else:
        new_image.paste(image, (int((new_len - width) / 2), 0))
    return new_image


def cut_image(image):
    width, height = image.size
    item_width = int(width / 3)

    # 保存每一个小切图的区域
    box_list = []

    for i in range(3):
        for j in range(3):
            # 切图区域是矩形,位置由对角线的两个点(左上和右下)确定
            box = (j * item_width, i * item_width, (j + 1) * item_width, (i + 1) * item_width)
            box_list.append(box)

    image_list = [image.crop(box) for box in box_list]
    return image_list


def save_images(image_list, out_dir):
    for (index, image) in enumerate(image_list):
        image.save(f"{out_dir}/{index}.png", "PNG")


def to9img(file_path, out_dir='.'):
    image = Image.open(file_path)
    image = fill_image(image)
    image_list = cut_image(image)
    save_images(image_list, out_dir)


if __name__ == '__main__':
    to9img('mix2s.png')

最后

以上就是甜甜网络为你收集整理的Python3 使用PIL将图片切分为九宫格的全部内容,希望文章能够帮你解决Python3 使用PIL将图片切分为九宫格所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(55)

评论列表共有 0 条评论

立即
投稿
返回
顶部