1. python 环境自己配置(支持windows Mac )

2. 把所有的 plist  和 大图片放到一个目录下

3.如果添加了 系统环境变量 就直接双击运行脚本,如果没有设置,把脚本拽到DOS窗口下运行 就OK了

4. http://download.csdn.net/detail/wanggan768q/7411533  (支持 windows)

5.http://download.csdn.net/detail/wanggan768q/7432769 必须安装库

  1. #!python
  2. import os,sys
  3. from xml.etree import ElementTree
  4. from PIL import Image
  5.  
  6. def endWith(s,*endstring):
  7. array = map(s.endswith,endstring)
  8. if True in array:
  9. return True
  10. else:
  11. return False
  12.  
  13. # Get the all files & directories in the specified directory (path).
  14. def get_recursive_file_list(path):
  15. current_files = os.listdir(path)
  16. all_files = []
  17. for file_name in current_files:
  18. full_file_name = os.path.join(path, file_name)
  19. if endWith(full_file_name,'.plist'):
  20. full_file_name = full_file_name.replace('.plist','')
  21. all_files.append(full_file_name)
  22.  
  23. if os.path.isdir(full_file_name):
  24. next_level_files = get_recursive_file_list(full_file_name)
  25. all_files.extend(next_level_files)
  26.  
  27. return all_files
  28.  
  29. def tree_to_dict(tree):
  30. d = {}
  31. for index, item in enumerate(tree):
  32. if item.tag == 'key':
  33. if tree[index+1].tag == 'string':
  34. d[item.text] = tree[index + 1].text
  35. elif tree[index + 1].tag == 'true':
  36. d[item.text] = True
  37. elif tree[index + 1].tag == 'false':
  38. d[item.text] = False
  39. elif tree[index+1].tag == 'dict':
  40. d[item.text] = tree_to_dict(tree[index+1])
  41. return d
  42.  
  43. def gen_png_from_plist(plist_filename, png_filename):
  44. file_path = plist_filename.replace('.plist', '')
  45. big_image = Image.open(png_filename)
  46. root = ElementTree.fromstring(open(plist_filename, 'r').read())
  47. plist_dict = tree_to_dict(root[0])
  48. to_list = lambda x: x.replace('{','').replace('}','').split(',')
  49. for k,v in plist_dict['frames'].items():
  50. rectlist = to_list(v['frame'])
  51. width = int( rectlist[3] if v['rotated'] else rectlist[2] )
  52. height = int( rectlist[2] if v['rotated'] else rectlist[3] )
  53. box=(
  54. int(rectlist[0]),
  55. int(rectlist[1]),
  56. int(rectlist[0]) + width,
  57. int(rectlist[1]) + height,
  58. )
  59. sizelist = [ int(x) for x in to_list(v['sourceSize'])]
  60. rect_on_big = big_image.crop(box)
  61.  
  62. if v['rotated']:
  63. rect_on_big = rect_on_big.rotate(90)
  64.  
  65. result_image = Image.new('RGBA', sizelist, (0,0,0,0))
  66. if v['rotated']:
  67. result_box=(
  68. ( sizelist[0] - height )/2,
  69. ( sizelist[1] - width )/2,
  70. ( sizelist[0] + height )/2,
  71. ( sizelist[1] + width )/2
  72. )
  73. else:
  74. result_box=(
  75. ( sizelist[0] - width )/2,
  76. ( sizelist[1] - height )/2,
  77. ( sizelist[0] + width )/2,
  78. ( sizelist[1] + height )/2
  79. )
  80. result_image.paste(rect_on_big, result_box, mask=0)
  81.  
  82. if not os.path.isdir(file_path):
  83. os.mkdir(file_path)
  84. outfile = (file_path+'/' + k).replace('gift_', '')
  85. print outfile, "generated"
  86. result_image.save(outfile)
  87.  
  88. if __name__ == '__main__':
  89.  
  90. currtenPath = os.getcwd()
  91. allPlistArray = get_recursive_file_list(currtenPath)
  92.  
  93. for plist in allPlistArray:
  94. filename = plist
  95. print filename
  96. plist_filename = filename + '.plist'
  97. png_filename = filename + '.png'
  98. if (os.path.exists(plist_filename) and os.path.exists(png_filename)):
  99. gen_png_from_plist( plist_filename, png_filename )
  100. else:
  101. print "make sure you have boith plist and png files in the same directory"

