利用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 相关文章推荐
Web服务器框架 Tornado简介
Jul 16 Python
Python2.x中str与unicode相关问题的解决方法
Mar 30 Python
Python fileinput模块使用实例
Jun 03 Python
高效测试用例组织算法pairwise之Python实现方法
Jul 19 Python
Python3实现发送QQ邮件功能(html)
Dec 15 Python
Python实现数据可视化看如何监控你的爬虫状态【推荐】
Aug 10 Python
python提取具有某种特定字符串的行数据方法
Dec 11 Python
python3在同一行内输入n个数并用列表保存的例子
Jul 20 Python
django model的update时auto_now不被更新的原因及解决方式
Apr 01 Python
Python 随机生成测试数据的模块:faker基本使用方法详解
Apr 09 Python
Pytorch实验常用代码段汇总
Nov 19 Python
Python实现一个论文下载器的过程
Jan 18 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
《逃离塔科夫》——“萌新劝退,老手自嗨”的硬核FPS游戏
2020/04/03 其他游戏
透析PHP的配置文件php.ini
2006/10/09 PHP
用PHP中的 == 运算符进行字符串比较
2006/11/26 PHP
php 下载保存文件保存到本地的两种实现方法
2013/08/12 PHP
php简单smarty入门程序实例
2015/06/11 PHP
Linux下编译redis和phpredis的方法
2016/04/07 PHP
PHP数据的提交与过滤基本操作实例详解
2016/11/11 PHP
PHP中TP5 上传文件的实例详解
2017/07/31 PHP
ThinkPHP框架获取最后一次执行SQL语句及变量调试简单操作示例
2018/06/13 PHP
Javascript 检测、添加、移除样式(className)函数代码
2009/09/08 Javascript
JavaScript DOM 学习第二章 编辑文本
2010/02/19 Javascript
jQuery学习笔记之toArray()
2014/06/09 Javascript
jQuery实现用户输入自动完成功能
2017/02/13 Javascript
JS获得一个对象的所有属性和方法实例
2017/02/21 Javascript
详解node.js搭建代理服务器请求数据
2017/04/08 Javascript
bootstrap table表格使用方法详解
2017/04/26 Javascript
jQuery创建及操作xml格式数据示例
2018/05/26 jQuery
js实现一个页面多个倒计时的3种方法
2019/02/25 Javascript
Angular4.0动画操作实例详解
2019/05/10 Javascript
javascript实现导航栏分页效果
2019/06/27 Javascript
JS错误处理与调试操作实例分析
2020/04/13 Javascript
JS数组Reduce方法功能与用法实例详解
2020/04/29 Javascript
python实现的一个火车票转让信息采集器
2014/07/09 Python
Python cookbook(数据结构与算法)从字典中提取子集的方法示例
2018/03/22 Python
Python面向对象之继承和组合用法实例分析
2018/08/27 Python
Python 实现日志同时输出到屏幕和文件
2020/02/19 Python
canvas实现漂亮的下雨效果的示例
2018/04/18 HTML / CSS
美国著名的团购网站:Woot
2016/08/02 全球购物
编写一子程序,将一链表倒序,即使链表表尾变表头,表头变表尾
2016/02/10 面试题
大学毕业的自我鉴定
2013/10/08 职场文书
学校安全教育月活动总结
2014/07/07 职场文书
医学专业大学生求职信
2014/07/12 职场文书
学校总务处领导班子民主生活会对照检查材料思想汇报
2014/09/27 职场文书
对党的十八届四中全会的期盼
2014/10/17 职场文书
教代会闭幕词
2015/01/28 职场文书
责任书范本大全
2015/05/11 职场文书