教你用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抽象基类用法实例分析
Jun 04 Python
Python连接MySQL并使用fetchall()方法过滤特殊字符
Mar 13 Python
Python中字符串的格式化方法小结
May 03 Python
简单了解Django模板的使用
Dec 20 Python
使用Python读取大文件的方法
Feb 11 Python
使用python读取csv文件快速插入数据库的实例
Jun 21 Python
Python字典的基本用法实例分析【创建、增加、获取、修改、删除】
Mar 05 Python
浅谈Python大神都是这样处理XML文件的
May 31 Python
使用python来调用CAN通讯的DLL实现方法
Jul 03 Python
在python3中实现查找数组中最接近与某值的元素操作
Feb 29 Python
python 3.8.3 安装配置图文教程
May 21 Python
pycharm2020.2 配置使用的方法详解
Sep 16 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中memcache的应用
2013/06/18 PHP
PHP的PSR规范中文版
2013/09/28 PHP
windows下apache搭建php开发环境
2015/08/27 PHP
PHP魔术方法之__call与__callStatic使用方法
2017/07/23 PHP
Javascript & DHTML 实例编程(教程)DOM基础和基本API
2007/06/02 Javascript
jquery怎样实现ajax联动框(二)
2013/03/08 Javascript
JQUERY 获取IFrame中对象及获取其父窗口中对象示例
2013/08/19 Javascript
Vue.js bootstrap前端实现分页和排序
2017/03/10 Javascript
利用vue和element-ui设置表格内容分页的实例
2018/03/02 Javascript
vue使用监听实现全选反选功能
2018/07/06 Javascript
js中怎么判断两个字符串相等的实例
2019/01/17 Javascript
vue项目引入ts步骤(小结)
2019/10/31 Javascript
pymssql ntext字段调用问题解决方法
2008/12/17 Python
Python三元运算实现方法
2015/01/12 Python
Python基于Tkinter实现的记事本实例
2015/06/17 Python
利用Python抓取行政区划码的方法
2016/11/28 Python
Python爬虫抓取技术的一些经验
2019/07/12 Python
django中使用POST方法获取POST数据
2019/08/20 Python
详解Django自定义图片和文件上传路径(upload_to)的2种方式
2020/12/01 Python
基于HTML5新特性Mutation Observer实现编辑器的撤销和回退操作
2016/01/11 HTML / CSS
video实现有声音自动播放的实现方法
2020/05/20 HTML / CSS
HTML5跳转小程序wx-open-launch-weapp的示例代码
2020/07/16 HTML / CSS
德国领先的大尺码和超大尺码男装在线零售商:Bigtex
2019/06/22 全球购物
Swanson中国官网:美国斯旺森健康产品公司
2021/03/01 全球购物
经济系大学生求职信
2013/10/01 职场文书
主持人婚宴答谢词
2014/01/28 职场文书
学校文明单位申报材料
2014/05/06 职场文书
赔偿协议书范本
2014/09/12 职场文书
2015年119消防宣传日活动总结
2015/03/24 职场文书
2015年三年级班主任工作总结
2015/05/21 职场文书
大学新生入学感想
2015/08/07 职场文书
大队委员竞选演讲稿
2015/11/20 职场文书
如何用PHP实现多线程编程
2021/05/26 PHP
解决使用了nginx获取IP地址都是127.0.0.1 的问题
2021/09/25 Servers
Golang流模式之grpc的四种数据流
2022/04/13 Golang
Vue组件化(ref,props, mixin,.插件)详解
2022/05/15 Vue.js