最近用Python写了一个简略的脚本,自动替换iOS项目里的Icon图片资源,记录一下完整的流程,想进行尝试的童鞋能够参考下。

demo途径

一、准备工作

巧妇难为无米之炊,作为一个程序员,没有,咱们怎么造呢?

所以首先,咱们要装备好Python环境

引荐运用pyenv来进行不同版别的装置及切换,以及虚拟环境的装备,用法参考

运用pip工具 来完结Python包的查找、下载、装置、卸载的功用,用法参考

开发工具能够自由选择,我运用的是vscode

二、方针剖析及步骤拆分

首先来清晰咱们的方针,是要将传入的一张图片,设置成一个iOS项目工程的icons资源,

  • 第一步,咱们要获取一张图片的途径,并判别是否是1024*1024巨细(项目图片要求)

要设置iOS项目工程的icons资源,需求将项目工程要求的指定巨细像素的图片存放到对应的途径,并装备好描绘文件

  • 第二步,咱们要将原图片进行紧缩成各种巨细的图片

  • 第三步,将这些图片存放到指定的途径下面,如果已存在则直接替换

  • 第四步,对描绘文件进行装备

接下来咱们来看看详细的完结

三、完结

1.依赖头文件导入

import sys
import shutil
import json
import os

系统提供的工具库能够像上面相同直接引进,第三方库需求先运用pip进行下载 (注意如果运用虚拟环境,需求在对应环境进行下载, 否则会呈现识别不到的问题)

pip install Pillow

再进行头文件引进

from PIL import Image

2.源图片读取

判别png格局

def is_png_file(file_name):
    if file_name.endswith(".png"):
        return True
    else:
        return False

获取图片尺寸,判别巨细是否为1024*1024

def check_image_size_1024(image_path):
    try:
        with Image.open(image_path) as img:
            width, height = img.size
            return width == 1024 and height == 1024
    except IOError:
        print(f"无法翻开或读取图画文件: {image_path}")
        return False

3.图片紧缩

try:
    with Image.open(input_path) as img:
        # 获取图画原始尺寸
        original_width, original_height = img.size
        # 计算方针尺寸的缩放比例
        ratio = min(target_size[0] / original_width, target_size[1] / original_height)
        # 计算调整后的尺寸
        new_width = int(original_width * ratio)
        new_height = int(original_height * ratio)
        # 调整图画尺寸
        resized_img = img.resize((new_width, new_height), Image.LANCZOS)
    except IOError:
        print(f"无法翻开或读取图画文件: {input_path}")
    except Exception as e:
        print(f"处理图画时呈现错误: {e}")

4.图片写入,如果存在则替换

targetImageSize = imageSizeInfo[0] * imageSizeInfo[1]
targetImageSuffix = ".png" if imageSizeInfo[1] == 1 else "@{0}x.png".format(imageSizeInfo[1])
targetIconName = '{0}-iphone{1}'.format(imageSizeInfo[0],targetImageSuffix)
targetIconPath =  os.path.join(targetAppIconAssetsPath, targetIconName)
resized_img.save(targetIconPath)

注意需求将对应的iphone、ipad、appStore所需图片都进行一次处理

5.图片描绘文件修正

描绘文件内容读取

targetAppIconAssetsJsonPath = os.path.join(targetAppIconAssetsPath, "Contents.json")
with open(targetAppIconAssetsJsonPath, "r+") as file:
    contents = file.read()
jsonData = json.loads(contents)

图片装备信息内容,需求对每个图片进行装备

newImagesJsonInfo = []
newImagesJsonInfo.append({
            "size" : '{0}x{1}'.format(imageSizeInfo[0],imageSizeInfo[0]),
            "idiom" : "ipad",
            "filename" : targetIconName,
            "scale" : "{}x".format(imageSizeInfo[1]),
            })
            ...
            ...

修正装备文件内容并进行存储

jsonData['images'] = newImagesJsonInfo
modified_content = json.dumps(jsonData, indent=2)
with open(targetAppIconAssetsJsonPath, "w") as file:
    file.write(modified_content)

这样icon资源就都现已装备好了

四、命令行装备

能够运用shuttle工具完结装备,一键触发

在.libsonnet文件中新增用于触发脚本的方法,供.jsonnet文件调用

// 替换项目icons
replaceXcodeIconsCommand(
    script_path,
    iOS_project_path,
    inTerminal='new',
):: {
    local name = '更改AppIcon',
    local title = '替换项目Icons',
    cmd: "cd %s; python auto_replace_icon.py -p %s" % [script_path, iOS_project_path],
    inTerminal: inTerminal,
    name: name,
    title: title,
},

在上面的方法中传入shuttle代码途径和需求替换的项目途径

然后在.jsonnet文件里在想要的地方增加触发事件就阔以啦