利用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 用户登录验证的小例子
Mar 06 Python
python实现的一只从百度开始不断搜索的小爬虫
Aug 13 Python
pyqt4教程之实现半透明的天气预报界面示例
Mar 02 Python
python从入门到精通(DAY 2)
Dec 20 Python
python图片验证码生成代码
Jul 02 Python
scrapy-redis的安装部署步骤讲解
Feb 27 Python
python命令行参数用法实例分析
Jun 25 Python
简单了解Python生成器是什么
Jul 02 Python
基于python实现把图片转换成素描
Nov 13 Python
Python是什么 Python的用处
May 26 Python
Python实现画图软件功能方法详解
Jul 28 Python
python 合并多个excel中同名的sheet
Jan 22 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
《OVERLORD》手游英文版即将上线 手机上也能扮演骨王
2020/04/09 日漫
真正根据utf8编码的规律来进行截取字符串的函数(utf8版sub_str )
2012/10/24 PHP
PHP中copy on write写时复制机制介绍
2014/05/13 PHP
浅谈php命令行用法
2015/02/04 PHP
如何在旧的PHP系统中使用PHP 5.3之后的库
2015/12/02 PHP
Thinkphp5框架实现图片、音频和视频文件的上传功能详解
2019/08/27 PHP
关于jQuery的inArray 方法介绍
2011/10/08 Javascript
Javascript基础教程之switch语句
2015/01/18 Javascript
JavaScript监听文本框回车事件并过滤文本框空格的方法
2015/04/16 Javascript
JavaScript中的some()方法使用详解
2015/06/09 Javascript
基于React.js实现原生js拖拽效果引发的思考
2016/03/30 Javascript
在Node.js中使用Javascript Generators详解
2016/05/05 Javascript
利用jQuery来动态为属性添加或者删除属性的简单方法
2016/12/02 Javascript
bootstrap快速制作后台界面
2016/12/05 Javascript
vue bootstrap小例子一枚
2017/06/09 Javascript
浅谈手写node可读流之流动模式
2018/06/01 Javascript
element-ui upload组件多文件上传的示例代码
2018/10/17 Javascript
你可能从未使用过的11+个JavaScript特性(小结)
2020/01/08 Javascript
如何利用JavaScript编写一个格斗小游戏
2021/01/06 Javascript
[50:38]DOTA2-DPC中国联赛 正赛 Phoenix vs CDEC BO3 第二场 3月7日
2021/03/11 DOTA
django自定义Field实现一个字段存储以逗号分隔的字符串
2014/04/27 Python
不要用强制方法杀掉python线程
2017/02/26 Python
Python实现多线程抓取网页功能实例详解
2017/06/08 Python
Java分治归并排序算法实例详解
2017/12/12 Python
python删除服务器文件代码示例
2018/02/09 Python
python实现word 2007文档转换为pdf文件
2018/03/15 Python
python网络爬虫 CrawlSpider使用详解
2019/09/27 Python
哪种Python框架适合你?简单介绍几种主流Python框架
2020/08/04 Python
为什么在使用动态 SQL 语句时必须为低层数据库对象授予权限
2012/12/13 面试题
数据库专业英语
2012/11/30 面试题
运动会通讯稿100字
2014/01/31 职场文书
债务授权委托书范本
2014/10/17 职场文书
2015年护士节慰问信
2015/03/23 职场文书
公务员的复习计划书,请收下!
2019/07/15 职场文书
评测 | 大屏显示带收音机的高端音箱,JBL TUNE2便携式插卡音箱实测
2021/04/24 无线电
微软团队与 NASA 科学家和惠普企业(HPE)的工程师合作
2022/04/21 数码科技