利用Python为iOS10生成图标和截屏
作者:lijiao 发布时间:2021-05-03 11:15:09
标签:iOS10,图标,截屏
简介
这两天更新完Xcode8之后发现Xcode对图标的要求又有了变化,之前用的一个小应用“IconKit”还没赶上节奏,已经不能满足Xcode8的要求了。
于是就想起来用Python自己做个脚本来生成图标。
其实这个脚本很早就写了,现在为了适应iOS10,就修改完善下,并且放到了GitHub。
可以看看效果图:
1.png
代码:
#encoding=utf-8
#by 不灭的小灯灯
#create date 2016/5/22
#update 2016/9/21
#support iOS 10
#site www.winterfeel.com
import os
import sys
from PIL import Image
iosSizes = ['20@1x','20@2x','20@3x','29@1x','29@2x','29@3x','40@1x','40@2x','40@3x','60@2x','60@3x','60@3x','76@1x','76@2x','167@1x']
androidSizes = [32,48,72,96,144,192]
androidNames = ['ldpi','mdpi','hdpi','xhdpi','xxhdpi','xxxhdpi']
sizesiOS = [(640,960),(640, 1136),(750, 1334),(1242, 2208),(1536, 2048),(2048, 2732)]
foldersiOS = ['iPhone4s','iPhone5','iPhone6','iPhone6plus','iPad','iPadLarge']
sizesAndroid = [(480,800),(720,1280),(1080,1920)]
foldersAndroid = ['480x800','720x1280','1080x1920']
def processIcon(filename,platform):
icon = Image.open(filename).convert("RGBA")
if icon.size[0] != icon.size[1]:
print 'Icon file must be a rectangle!'
return
if platform == 'android':
#安卓圆角
mask = Image.open('mask.png')
r,g,b,a = mask.split()
icon.putalpha(a)
if not os.path.isdir('androidIcon'):
os.mkdir('androidIcon')
index = 0
for size in androidSizes:
im = icon.resize((size,size),Image.BILINEAR)
im.save('androidIcon/icon-'+ androidNames[index]+'.png')
index = index + 1
else:
if not os.path.isdir('iosIcon'):
os.mkdir('iosIcon')
for size in iosSizes:
originalSize = int(size.split('@')[0])#原始尺寸
multiply = int(size.split('@')[1][0:1])#倍数
im = icon.resize((originalSize*multiply,originalSize*multiply),Image.BILINEAR)
im.save('iosIcon/icon'+size+'.png')
print 'Congratulations!It\'s all done!'
def walk_dir(dir,platform):
files = os.listdir(dir)
for name in files:
if name.split('.')[-1] == 'jpg' or name.split('.')[-1] == 'png':#处理jpg和png
produceImage(name,platform)
print 'Congratulations!It\'s all done!'
def produceImage(filename,platform):
print 'Processing:' + filename
img = Image.open(filename)
index = 0
sizes = sizesiOS
folders = foldersiOS
if platform == 'android':#默认ios,如果是安卓
sizes = sizesAndroid
folders = foldersAndroid
for size in sizes:
if not os.path.isdir(folders[index]):
os.mkdir(folders[index])
if img.size[0] > img.size[1]:#如果是横屏,交换坐标
im = img.resize((size[1],size[0]),Image.BILINEAR)
im.save(folders[index]+'/'+filename)
else:
im = img.resize(size,Image.BILINEAR)
im.save(folders[index]+'/'+filename)
index = index + 1
action = sys.argv[1]#action:icon or screenshot
if action == 'screenshot':
platform = sys.argv[2]#platform
if platform == 'ios':
walk_dir('./','ios')
elif platform == 'android':
walk_dir('./','android')
else:
print 'Hey,Platform can only be "ios" or "android" !'
elif action == 'icon':
filename = sys.argv[2]#image filename
platform = sys.argv[3]#platform
if not os.path.exists(filename):
print 'Hey,File Not Found!'
else:
if platform == 'ios':
processIcon(filename,'ios')
elif platform == 'android':
processIcon(filename,'android')
else:
print 'Hey,Platform can only be "ios" or "android" !'
else:
print 'Hey,action can only be "icon" or "screenshot" !'
脚本环境要求
Python 2.7
PIL or Pillow
笔者亲测,也许是笔者太菜,试了各种方法安装PIL总是出错,最后还是用了Pillow,效果一样的。
怎么使用脚本
在Windows的命令行或者Mac的终端,输入:
python tool.py [action] [filename] [platform]
action:icon 或者 screenshot
filename:图标文件名,截屏不需要文件名,自动遍历
platform:ios 或者 android
举一些例子:
生成iOS的图标:python tool.py icon icon.jpg ios
生成安卓的图标:python tool.py icon icon.jpg android
生成iOS的截屏:python tool.py screenshot ios
生成安卓的截屏:python tool.py screenshot android
注意:
生成安卓圆角图标需要一张PNG来裁剪,尺寸512x512,70圆角,GitHub中已经附带。
生成截屏时会自动遍历所有JPG和PNG文件,自动识别横竖屏
结语
如果你觉得有用,欢迎在GitHub中Star一下,也欢迎改进,代码简单易懂加了注释。
0
投稿
猜你喜欢
- 这种情况在挂载脚本后无法答题,任何关于答题脚本的脚本都无法使用。看这个字体,已经读不出原文了,一开始以为是加密尝试使用加密算法破解,然后用B
- 代码如下:---ntext数据类型字符替换 create table tt ( sid INT IDENTITY(1,1), c
- 现在同类型的网站数不胜数,网站的功能或服务日趋同质化,大的方面看不出什么差别,差别就体现在细节上。“窥斑见豹”,细节成为网站最有力的表现形式
- package work;import java.io.BufferedReader;import java.io.IOException;
- 实现制作抽奖程序,需要认知到我们可以看到一般抽奖程序界面上是有很多按钮的,比如中奖区域,按键开始区域等等,所以我们先要设置界面,然后把这些按
- 下面是一个实战项目的结果。 #coding: utf-8 import Image,ImageDraw,ImageFont,os,strin
- 当我们使用 tensorflow 训练神经网络的时候,模型持久化对于我们的训练有很重要的作用。如果我们的神经网络比较复杂,训练数据比较多,那
- 本文主要讲如何不依赖TenserFlow等高级API实现一个简单的神经网络来做分类,所有的代码都在下面;在构造的数据(通过程序构造)上做了验
- 该语言中缩进是其精髓,通过缩进可以表示函数、循环等程序结构的范围。有时写完程序后,发现所有程序需要放入函数def中,这时就需要对一整块程序同
- 在查看Mysql对文件的操作中,它在不同的操作系统上对文件的操作,除了使用标准C运行库函数,包括open、close、seek等,在Win3
- Python TutorPython Tutor 是由 Philip Guo 开发的一个免费教育工具,可帮助学生攻克编程学习中的基础障碍,理
- 用户管理是绝大部分Web网站都需要解决的问题。用户管理涉及到用户注册和登录。用户注册相对简单,我们可以先通过API把用户注册这个功能实现了:
- 在写脚本的过程中,除了发送form表单参数之外,我们还会发送json格式的参数。那么碰见json格式要怎么发送呢,这篇我们来解决这个问题。直
- 本文实例讲述了python使用socket远程连接错误处理方法。分享给大家供大家参考。具体如下:import socket, syshost
- 1. 引言在使用Python的时候,通常会出现如下场景:array = [1, 2, 3, 3, 2, 1, 0, 2]获取array中元素
- 什么是 Python? Python 之父 Guido van Rossum 说:Python是一种高级程序语言,其核心设计哲学是代码可读性
- 简介除ide的执行方式外,命令行的方式执行Python脚本是参数化程序执行的一种常见且简单的方法,正确处理命令行参数,可以提供给包含某种参数
- 常用当前循环.作用default数据为空时设置默认值length取变量长度filesizeformat文件大小转成可读slice从指定位置到
- 本文实例讲述了django框架CSRF防护。分享给大家供大家参考,具体如下:CSRF防护一、什么是CSRF?CSRF: Cross-site
- 本文实例为大家分享了Python OpenCV实现视频分帧的具体代码,供大家参考,具体内容如下# coding=utf-8import os