Python 一键生成所有尺寸的应用图标

Python 一键生成iOS所有尺寸的应用图标

项目介绍

在开发软件或网站时,我们经常需要为应用程序或网站设计专属的icon图标。我们将通过Python脚本一键生成iOS所有尺寸的应用图标,省时省力。

编译环境

Python版本:python3.8

制作应用尺寸配置文件

1. 将所有尺寸的图片配置在iconContentsConfig.json文件中

{
    "images": [
        {
            "size": "20x20",
            "idiom": "iphone",
            "filename": "icon-20@2x.png",
            "scale": "2x"
        },
        {
            "size": "20x20",
            "idiom": "iphone",
            "filename": "icon-20@3x.png",
            "scale": "3x"
        },
        {
            "size": "29x29",
            "idiom": "iphone",
            "filename": "icon-29.png",
            "scale": "1x"
        },
        {
            "size": "29x29",
            "idiom": "iphone",
            "filename": "icon-29@2x.png",
            "scale": "2x"
        },
        {
            "size": "29x29",
            "idiom": "iphone",
            "filename": "icon-29@3x.png",
            "scale": "3x"
        },
        {
            "size": "40x40",
            "idiom": "iphone",
            "filename": "icon-40@2x.png",
            "scale": "2x"
        },
        {
            "size": "40x40",
            "idiom": "iphone",
            "filename": "icon-40@3x.png",
            "scale": "3x"
        },
        {
            "size": "60x60",
            "idiom": "iphone",
            "filename": "icon-60@2x.png",
            "scale": "2x"
        },
        {
            "size": "60x60",
            "idiom": "iphone",
            "filename": "icon-60@3x.png",
            "scale": "3x"
        },
        {
            "size": "20x20",
            "idiom": "ipad",
            "filename": "icon-20-ipad.png",
            "scale": "1x"
        },
        {
            "size": "20x20",
            "idiom": "ipad",
            "filename": "icon-20@2x-ipad.png",
            "scale": "2x"
        },
        {
            "size": "29x29",
            "idiom": "ipad",
            "filename": "icon-29-ipad.png",
            "scale": "1x"
        },
        {
            "size": "29x29",
            "idiom": "ipad",
            "filename": "icon-29@2x-ipad.png",
            "scale": "2x"
        },
        {
            "size": "40x40",
            "idiom": "ipad",
            "filename": "icon-40.png",
            "scale": "1x"
        },
        {
            "size": "40x40",
            "idiom": "ipad",
            "filename": "icon-40@2x.png",
            "scale": "2x"
        },
        {
            "size": "76x76",
            "idiom": "ipad",
            "filename": "icon-76.png",
            "scale": "1x"
        },
        {
            "size": "76x76",
            "idiom": "ipad",
            "filename": "icon-76@2x.png",
            "scale": "2x"
        },
        {
            "size": "83.5x83.5",
            "idiom": "ipad",
            "filename": "icon-83.5@2x.png",
            "scale": "2x"
        },
        {
            "size": "1024x1024",
            "idiom": "ios-marketing",
            "filename": "icon-1024.png",
            "scale": "1x"
        }
    ],
    # 旧icon尺寸
    "oldImages": [
        {
            "size": "50x50",
            "idiom": "ipad",
            "filename": "icon-50.png",
            "scale": "1x"
        },
        {
            "size": "50x50",
            "idiom": "ipad",
            "filename": "icon-50@2x.png",
            "scale": "2x"
        },
        {
            "size": "72x72",
            "idiom": "ipad",
            "filename": "icon-72.png",
            "scale": "1x"
        },
        {
            "size": "72x72",
            "idiom": "ipad",
            "filename": "icon-72@2x.png",
            "scale": "2x"
        },
        {
            "size": "57x57",
            "idiom": "iphone",
            "filename": "icon-57.png",
            "scale": "1x"
        },
        {
            "size": "57x57",
            "idiom": "iphone",
            "filename": "icon-57@2x.png",
            "scale": "2x"
        }
    ],
    "info": {
        "version": 1,
        "author": "xcode"
    }
}

2. 读取json文件并转成字典

在Python中,我们可以使用json模块来处理json数据。下面是一个简单的示例,演示了如何读取一个名为iconContentsConfig.json的json文件,并将其转换成字典格式。

import 
configFile = open('iconContentsConfig.json')
data = json.load(configFile)
configFile.close()
importIconSizeDataDic = data
importIconSizeArr = data['images']
importIconSizeOldArr = data['oldImages']

3. 遍历获取图片的尺寸和名称

# 图片存放路径
imagesNewSavePath = imagesSavePath + "ios/AppIcon.appiconset/"
if not os.path.exists(imagesNewSavePath):
    os.makedirs(imagesNewSavePath)
# 判断是否添加旧尺寸图片
if isOldImageSize:
    importIconSizeArr = importIconSizeArr + importIconSizeOldArr
