利用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中xrange用法分析
Apr 15 Python
对Python中数组的几种使用方法总结
Jun 28 Python
python特性语法之遍历、公共方法、引用
Aug 08 Python
python遍历小写英文字母的方法
Jan 02 Python
Python字符串逆序的实现方法【一题多解】
Feb 18 Python
用Python解数独的方法示例
Oct 24 Python
使用 django orm 写 exists 条件过滤实例
May 20 Python
使用pth文件添加Python环境变量方式
May 26 Python
浅谈Keras中shuffle和validation_split的顺序
Jun 19 Python
Python爬虫+tkinter界面实现历史天气查询的思路详解
Feb 22 Python
PyQt 如何创建自定义QWidget
Mar 24 Python
Python 如何实现文件自动去重
Jun 02 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
phpmyadmin的#1251问题
2006/11/25 PHP
php中获取关键词及所属来源搜索引擎名称的代码
2011/02/15 PHP
浅谈web上存漏洞及原理分析、防范方法(文件名检测漏洞)
2013/06/29 PHP
ajax返回值中有回车换行、空格的解决方法分享
2013/10/24 PHP
PHP base64编码后解码乱码的解决办法
2014/06/19 PHP
php遍历删除整个目录及文件的方法
2015/03/13 PHP
php无限级分类实现方法分析
2016/10/19 PHP
详解Yii2高级版引入bootstrap.js的一个办法
2017/03/21 PHP
Jsonp 跨域的原理以及Jquery的解决方案
2010/05/18 Javascript
修复IE9&safari 的sort方法
2011/10/21 Javascript
JavaScript高级程序设计 阅读笔记(七) ECMAScript中的语句
2012/02/27 Javascript
JavaScript取得鼠标绝对位置程序代码介绍
2012/09/16 Javascript
node.js操作mongoDB数据库示例分享
2014/11/26 Javascript
javascript 构造函数方式定义对象
2015/01/02 Javascript
jQuery知识点整理
2015/01/30 Javascript
jquery validate demo 基础
2015/10/29 Javascript
js控件Kindeditor实现图片自动上传功能
2020/07/20 Javascript
webpack+vue.js快速入门教程
2016/10/12 Javascript
js与jQuery实现的用户注册协议倒计时功能实例【三种方法】
2017/11/09 jQuery
使用js实现一个简单的滚动条过程解析
2019/09/10 Javascript
RxJS在TypeScript中的简单使用详解
2020/04/13 Javascript
Python探索之静态方法和类方法的区别详解
2017/10/27 Python
Python数据可视化正态分布简单分析及实现代码
2017/12/04 Python
python实现梯度下降算法
2020/03/24 Python
韩国CJ食品专卖网:CJonmart
2016/09/11 全球购物
PHP如何与mysql建立链接
2013/05/05 面试题
2013年员工自我评价范文
2013/12/27 职场文书
开办大学饮食联盟创业计划书
2014/01/29 职场文书
数控技术应用个人求职信范文
2014/02/03 职场文书
《青山处处埋忠骨》教学反思
2014/04/22 职场文书
大学优秀班集体申报材料
2014/05/23 职场文书
大学生党员学习焦裕禄精神思想汇报
2014/09/10 职场文书
2014年公司工作总结
2014/11/22 职场文书
工商局个人工作总结
2015/03/03 职场文书
简历自我评价优缺点
2015/03/11 职场文书
MySQL约束超详解
2021/09/04 MySQL