Python自动生成Flutter项目Android和iOS应用图标

328 阅读2分钟

前言

当今移动应用市场竞争激烈,吸引用户的关键之一是具有吸引力的应用图标。每次UI小姐姐生成新的应用图标后,我们都需要图标做一些重命名和复制粘贴的繁琐操作。为了提高效率,我们可以使用Python编程语言来批量生成应用图标。本文将介绍如何使用Python来实现这一目标。

完整代码

准备工作

在开始之前,确保你已经安装了Python和必要的库。我们将使用Pillow库来处理图像文件,所以你可以使用以下命令来安装它:

pip install Pillow

1. 收集图标素材

首先,需要准备一个高分辨率的应用图标设计,这将作为生成其他尺寸图标的基础。通常,我们使用一个正方形的图像,尺寸为 1024x1024 像素。

2. 编写Python脚本

要求

Android应用需要生成以下多个尺寸图标,放置在不同文件夹,为了适配谷歌手机,同时还需要生成圆形的图标

# android 尺寸
icon_size_android = {
    "mipmap-xxxhdpi": 192,
    "mipmap-xxhdpi": 144,
    "mipmap-xhdpi": 96,
    "mipmap-hdpi": 72,
    "mipmap-mdpi": 48,
    "mipmap-ldpi": 36,
}

iOS应用需要生成以下多个尺寸的图标,通过AppIcon.appiconset文件夹下的Contents.json文件配置

# ios尺寸
icon_size_ios = [29, 40, 57, 58, 60, 80, 87, 114, 120, 180, 1024]

配置路径

# 设计图路径
icon_path = "icon.png"

# Flutter项目路径
project_path = "/Users/alen/Aproject/flutter_project"
ios_icon_path = f"{project_path}/ios/Runner/Assets.xcassets/AppIcon.appiconset"
android_icon_path = f"{project_path}/android/app/src/main/res"
android_icon_name = "ic_launcher.png"
android_icon_round_name = "ic_launcher_round.png"

接下来,我们将编写一个Python脚本来生成不同分辨率和尺寸的应用图标。下面是一个示例脚本:

def gen_icon_android(input_image_path):
    """
    生成android方形和圆形图标
    """

    # 打开原始图片
    input_image = Image.open(input_image_path)

    # 创建图标文件夹并生成图标
    for folder_name, size in icon_size_android.items():
        # 生成对应文件夹
        output_folder = os.path.join(android_icon_path, folder_name)
        os.makedirs(output_folder, exist_ok=True)

        # 方形图标处理:直接保存为对应尺寸
        square_icon = input_image.resize((size, size))
        square_icon_path = os.path.join(output_folder, android_icon_name)
        square_icon.save(square_icon_path, 'PNG')

        # 圆形图标处理:裁剪成圆形,再保存为对应尺寸
        circular_icon = input_image.copy()
        min_side = min(circular_icon.width, circular_icon.height)
        circular_icon = circular_icon.crop((0, 0, min_side, min_side))
        mask = Image.new("L", circular_icon.size, 0)
        draw = ImageDraw.Draw(mask)
        draw.ellipse((0, 0, circular_icon.width, circular_icon.height), fill=255)
        circular_icon = ImageOps.fit(circular_icon, mask.size, centering=(0.5, 0.5))
        circular_icon.putalpha(mask)
        circular_icon = circular_icon.resize((size, size))
        circular_icon_path = os.path.join(output_folder, android_icon_round_name)
        circular_icon.save(circular_icon_path, 'PNG')

    input_image.close()


def gen_icon_ios(input_image_path):
    """
    生成ios图标和各尺寸配置文件
    """

    folder = ios_icon_path
    clear_folder(folder)
    copy_file("Contents.json", folder)

    # 打开输入图片
    img = Image.open(input_image_path)

    # 生成不同尺寸的图片
    for size in icon_size_ios:
        output_image_path = os.path.join(folder, f"{size}.png")
        resized_img = img.resize((size, size))
        resized_img.save(output_image_path)
        resized_img.close()
    img.close()


3. 运行脚本

保存上述脚本为一个.py文件,然后在命令行中运行它:

python3 gen_icon.py