else:
    importIconSizeArr = importIconSizeArr
for importIconSizeDict in importIconSizeArr:
    iconSize = float(importIconSizeDict["size"].split("x")[0])
    iconFileName = importIconSizeDict["filename"]
    iconScale = float(importIconSizeDict["scale"].split("x")[0])
    # 获取指定尺寸图片
    scaleImage(imagePath, imagesNewSavePath, (int(iconSize * iconScale), int(iconSize * iconScale)), iconFileName)

4.生成指定尺寸图片

def scaleImage(image_path, image_new_path, img_size_1x=(0, 0), img_target_name=""):
    # 自定义宽高
    custom_wid_1x = img_size_1x[0]
    custom_hei_1x = img_size_1x[1]
    # 原图
    image_ori = Image.open(image_path)
    # 图片名
    image_name = image_path.split('/')[-1].split('.')[-2]
    # 图片的类型
    image_type = image_path.split('/')[-1].split('.')[-1]
    if custom_wid_1x != 0 and custom_hei_1x != 0:
    	# 获取指定尺寸的图片
        image_new = image_ori.resize(img_size_1x, Image.BILINEAR)
        if img_target_name == "":
            image_new_path_x = '%s%s_%sx%s.%s' % (image_new_path, image_name, str(custom_wid_1x),
                                                  str(custom_hei_1x), image_type)
        else:
            image_new_path_x = '%s%s' % (image_new_path, img_target_name)
        image_new.save(image_new_path_x)
        # image_new.save(image_new_path_x, image_type.upper())
        print("[ImageDealProcess OK] " + image_new_path_x + "已完成")
        return True
    else:
        print(image_name + " -- 提供尺寸格式不正确。")
        return False

⭐️如果对你有用的话,希望可以点点赞,感谢了⭐️

完整代码

import json
import os
import shutil

from PIL import Image


def scaleImage(image_path, image_new_path, img_size_1x=(0, 0), img_target_name=""):
    # 自定义宽高
    custom_wid_1x = img_size_1x[0]
    custom_hei_1x = img_size_1x[1]
    # 原图
    image_ori = Image.open(image_path)
    # 图片名
    image_name = image_path.split('/')[-1].split('.')[-2]
    # 图片的类型
    image_type = image_path.split('/')[-1].split('.')[-1]
    if custom_wid_1x != 0 and custom_hei_1x != 0:
        image_new = image_ori.resize(img_size_1x, Image.BILINEAR)
        if img_target_name == "":
            image_new_path_x = '%s%s_%sx%s.%s' % (image_new_path, image_name, str(custom_wid_1x),
                                                  str(custom_hei_1x), image_type)
        else:
            image_new_path_x = '%s%s' % (image_new_path, img_target_name)
        image_new.save(image_new_path_x)
        # image_new.save(image_new_path_x, image_type.upper())
        print("[ImageDealProcess OK] " + image_new_path_x + "已完成")
        return True
    else:
        print(image_name + " -- 提供尺寸格式不正确。")
        return False


def createAppIcon():
    imagesNewSavePath = imagesSavePath + "ios/AppIcon.appiconset/"
    if not os.path.exists(imagesNewSavePath):
        os.makedirs(imagesNewSavePath)
    if isOldImageSize:
        newImportIconSizeArr = importIconSizeArr + importIconSizeOldArr
    else:
        newImportIconSizeArr = importIconSizeArr
    for importIconSizeDict in newImportIconSizeArr:
        iconSize = float(importIconSizeDict["size"].split("x")[0])
        iconFileName = importIconSizeDict["filename"]
        iconScale = float(importIconSizeDict["scale"].split("x")[0])
        scaleImage(imagePath, imagesNewSavePath,
                        (int(iconSize * iconScale), int(iconSize * iconScale)), iconFileName)
    contentsJsonFilePath = imagesNewSavePath + "Contents.json"
    shutil.copy('Res/iconContentsConfig.json', contentsJsonFilePath)
    if "oldImages" in importIconSizeDataDic:
        del importIconSizeDataDic["oldImages"]
    importIconSizeDataDic["images"] = newImportIconSizeArr
    with open(contentsJsonFilePath, "w", encoding='utf-8') as f:
        f.write(json.dumps(importIconSizeDataDic, indent=4))
    print("[ImageDealProcess End] 图片处理已完成")


if __name__ == "__main__":
    isOldImageSize = True
    imagesSavePath = "/Users/yfzx/Documents/output/"
    imagePath = "/Users/yfzx/Downloads/12.png"

    configFile = open('Res/iconContentsConfig.json')
    data = json.load(configFile)
    configFile.close()
    importIconSizeDataDic = data
    importIconSizeArr = data['images']
    importIconSizeOldArr = data['oldImages']
    # 一键生成所有尺寸图片
    createAppIcon()

⭐️如果对你有用的话,希望可以点点赞,感谢了⭐️

欢迎学习交流

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wu.Nim

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值