利用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 相关文章推荐
详解Django中的ifequal和ifnotequal标签使用
Jul 16 Python
详解MySQL数据类型int(M)中M的含义
Nov 20 Python
Python如何实现MySQL实例初始化详解
Nov 06 Python
Python编程实现蚁群算法详解
Nov 13 Python
一些Centos Python 生产环境的部署命令(推荐)
May 07 Python
Python列表生成式与生成器操作示例
Aug 01 Python
解决python xx.py文件点击完之后一闪而过的问题
Jun 24 Python
python实现简单俄罗斯方块
Mar 13 Python
Matplotlib.pyplot 三维绘图的实现示例
Jul 28 Python
Matplotlib中%matplotlib inline如何使用
Jul 28 Python
解决Python安装cryptography报错问题
Sep 03 Python
Python调用JavaScript代码的方法
Oct 27 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
ionCube 一款类似zend的PHP加密/解密工具
2010/07/25 PHP
Linux服务器下PHPMailer发送邮件失败的问题解决
2017/03/04 PHP
PHP设计模式之建造者模式(Builder)原理与用法案例详解
2019/12/12 PHP
Jquey拖拽控件Draggable使用方法(asp.net环境)
2010/09/28 Javascript
用Juery网页选项卡实现代码
2011/06/13 Javascript
Kibo 用于处理键盘事件的Javascript工具库
2011/10/28 Javascript
文本框输入时 实现自动提示(像百度、google一样)
2012/04/05 Javascript
输入自动提示搜索提示功能的使用说明:sugggestion.txt
2013/09/02 Javascript
在每个匹配元素的外部插入新元素的方法
2013/12/20 Javascript
轻松学习Javascript闭包函数
2015/12/15 Javascript
使用Object.defineProperty实现简单的js双向绑定
2016/04/15 Javascript
探索Javascript中this的奥秘
2016/12/11 Javascript
jQuery使用JSONP实现跨域获取数据的三种方法详解
2017/05/04 jQuery
React Native使用Modal自定义分享界面的示例代码
2017/10/31 Javascript
jQuery实现滚动效果
2017/11/17 jQuery
一次记住JavaScript的6个正则表达式方法
2018/02/22 Javascript
Vue实现剪贴板复制功能
2019/12/31 Javascript
js实现批量删除功能
2020/08/27 Javascript
解决谷歌搜索技术文章时打不开网页问题的python脚本
2013/02/10 Python
深入理解Django的自定义过滤器
2017/10/17 Python
使用Python读取安卓手机的屏幕分辨率方法
2018/03/31 Python
Python实现读写INI配置文件的方法示例
2018/06/09 Python
Python使用sort和class实现的多级排序功能示例
2018/08/15 Python
python调用百度REST API实现语音识别
2018/08/30 Python
python3.6编写的单元测试示例
2019/08/17 Python
Python 打印自己设计的字体的实例讲解
2021/01/04 Python
茵宝(Umbro)英国官方商店:英国足球服装生产商
2016/12/29 全球购物
业务部主管岗位职责
2014/01/29 职场文书
纪检干部对照检查材料
2014/08/22 职场文书
全国法制宣传日活动总结2014
2014/11/01 职场文书
党章党规党纪学习心得体会
2016/01/14 职场文书
幼儿园2016年感恩节活动总结
2016/04/01 职场文书
springboot集成flyway自动创表的详细配置
2021/06/26 Java/Android
Maven学习----Maven安装与环境变量配置教程
2021/06/29 Java/Android
JavaScript 数组去重详解
2021/09/15 Javascript
MySQL提取JSON字段数据实现查询
2022/04/22 MySQL