利用Python为iOS10生成图标和截屏


Posted in Python onSeptember 24, 2016

简介

这两天更新完Xcode8之后发现Xcode对图标的要求又有了变化,之前用的一个小应用“IconKit”还没赶上节奏,已经不能满足Xcode8的要求了。

于是就想起来用Python自己做个脚本来生成图标。

其实这个脚本很早就写了,现在为了适应iOS10,就修改完善下,并且放到了GitHub。

可以看看效果图:

 1.png

代码:

#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一下,也欢迎改进,代码简单易懂加了注释。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python定时执行指定函数的方法
May 27 Python
在Django中创建URLconf相关的通用视图的方法
Jul 20 Python
python处理csv数据动态显示曲线实例代码
Jan 23 Python
Python实现抓取HTML网页并以PDF文件形式保存的方法
May 08 Python
python看某个模块的版本方法
Oct 16 Python
python ImageDraw类实现几何图形的绘制与文字的绘制
Feb 26 Python
浅谈Python的方法解析顺序(MRO)
Mar 05 Python
Python matplotlib 绘制双Y轴曲线图的示例代码
Jun 12 Python
Python实时监控网站浏览记录实现过程详解
Jul 14 Python
Python利用pip安装tar.gz格式的离线资源包
Sep 14 Python
python openCV自制绘画板
Oct 27 Python
Python opencv缺陷检测的实现及问题解决
Apr 24 Python
使用Python多线程爬虫爬取电影天堂资源
Sep 23 #Python
Python 爬虫模拟登陆知乎
Sep 23 #Python
python 自动化将markdown文件转成html文件的方法
Sep 23 #Python
Python增量循环删除MySQL表数据的方法
Sep 23 #Python
教你用Python脚本快速为iOS10生成图标和截屏
Sep 22 #Python
Python 制作糗事百科爬虫实例
Sep 22 #Python
Python 使用SMTP发送邮件的代码小结
Sep 21 #Python
You might like
php读取3389的脚本
2014/05/06 PHP
PHP实现CSV文件的导入和导出类
2015/03/24 PHP
ECSHOP在PHP5.5及高版本上报错的解决方法
2015/08/31 PHP
Zend Framework框架之Zend_Mail实现发送Email邮件验证功能及解决标题乱码的方法
2016/03/21 PHP
表单的一些基本用法与技巧
2006/07/15 Javascript
将函数的实际参数转换成数组的方法
2010/01/25 Javascript
silverlight线程与基于事件驱动javascript引擎(实现轨迹回放功能)
2011/08/09 Javascript
js获取下拉列表框中的value和text的值示例代码
2014/01/11 Javascript
基于javascript实现动态时钟效果
2020/08/18 Javascript
JavaScript学习小结之被嫌弃的eval函数和with语句实例详解
2016/08/01 Javascript
Web安全测试之XSS实例讲解
2016/08/15 Javascript
JS填写银行卡号每隔4位数字加一个空格
2016/12/19 Javascript
基于对象合并功能的实现示例
2017/10/10 Javascript
在Create React App中使用CSS Modules的方法示例
2019/01/15 Javascript
layui动态渲染生成select的option值方法
2019/09/23 Javascript
Openlayers绘制地图标注
2020/09/28 Javascript
python实现读取并显示图片的两种方法
2017/01/13 Python
单链表反转python实现代码示例
2018/02/08 Python
基于数据归一化以及Python实现方式
2018/07/11 Python
Python实现端口检测的方法
2018/07/24 Python
python读取图片并修改格式与大小的方法
2018/07/24 Python
python cs架构实现简单文件传输
2020/03/20 Python
python语音识别实践之百度语音API
2018/08/30 Python
Python利用scapy实现ARP欺骗的方法
2019/07/23 Python
Python换行与不换行的输出实例
2020/02/19 Python
Python实现淘宝秒杀功能的示例代码
2021/01/19 Python
Python爬取你好李焕英豆瓣短评生成词云的示例代码
2021/02/24 Python
html5清空画布方法(三种)
2017/10/16 HTML / CSS
SKECHERS官方旗舰店:美国舒适运动休闲品牌
2017/12/22 全球购物
J2SDK1.5与J2SDK5.0有什么区别
2012/09/19 面试题
得到Class的三个过程是什么
2012/08/10 面试题
英语教育专业毕业生求职信
2014/08/28 职场文书
会议承办单位欢迎词
2019/07/09 职场文书
启动Tomcat时出现大量乱码的解决方法
2021/06/21 Java/Android
Java实现多文件上传功能
2021/06/30 Java/Android
Python帮你解决手机qq微信内存占用太多问题
2022/02/15 Python