from PIL import Image


def pad_to_square(image: Image.Image,
                  fill_color=(0, 0, 0),
                  padding: int = 0) -> Image.Image:
    """
    先补成正方形，再在四周扩展padding像素。
    """
    width, height = image.size
    if width == height:
        square_img = image.copy()
    else:
        new_size = max(width, height)
        square_img = Image.new(image.mode, (new_size, new_size), fill_color)
        left = (new_size - width) // 2
        top = (new_size - height) // 2
        square_img.paste(image, (left, top))

    if padding > 0:
        final_size = square_img.size[0] + 2 * padding
        padded_img = Image.new(square_img.mode, (final_size, final_size),
                               fill_color)
        padded_img.paste(square_img, (padding, padding))
        return padded_img
    else:
        return square_img
