教你用Python脚本快速为iOS10生成图标和截屏


Posted in Python onSeptember 22, 2016

简介

这两天更新完Xcode8之后发现Xcode对图标的要求又有了变化,之前用的一个小应用“IconKit”还没赶上节奏,已经不能满足Xcode8的要求了。

于是就想起来用Python自己做个脚本来生成图标。

其实这个脚本很早就写了,现在为了适应iOS10,就修改完善下,并且放到了 GitHub 。

可以看看效果图:

教你用Python脚本快速为iOS10生成图标和截屏 

代码:

#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一下,也欢迎改进,代码简单易懂加了注释。

GitHub地址

以上所述是小编给大家介绍的教你用Python脚本快速为iOS10生成图标和截屏的全部叙述,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
python中将字典转换成其json字符串
Jul 16 Python
Python3读取文件常用方法实例分析
May 22 Python
python深度优先搜索和广度优先搜索
Feb 07 Python
Python八大常见排序算法定义、实现及时间消耗效率分析
Apr 27 Python
Python实现的简单读写csv文件操作示例
Jul 12 Python
python安装twisted的问题解析
Aug 21 Python
django模板结构优化的方法
Feb 28 Python
python实现坦克大战游戏 附详细注释
Mar 27 Python
python3反转字符串的3种方法(小结)
Nov 07 Python
使用Rasterio读取栅格数据的实例讲解
Nov 26 Python
python-OpenCV 实现将数组转换成灰度图和彩图
Jan 09 Python
python 解决mysql where in 对列表(list,,array)问题
Jun 06 Python
Python 制作糗事百科爬虫实例
Sep 22 #Python
Python 使用SMTP发送邮件的代码小结
Sep 21 #Python
Python 使用requests模块发送GET和POST请求的实现代码
Sep 21 #Python
Python中将字典转换为列表的方法
Sep 21 #Python
Python 两个列表的差集、并集和交集实现代码
Sep 21 #Python
python代码 if not x: 和 if x is not None: 和 if not x is None:使用介绍
Sep 21 #Python
python if not in 多条件判断代码
Sep 21 #Python
You might like
PHPMailer的主要功能特点和简单使用说明
2014/02/17 PHP
YII实现分页的方法
2014/07/09 PHP
php实现比较两个字符串日期大小的方法
2015/05/12 PHP
PHP设计模式之迭代器模式
2016/06/17 PHP
HTML-CSS群中单选引发的“事件”
2007/03/05 Javascript
javascript阻止scroll事件多次执行的思路及实现
2013/11/08 Javascript
jQuery中click事件用法实例
2014/12/26 Javascript
jQuery实现点击图片翻页展示效果的方法
2015/02/16 Javascript
微信js-sdk地理位置接口用法示例
2016/10/12 Javascript
深入理解AngularJS中的ng-bind-html指令
2017/03/27 Javascript
js模拟支付宝密码输入框
2017/04/11 Javascript
在vue中添加Echarts图表的基本使用教程
2017/11/22 Javascript
详解vue.js之props传递参数
2017/12/12 Javascript
Angular 项目实现国际化的方法
2018/01/08 Javascript
JS中获取 DOM 元素的绝对位置实例详解
2018/04/23 Javascript
微信小程序下拉框功能的实例代码
2018/11/06 Javascript
新手快速上手webpack4打包工具的使用详解
2019/01/28 Javascript
在vue中使用Echarts画曲线图的示例
2020/10/03 Javascript
[01:08]DOTA2“血战之命”预告片
2017/08/12 DOTA
[00:17]天涯墨客一技能展示
2018/08/25 DOTA
Python 可爱的大小写
2008/09/06 Python
粗略分析Python中的内存泄漏
2015/04/23 Python
解析Python中的异常处理
2015/04/28 Python
python实现本地批量ping多个IP的方法示例
2019/08/07 Python
pyecharts动态轨迹图的实现示例
2020/04/17 Python
快速创建 HTML5 Canvas 电信网络拓扑图的示例代码
2018/03/21 HTML / CSS
房地产管理毕业生自荐信
2013/11/04 职场文书
小班秋游活动方案
2014/02/22 职场文书
十佳青年事迹材料
2014/08/21 职场文书
社区班子对照检查材料
2014/08/27 职场文书
2015年三万活动总结
2015/03/25 职场文书
2015年乡镇卫生院妇幼保健工作总结
2015/05/19 职场文书
房产遗嘱范本
2015/08/06 职场文书
pytorch实现手写数字图片识别
2021/05/20 Python
Java 超详细讲解ThreadLocal类的使用
2022/04/07 Java/Android
MySQL 条件查询的常用操作
2022/04/28 MySQL