最近用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文件里在想要的地方增加触发事件就阔以啦