教你用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备份Mysql脚本
Aug 11 Python
使用python删除nginx缓存文件示例(python文件操作)
Mar 26 Python
Python数据类型详解(四)字典:dict
May 12 Python
python2 与 pyhton3的输入语句写法小结
Sep 10 Python
python 生成图形验证码的方法示例
Nov 11 Python
解决Djang2.0.1中的reverse导入失败的问题
Aug 16 Python
Python使用scipy模块实现一维卷积运算示例
Sep 05 Python
Pytorch中accuracy和loss的计算知识点总结
Sep 10 Python
flask框架json数据的拿取和返回操作示例
Nov 28 Python
Django之全局使用request.user.username的实例详解
May 14 Python
解析Python 偏函数用法全方位实现
Jun 26 Python
浅析Python 中的 WSGI 接口和 WSGI 服务的运行
Dec 09 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
php存储过程调用实例代码
2013/02/03 PHP
php获取当前url地址的方法小结
2017/01/10 PHP
php及codeigniter使用session-cookie的方法(详解)
2017/04/06 PHP
php实现不通过扩展名准确判断文件类型的方法【finfo_file方法与二进制流】
2017/04/18 PHP
仿新浪微博返回顶部的jquery实现代码
2012/10/01 Javascript
关于火狐(firefox)及ie下event获取的两种方法
2012/12/27 Javascript
输入自动提示搜索提示功能的javascript:sugggestion.js
2013/09/02 Javascript
JS不能跨域借助jquery获取IP地址的方法
2014/08/20 Javascript
jquery-mobile表单的创建方法详解
2016/11/23 Javascript
Jquery实时监听input value的实例
2017/01/26 Javascript
深入理解JavaScript 参数按值传递
2017/05/24 Javascript
Angular2的管道Pipe的使用方法
2017/11/07 Javascript
基于 Vue 实现一个酷炫的 menu插件
2017/11/14 Javascript
jquery实现点击a链接,跳转之后,该a链接处显示背景色的方法
2018/01/18 jQuery
Vue头像处理方案小结
2018/07/26 Javascript
JavaScript日期工具类DateUtils定义与用法示例
2018/09/03 Javascript
傻瓜式vuex语法糖kiss-vuex整理
2018/12/21 Javascript
详解NodeJS Https HSM双向认证实现
2019/03/12 NodeJs
layui lay-verify form表单自定义验证规则详解
2019/09/18 Javascript
使用Vue+Django+Ant Design做一个留言评论模块的示例代码
2020/06/01 Javascript
[01:45]绝对公平!DOTA2队长征召模式详解
2014/04/25 DOTA
python压缩文件夹内所有文件为zip文件的方法
2015/06/20 Python
Python操作MySQL数据库的两种方式实例分析【pymysql和pandas】
2019/03/18 Python
Python with用法:自动关闭文件进程
2019/07/10 Python
python爬虫增加访问量的方法
2019/08/22 Python
tensorflow实现训练变量checkpoint的保存与读取
2020/02/10 Python
django 解决model中类写不到数据库中,数据库无此字段的问题
2020/05/20 Python
Python importlib模块重载使用方法详解
2020/10/13 Python
python Matplotlib基础--如何添加文本和标注
2021/01/26 Python
秋季红领巾广播稿
2014/01/27 职场文书
教师远程培训感言
2014/03/06 职场文书
乡村卫生服务一体化管理实施方案
2014/03/30 职场文书
团日活动总结范文
2014/04/25 职场文书
新年晚会主持词开场白
2015/05/28 职场文书
MySQL修炼之联结与集合浅析
2021/10/05 MySQL
详解OpenCV曝光融合
2022/04/29 Python