教你用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中的cookielib模拟登录网站
Apr 09 Python
pygame学习笔记(5):游戏精灵
Apr 15 Python
Python数据库的连接实现方法与注意事项
Feb 27 Python
Django框架使用富文本编辑器Uedit的方法分析
Jul 31 Python
Python一个简单的通信程序(客户端 服务器)
Mar 06 Python
Python基本数据结构与用法详解【列表、元组、集合、字典】
Mar 23 Python
python实现宿舍管理系统
Nov 22 Python
python 实现线程之间的通信示例
Feb 14 Python
Python *args和**kwargs用法实例解析
Mar 02 Python
python百行代码自制电脑端网速悬浮窗的实现
May 12 Python
基于Pyinstaller打包Python程序并压缩文件大小
May 28 Python
Python变量格式化输出实现原理解析
Aug 06 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新手上路(十四)
2006/10/09 PHP
php读取出一个文件夹及其子文件夹下所有文件的方法示例
2017/06/15 PHP
Laravel5.1 框架路由基础详解
2020/01/04 PHP
js变换显示图片的实例
2013/04/16 Javascript
浅析JavaScript原型继承的陷阱
2013/12/03 Javascript
JavaScript声明变量名的语法规则
2015/07/10 Javascript
AngularJS 实现按需异步加载实例代码
2015/10/18 Javascript
JavaScript记录光标在编辑器中位置的实现方法
2016/04/22 Javascript
jQuery移动端图片上传组件
2016/06/12 Javascript
Vue组件之全局组件与局部组件的使用详解
2017/10/09 Javascript
除Console.log()外更多的Javascript调试命令
2018/01/24 Javascript
在ES5与ES6环境下处理函数默认参数的实现方法
2018/05/13 Javascript
vue vue-Router默认hash模式修改为history需要做的修改详解
2018/09/13 Javascript
vue组件之间数据传递的方法实例分析
2019/02/12 Javascript
python虚拟环境 virtualenv的简单使用
2020/01/21 Javascript
手把手教您实现react异步加载高阶组件
2020/04/07 Javascript
Python base64编码解码实例
2015/06/21 Python
Python中pygame安装方法图文详解
2015/11/11 Python
Python双向循环链表实现方法分析
2018/07/30 Python
Django模板Templates使用方法详解
2019/07/19 Python
Python学习笔记之迭代器和生成器用法实例详解
2019/08/08 Python
配置python的编程环境之Anaconda + VSCode的教程
2020/03/29 Python
解析html5 canvas实现背景鼠标连线动态效果代码
2019/06/17 HTML / CSS
很酷的小工具和电子产品商城:GearBest
2016/11/19 全球购物
就业推荐自我鉴定
2013/10/06 职场文书
经济学博士求职自荐信范文
2013/11/23 职场文书
自我评价格式
2014/01/06 职场文书
个人优缺点自我评价
2014/01/27 职场文书
领导干部遵守党的政治纪律情况思想汇报
2014/09/14 职场文书
2014年团工作总结
2014/11/27 职场文书
小学教师读书笔记
2015/07/01 职场文书
少先队入队仪式主持词
2015/07/04 职场文书
党员理论学习心得体会
2016/01/21 职场文书
2019入党申请书格式
2019/06/25 职场文书
利用ajax+php实现商品价格计算
2021/03/31 PHP
MYSQL优化之数据表碎片整理详解
2022/04/03 MySQL