教你用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中Crypto库报错:ModuleNotFoundError: No module named ‘Crypto’的解决
Apr 23 Python
Python实现计算圆周率π的值到任意位的方法示例
May 08 Python
Python爬虫包BeautifulSoup实例(三)
Jun 17 Python
Django跨域请求CSRF的方法示例
Nov 11 Python
基于Python的微信机器人开发 微信登录和获取好友列表实现解析
Aug 21 Python
python监控nginx端口和进程状态
Sep 06 Python
python树的同构学习笔记
Sep 14 Python
Python 实现一个手机号码获取妹子名字的功能
Sep 25 Python
Pyecharts地图显示不完成问题解决方案
May 11 Python
python入门:argparse浅析 nargs='+'作用
Jul 12 Python
详解分布式系统中如何用python实现Paxos
May 18 Python
PYTHON使用Matplotlib去实现各种条形图的绘制
Mar 22 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
对盗链说再见...
2006/10/09 PHP
php自动获取关键字的方法
2015/01/06 PHP
php简单备份与还原MySql的方法
2016/05/09 PHP
js 新浪的一个图片播放图片轮换效果代码
2008/07/15 Javascript
JavaScript 继承的实现
2009/07/09 Javascript
javascript中获取下个月一号,是星期几
2012/06/01 Javascript
jquery 删除字符串最后一个字符的方法解析
2014/02/11 Javascript
Javascript加载速度慢的解决方案
2014/03/11 Javascript
原生js和jquery实现图片轮播淡入淡出效果
2015/04/23 Javascript
Jquery Ajax Error 调试错误的技巧
2015/11/20 Javascript
jquery.validate使用详解
2016/06/02 Javascript
nodejs中模块定义实例详解
2017/03/18 NodeJs
JS排序之选择排序详解
2017/04/08 Javascript
jQuery插件select2利用ajax高效查询大数据列表(可搜索、可分页)
2017/05/19 jQuery
微信小程序tabbar不显示解决办法
2017/06/08 Javascript
VUE中使用Vue-resource完成交互
2017/07/21 Javascript
angularjs路由传值$routeParams详解
2020/09/05 Javascript
深入浅出 Vue 系列 -- 数据劫持实现原理
2019/04/23 Javascript
vue使用recorder.js实现录音功能
2019/11/22 Javascript
vue 递归组件的简单使用示例
2021/01/14 Vue.js
[36:02]DOTA2上海特级锦标赛D组小组赛#2 Liquid VS VP第一局
2016/02/28 DOTA
Python编写屏幕截图程序方法
2015/02/18 Python
使用Python的Tornado框架实现一个简单的WebQQ机器人
2015/04/24 Python
Tornado协程在python2.7如何返回值(实现方法)
2017/06/22 Python
Python使用matplotlib填充图形指定区域代码示例
2018/01/16 Python
python模块导入的方法
2019/10/24 Python
Python定时器线程池原理详解
2020/02/26 Python
Missguided美国官网:英国时尚品牌
2018/01/18 全球购物
Myprotein法国官网:欧洲第一运动营养品牌
2019/03/26 全球购物
WEB控件可以激发服务端事件,请谈谈服务端事件是怎么发生并解释其原理?自动传回是什么?为什么要使用自动传回?
2012/02/21 面试题
工商学院毕业生个人自我评价
2013/09/19 职场文书
新品发布会主持词
2014/04/02 职场文书
代办委托书怎样写
2014/04/08 职场文书
人间正道是沧桑观后感
2015/06/15 职场文书
八年级作文之友谊
2019/12/02 职场文书
使用Nginx的访问日志统计PV与UV
2022/05/06 Servers