教你用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编写简单爬虫资料汇总
Mar 22 Python
python模拟Django框架实例
May 17 Python
Python数据分析之真实IP请求Pandas详解
Nov 18 Python
python pygame实现五子棋小游戏
Oct 26 Python
Python flask框架post接口调用示例
Jul 03 Python
python 进程的几种创建方式详解
Aug 29 Python
Python 文件数据读写的具体实现
Jan 24 Python
python opencv 图像边框(填充)添加及图像混合的实现方法(末尾实现类似幻灯片渐变的效果)
Mar 09 Python
python使用OpenCV模块实现图像的融合示例代码
Apr 10 Python
python框架flask入门之环境搭建及开启调试
Jun 07 Python
python处理写入数据代码讲解
Oct 22 Python
python如何利用cv2模块读取显示保存图片
Jun 04 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漏洞小结
2012/02/05 PHP
php下载excel无法打开的解决方法
2013/12/24 PHP
php中apc缓存使用示例
2013/12/25 PHP
php实现基于openssl的加密解密方法
2016/09/30 PHP
PHP上传Excel文件导入数据到MySQL数据库示例
2016/10/25 PHP
php中分页及SqlHelper类用法实例
2017/01/12 PHP
php使用curl获取header检测开启GZip压缩的方法
2018/08/15 PHP
JavaScript 计算图片加载数量的代码
2011/01/01 Javascript
jquery实现邮箱自动补全功能示例分享
2014/02/17 Javascript
jQuery中innerWidth()方法用法实例
2015/01/19 Javascript
JavaScript 对象深入学习总结(经典)
2015/09/29 Javascript
详解nodejs中的process进程
2017/03/19 NodeJs
socket.io学习教程之基础介绍(一)
2017/04/29 Javascript
Javascript别踩白块儿(钢琴块儿)小游戏实现代码
2017/07/20 Javascript
Vue 2.0入门基础知识之内部指令详解
2017/10/15 Javascript
node.js将MongoDB数据同步到MySQL的步骤
2017/12/10 Javascript
解决angularjs中同步执行http请求的方法
2018/08/13 Javascript
jquery实现动态添加附件功能
2018/10/23 jQuery
基于Vue-cli快速搭建项目的完整步骤
2018/11/03 Javascript
JS中call()和apply()的功能及用法实例分析
2019/06/28 Javascript
微信小程序开发打开另一个小程序的实现方法
2020/05/17 Javascript
JavaScript中reduce()的5个基本用法示例
2020/07/19 Javascript
Python基础教程之浅拷贝和深拷贝实例详解
2017/07/15 Python
Python模拟三级菜单效果
2017/09/11 Python
Python内置模块hashlib、hmac与uuid用法分析
2018/02/12 Python
用pandas按列合并两个文件的实例
2018/04/12 Python
Python 经典算法100及解析(小结)
2019/09/13 Python
python 下 CMake 安装配置 OPENCV 4.1.1的方法
2019/09/30 Python
Pandas 缺失数据处理的实现
2019/11/04 Python
python3 Scrapy爬虫框架ip代理配置的方法
2020/01/17 Python
日本非常有名的内衣丝袜品牌:GUNZE
2017/01/06 全球购物
深入开展党的群众路线教育实践活动方案
2014/02/04 职场文书
幼儿园课题实施方案
2014/05/14 职场文书
大专生自荐书范文
2014/06/22 职场文书
辞职信格式范文
2015/05/13 职场文书
九九重阳节致辞
2015/07/31 职场文书