利用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系列之浅谈pickle模块封装和拆封数据对象的方法
May 23 Python
python的迭代器与生成器实例详解
Jul 16 Python
Python创建xml的方法
Mar 10 Python
在Linux下使用Python的matplotlib绘制数据图的教程
Jun 11 Python
Python的collections模块中的OrderedDict有序字典
Jul 07 Python
Python基于回溯法解决01背包问题实例
Dec 06 Python
python3对接mysql数据库实例详解
Apr 30 Python
Django 迁移、操作数据库的方法
Aug 02 Python
如何在python中判断变量的类型
Jul 29 Python
Opencv python 图片生成视频的方法示例
Nov 18 Python
python3中数组逆序输出方法
Dec 01 Python
如何用Python搭建gRPC服务
Jun 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
Base64在线编码解码实现代码 演示与下载
2011/01/08 PHP
解析linux下安装memcacheq(mcq)全过程笔记
2013/06/27 PHP
php使用json_encode对变量json编码
2014/04/07 PHP
浅谈php冒泡排序
2014/12/30 PHP
整理php防注入和XSS攻击通用过滤
2015/09/13 PHP
jQuery的学习步骤
2011/02/23 Javascript
JavaScript中的变量声明早于赋值分析
2012/03/01 Javascript
关于jquery css的使用介绍
2013/04/18 Javascript
JS获取几种URL地址的方法小结
2014/02/26 Javascript
javascript实现时间格式输出FormatDate函数
2015/01/13 Javascript
Javascript基础教程之while语句
2015/01/18 Javascript
jquery实现的Accordion折叠面板效果代码
2015/09/02 Javascript
老生常谈combobox和combotree模糊查询
2017/04/17 Javascript
Vue.js学习教程之列表渲染详解
2017/05/17 Javascript
简述jQuery Easyui一些用法
2017/08/01 jQuery
Three.js基础学习之场景对象
2017/09/27 Javascript
微信小程序 scroll-view实现锚点滑动的示例
2017/12/06 Javascript
JS实现横向轮播图(初级版)
2020/06/24 Javascript
[01:28:43]2014 DOTA2华西杯精英邀请赛5 24 DK VS CIS
2014/05/25 DOTA
[04:52]2015国际邀请赛LGD战队晋级之路
2015/08/14 DOTA
Python中函数参数设置及使用的学习笔记
2016/05/03 Python
浅谈Python 对象内存占用
2016/07/15 Python
浅谈python中真正关闭socket的方法
2018/12/18 Python
PyTorch搭建多项式回归模型(三)
2019/05/22 Python
用python对excel查重
2020/12/07 Python
详解移动端HTML5音频与视频问题及解决方案
2018/08/22 HTML / CSS
中国排名第一的外贸销售网站:LightInTheBox.com(兰亭集势)
2016/10/28 全球购物
简历的自我评价
2014/02/03 职场文书
向领导表决心的话
2014/03/11 职场文书
竞聘书格式及范文
2014/03/31 职场文书
公司合作意向书
2014/04/01 职场文书
个人授权委托书
2014/09/15 职场文书
小学数学教师研修日志
2015/11/13 职场文书
mysql知识点整理
2021/04/05 MySQL
MySQL 使用事件(Events)完成计划任务
2021/05/24 MySQL
科普 | 业余无线电知识-波段篇
2022/02/18 无线电