教你用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 控制语句
Nov 03 Python
Python中类的继承代码实例
Oct 28 Python
Python中的数据对象持久化存储模块pickle的使用示例
Mar 03 Python
Python使用迭代器打印螺旋矩阵的思路及代码示例
Jul 02 Python
Python虚拟环境virtualenv的安装与使用详解
May 28 Python
如何用Python合并lmdb文件
Jul 02 Python
python对文件的操作方法汇总
Feb 28 Python
Python 实现将大图切片成小图,将小图组合成大图的例子
Mar 14 Python
PyQt5 界面显示无响应的实现
Mar 26 Python
python collections模块的使用
Oct 16 Python
浅谈Python xlwings 读取Excel文件的正确姿势
Feb 26 Python
python使用glob检索文件的操作
May 20 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
《雄兵连》《烈阳天道》真的来了
2020/07/13 国漫
php基础知识:类与对象(3) 构造函数和析构函数
2006/12/13 PHP
CodeIgniter多语言实现方法详解
2016/01/20 PHP
分享PHP-pcntl 实现多进程代码
2016/09/30 PHP
yii2中LinkPager增加总页数和总记录数的实例
2017/08/28 PHP
PHP面向对象五大原则之开放-封闭原则(OCP)详解
2018/04/04 PHP
jQuery 可以拖动的div实现代码 脚本之家修正版
2009/06/26 Javascript
jquery键盘事件使用介绍
2011/11/01 Javascript
ExtJS下 Ext.Direct加载和提交过程排错小结
2013/04/02 Javascript
JavaScript基本数据类型及值类型和引用类型
2015/08/25 Javascript
javascript 中的 delete及delete运算符
2015/11/15 Javascript
jQuery实现的自动加载页面功能示例
2016/09/04 Javascript
js实现打地鼠小游戏
2017/02/13 Javascript
node实现的爬虫功能示例
2018/05/04 Javascript
JavaScript数组,JSON对象实现动态添加、修改、删除功能示例
2018/05/26 Javascript
vue模块移动组件的实现示例
2020/05/20 Javascript
[48:23]DOTA2上海特级锦标赛主赛事日 - 4 败者组第四轮#1COL VS EG第一局
2016/03/05 DOTA
python实现bitmap数据结构详解
2014/02/17 Python
python实现中文分词FMM算法实例
2015/07/10 Python
Python实现截屏的函数
2015/07/26 Python
一道python走迷宫算法题
2018/01/22 Python
Python清空文件并替换内容的实例
2018/10/22 Python
Python 批量刷博客园访问量脚本过程解析
2019/08/30 Python
python实现宿舍管理系统
2019/11/22 Python
如何利用Python 进行边缘检测
2020/10/14 Python
python多线程和多进程关系详解
2020/12/14 Python
CSS3+js实现简单的时钟特效
2015/03/18 HTML / CSS
Pretty Little Thing美国:时尚女性服饰
2018/08/27 全球购物
局部内部类是否可以访问非final变量?
2013/04/20 面试题
介绍一下如何优化MySql
2016/12/20 面试题
小学母亲节活动方案
2014/03/14 职场文书
我的求职择业计划书
2014/04/04 职场文书
三分钟自我介绍演讲稿
2014/08/21 职场文书
入党自荐书范文
2015/03/05 职场文书
上班迟到检讨书
2015/05/06 职场文书
Android开发EditText禁止输入监听及InputFilter字符过滤
2022/06/10 Java/Android