利用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制作花瓣网美女图片爬虫
Oct 28 Python
关于Django显示时间你应该知道的一些问题
Dec 25 Python
python opencv设置摄像头分辨率以及各个参数的方法
Apr 02 Python
python实现百度语音识别api
Apr 10 Python
基于wxPython的GUI实现输入对话框(2)
Feb 27 Python
Python eval的常见错误封装及利用原理详解
Mar 26 Python
Python pandas DataFrame操作的实现代码
Jun 21 Python
python函数修饰符@的使用方法解析
Sep 02 Python
python的scipy实现插值的示例代码
Nov 12 Python
Python开发之pip安装及使用方法详解
Feb 21 Python
python中的对数log函数表示及用法
Dec 09 Python
Python 随机按键模拟2小时
Dec 30 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删除目录及目录下所有文件的方法详解
2013/06/06 PHP
使用php实现快钱支付功能(涉及到接口)
2013/07/01 PHP
PHP根据IP判断地区名信息的示例代码
2014/03/03 PHP
destoon二次开发入门示例
2014/06/20 PHP
PHP回溯法解决0-1背包问题实例分析
2015/03/23 PHP
详解PHP实现定时任务的五种方法
2016/07/25 PHP
PHP  Yii清理缓存的实现方法
2016/11/10 PHP
Laravel框架分页实现方法分析
2018/06/12 PHP
用ADODB.Stream转换
2007/01/22 Javascript
Apply an AutoFormat to an Excel Spreadsheet
2007/06/12 Javascript
Javascript学习笔记 delete运算符
2011/09/13 Javascript
js控制文本框只输入数字和小数点的方法
2015/03/10 Javascript
在JavaScript中处理时间之setMinutes()方法的使用
2015/06/11 Javascript
javascript实现base64 md5 sha1 密码加密
2015/09/09 Javascript
jQuery插件开发精品教程(让你的jQuery更上一个台阶)
2015/11/07 Javascript
JS作用域深度解析
2016/12/29 Javascript
Node.js使用orm2进行update操作时关联字段无法修改的解决方法
2017/06/13 Javascript
实例详解JavaScript中setTimeout函数的执行顺序
2017/07/12 Javascript
详解如何使用webpack+es6开发angular1.x
2017/08/16 Javascript
vue router自动判断左右翻页转场动画效果
2017/10/10 Javascript
详解React中传入组件的props改变时更新组件的几种实现方法
2018/09/13 Javascript
vue头部导航动态点击处理方法
2018/11/02 Javascript
从vue源码看props的用法
2019/01/09 Javascript
利用Node.js如何实现文件循环覆写
2019/04/05 Javascript
jQuery实现鼠标拖拽登录框移动效果
2020/09/13 jQuery
Python中Collection的使用小技巧
2014/08/18 Python
python实现的重启关机程序实例
2014/08/21 Python
Python中实现结构相似的函数调用方法
2015/03/10 Python
浅谈Python 集合(set)类型的操作——并交差
2016/06/30 Python
Python实现将一个正整数分解质因数的方法分析
2017/12/14 Python
python3使用scrapy生成csv文件代码示例
2017/12/28 Python
pytorch 在sequential中使用view来reshape的例子
2019/08/20 Python
LivingSocial英国:英国本地优惠
2019/02/22 全球购物
趣味活动策划方案
2014/02/08 职场文书
房产销售独家委托书范本
2014/10/01 职场文书
MySQL中dd::columns表结构转table过程及应用详解
2022/09/23 MySQL