根据 plist 还原 图片的更多相关文章

  1. 将图片写入二进制文件,再从二进制文件还原图片(c++)

    #include "string" #include "iostream" #include "fstream" using namespa ...

  2. 用 opencv和numpy进行图片和字符串互转,并保存至 json

    用 opencv和numpy进行图片和字符串互转,并保存至 json 转至 https://zhuanlan.zhihu.com/p/27349847 受 用 base64 进行图片和字符串互转,并保 ...

  3. BMCP位图图片压缩算法

    什么是位图?位图也称像素图像或点阵图像,是由多个点组成的,这些点被称为像素.位图可以模仿照片的真实效果,具有表现力强.细腻.层次多和细节多等优点. 图片的压缩格式:在Windows系统中,我们常见的b ...

  4. (4)Microsoft office Word 2013版本操作入门_插入图片及图片的排版

    1.word中插入图片和文绕图 1.1插入图片 :点击[插入]-->[图片] 或者 [联机图片]从网上选择. 1.2文字环绕: [格式] --->点击[位置]   .[自动换行]  进行图 ...

  5. iOS transform解决连续多次旋转缩放,实现图片旋转缩放效果

    一.需求 实现imageView的缩放旋转效果,一般有两种方式: 1.底层加scrollview,利用scrollview的属性实现.(推荐这种,这是我比较后发现的,手势做缩放旋转会有点弊端) 2.利 ...

  6. 如何用Jquery做图片展示效果

    一. 前言 到底用JQuery做出怎样的展示效果? 让我们先来看一下!网页加载时,如图所示: 二.本人思路 这个效果初学者看起来好像有点复杂,其实不太难,关键是理清思路,从后端的数据库中找出我们要展示 ...

  7. tf.nn.conv2d卷积函数之图片轮廓提取

    一.tensorflow中二维卷积函数的参数含义:def conv2d(input, filter, strides, padding, use_cudnn_on_gpu=True, data_for ...

  8. 极验反爬虫防护分析之slide验证方式下图片的处理及滑动轨迹的生成思路

    本文要分享的内容是去年为了抢鞋而分析 极验(GeeTest)反爬虫防护的笔记,由于篇幅较长(为了多混点CB)我会按照我的分析顺序,分成如下四个主题与大家分享: 极验反爬虫防护分析之交互流程分析 极验反 ...

  9. Python批量图片去水印,提高工作效率

    ​平常工作中,有时为了采用网络的一些素材,但这些素材往往被打了水印,如果我们不懂PS就无法去掉水印,或者无法批量去掉水印.这些就很影响我们的工作效率. 今天我们就一起来,用Python + OpenC ...

随机推荐

  1. ThinkPHP的调用css,js和图片的路径

    按网上的说法,在根目录下建了一个Public目录,把css,js和图片放到Public目录下,然后用__PUBLIC__/...或__ROOT__/Public/...调用.但是发现无论如何改路径都无 ...

  2. 【移动端debug-1】css3中box-shadow的溢出问题

    今天做项目遇到一个box-shadow的溢出父容器的问题,如下面的代码中,子容器inner的box-shadow在没有任何设置的情况下是溢出父容器的. 代码: <!DOCTYPE html> ...

  3. 转---秒杀多线程第十二篇 多线程同步内功心法——PV操作上 (续)

    PV操作的核心就是 PV操作可以同时起到同步与互斥的作用. 1.同步就是通过P操作获取信号量,V操作释放信号量来进行. 2.互斥其实就是,同时操作P操作,结束后进行V操作即可做到. Java上实现PV ...

  4. logstash收集MySQL慢查询日志

    #此处以收集mysql慢查询日志为准,根据文件名不同添加不同的字段值input { file { path => "/data/order-slave-slow.log" t ...

  5. hive 一次性命令

    1.用hive查询,而不进入hive cli,查询后的值可以保存到文件中 #使用参数-e [hadoop@bigdata-senior01 ~]$ hive -e "select * fro ...

  6. 【刷题】洛谷 P3676 小清新数据结构题

    题目背景 本题时限2s,内存限制256M 题目描述 在很久很久以前,有一棵n个点的树,每个点有一个点权. 现在有q次操作,每次操作是修改一个点的点权或指定一个点,询问以这个点为根时每棵子树点权和的平方 ...

  7. byte数组转float实现与byte转换其它类型时进行&运算原理

    下面是将byte数组转换为float的实现 public static float getFloat(byte[] b) { int accum = 0; accum = accum|(b[0] &a ...

  8. ping: unknown host 解决办法

    如果ping命令返回如下错误,那主要的可能性就是系统的DNS设置有误. [root@CentOS5 ~]# ping www.sina.com.cn ping: unknown host www.si ...

  9. 【loj6436】【pkusc2018】神仙的游戏

    Portal --> pkuscD2T2(loj6436) Solution 个人觉得是道很好的法法塔题qwq 一开始的时候想偏了想到了另一种法法塔处理字符串匹配之类的奇怪技巧(万径人踪灭qwq ...

  10. 《JavaScript高级程序设计(第三版)》-3

    相等操作符 相等和不相等 在转换不同的数据类型时,相等和不想等操作符遵循下面基本规则: 如果有一个操作符数是布尔值,则在比较相等性之前先将其转换为数值——false转换为0,而true转换为1: 如果 ...