教你用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 17 Python
剖析Django中模版标签的解析与参数传递
Jul 21 Python
详解Python中的Numpy、SciPy、MatPlotLib安装与配置
Nov 17 Python
解决Python获取字典dict中不存在的值时出错问题
Oct 17 Python
纯用NumPy实现神经网络的示例代码
Oct 24 Python
详解python列表生成式和列表生成式器区别
Mar 27 Python
Python中函数的返回值示例浅析
Aug 28 Python
Python操作redis和mongoDB的方法
Dec 19 Python
Windows上安装tensorflow  详细教程(图文详解)
Feb 04 Python
Pycharm学生免费专业版安装教程的方法步骤
Sep 24 Python
把Anaconda中的环境导入到Pycharm里面的方法步骤
Oct 30 Python
Python中基础数据类型 set集合知识点总结
Aug 02 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
千呼万唤始出来,DOTA2勇士令状不朽宝藏Ⅱ现已推出
2020/08/25 DOTA
php 仿Comsenz安装效果代码打包提供下载
2010/05/09 PHP
eaglephp使用微信api接口开发微信框架
2014/01/09 PHP
PHP实现从远程下载文件的方法
2015/03/12 PHP
php中this关键字用法分析
2016/12/07 PHP
PHP实现删除多重数组对象属性并重新赋值的方法
2017/06/07 PHP
漂亮的提示信息(带箭头)
2007/03/21 Javascript
javascript instanceof,typeof的区别
2010/03/24 Javascript
JavaScript中数组对象的那些自带方法介绍
2013/03/12 Javascript
完善的jquery处理机制
2016/02/21 Javascript
自动完成的搜索框javascript实现
2016/02/26 Javascript
AngularJS中run方法的巧妙运用
2017/01/04 Javascript
Javascript仿京东放大镜的效果
2017/03/01 Javascript
Vue.Js中的$watch()方法总结
2017/03/23 Javascript
express框架实现基于Websocket建立的简易聊天室
2017/08/10 Javascript
浅谈如何通过node.js对数据进行MD5加密
2018/05/16 Javascript
Vue 项目分环境打包的方法示例
2018/08/03 Javascript
详解如何在Vue项目中发送jsonp请求
2019/10/25 Javascript
[02:05]2014DOTA2西雅图邀请赛 专访啸天mik夫妻档
2014/07/08 DOTA
使用pycharm生成代码模板的实例
2018/05/23 Python
解决python3 urllib 链接中有中文的问题
2018/07/16 Python
Python XlsxWriter模块Chart类用法实例分析
2019/03/11 Python
Python中的pathlib.Path为什么不继承str详解
2019/06/23 Python
Python爬虫动态ip代理防止被封的方法
2019/07/07 Python
基于python 微信小程序之获取已存在模板消息列表
2019/08/05 Python
使用Pycharm在运行过程中,查看每个变量的操作(show variables)
2020/06/08 Python
CSS实现进度条和订单进度条的示例
2020/11/05 HTML / CSS
使用HTML5中的contentEditable来将多行文本自动增高
2016/03/01 HTML / CSS
使用html5实现表格实现标题合并的实例代码
2019/05/13 HTML / CSS
美国家庭鞋店:Shoe Sensation
2019/09/27 全球购物
Charles&Keith美国官方网站:新加坡快时尚鞋类和配饰零售商
2019/11/27 全球购物
员工培训邀请函
2014/02/02 职场文书
应用外语系自荐信
2014/06/26 职场文书
保留意见审计报告
2015/06/05 职场文书
python基础之文件处理知识总结
2021/05/23 Python
win10搭建配置ftp服务器的方法
2022/08/05 Servers