教你用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 socket C/S结构的聊天室应用实现
Nov 30 Python
用Python编写分析Python程序性能的工具的教程
Apr 01 Python
Python常见字典内建函数用法示例
May 14 Python
使用django-guardian实现django-admin的行级权限控制的方法
Oct 30 Python
python flask web服务实现更换默认端口和IP的方法
Jul 26 Python
更新pip3与pyttsx3文字语音转换的实现方法
Aug 08 Python
linux环境下安装python虚拟环境及注意事项
Jan 07 Python
浅谈django不使用restframework自定义接口与使用的区别
Jul 15 Python
PyQt5结合matplotlib绘图的实现示例
Sep 15 Python
Python机器学习之逻辑回归
May 11 Python
Django如何创作一个简单的最小程序
May 12 Python
基于Python绘制子图及子图刻度的变换等的问题
May 23 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
MYSQL数据库初学者使用指南
2006/11/16 PHP
php中操作memcached缓存进行增删改查数据的实现代码
2014/08/15 PHP
Yii实现自动加载类地图的方法
2015/04/01 PHP
laravel 解决Eloquent ORM的save方法无法插入数据的问题
2019/10/21 PHP
javascript 兼容FF的onmouseenter和onmouseleave的代码
2008/07/19 Javascript
javascript 数据类型转换(parseInt,parseFloat)
2010/07/20 Javascript
网页前端优化之滚动延时加载图片示例
2013/07/13 Javascript
JavaScript实现复制功能各浏览器支持情况实测
2013/07/18 Javascript
javascript读写json示例
2014/04/11 Javascript
jQuery实现流动虚线框的方法
2015/01/29 Javascript
JavaScript中join()方法的使用简介
2015/06/09 Javascript
JS实现数字格式千分位相互转换方法
2016/08/01 Javascript
JavaScript实现自动切换图片代码
2016/10/11 Javascript
可输入文字查找ajax下拉框控件 ComBox的实现方法
2016/10/25 Javascript
Reactjs实现通用分页组件的实例代码
2017/01/19 Javascript
webpack配置导致字体图标无法显示的解决方法
2018/03/06 Javascript
JavaScript函数的4种调用方法实例分析
2019/03/05 Javascript
js实现多个标题吸顶效果
2020/01/08 Javascript
如何通过JS实现转码与解码
2020/02/21 Javascript
JavaScript canvas实现跟随鼠标移动小球
2021/02/09 Javascript
Python中的groupby分组功能的实例代码
2018/07/11 Python
在python 不同时区之间的差值与转换方法
2019/01/14 Python
PyQt5实现简易计算器
2020/05/30 Python
Python3.8中使用f-strings调试
2019/05/22 Python
python将四元数变换为旋转矩阵的实例
2019/12/04 Python
Pytorch基本变量类型FloatTensor与Variable用法
2020/01/08 Python
如何用Python编写一个电子考勤系统
2021/02/08 Python
Sahajan美国:阿育吠陀护肤品牌
2021/01/09 全球购物
英文简历中的自我评价
2013/10/06 职场文书
营销专业应届生求职信
2013/11/26 职场文书
安全教育心得体会
2013/12/29 职场文书
门卫岗位职责说明书
2014/08/18 职场文书
群众路线个人对照检查材料
2014/09/23 职场文书
企业法人代表证明书
2014/09/27 职场文书
2014民事授权委托书范本
2014/09/29 职场文书
Qt数据库应用之实现图片转pdf
2022/06/01 Java/Android