转载备忘
另外 应对不同格式的json,需要自己修改内容,比如我的就找不到res这个key
问题:
1 json下载出来如果decode报错,用nodepad++ 转存为无dom utf8格式就能正常用json库操作了
原作者的github仓库,我fork了
Python切割图集
原创L牵蜗牛看世界 发布于2018-09-21 09:33:09 阅读数 1016
使用shoebox
官网地址: http://renderhjs.net/shoebox/
备注: 用完之后发现这个软件贼几把强大,可惜我有些有字的图片都会被割开,所以用了json的脚本,
pip install Image就能用了, 2.7的版本
Json格式
<span style="color:rgba(0, 0, 0, 0.75)"><span style="color:#000000"><code class="language-py"><span style="color:#5c6370"># -*- coding: utf-8 -*-</span>
<span style="color:#c678dd">import</span> os<span style="color:#999999">,</span>sys
<span style="color:#c678dd">import</span> json
<span style="color:#c678dd">import</span> os
<span style="color:#c678dd">import</span> os<span style="color:#999999">.</span>path
<span style="color:#c678dd">from</span> PIL <span style="color:#c678dd">import</span> Image
<span style="color:#c678dd">def</span> <span style="color:#61aeee">json_to_dict</span><span style="color:#999999">(</span>json_filename<span style="color:#999999">)</span><span style="color:#999999">:</span>
json_file <span style="color:#669900">=</span> <span style="color:#669900">open</span><span style="color:#999999">(</span>json_filename<span style="color:#999999">,</span> <span style="color:#669900">'r'</span><span style="color:#999999">)</span>
all_pic_dic <span style="color:#669900">=</span> json<span style="color:#999999">.</span>load<span style="color:#999999">(</span>json_file<span style="color:#999999">)</span>
all_item_list <span style="color:#669900">=</span> <span style="color:#999999">[</span><span style="color:#999999">]</span>
<span style="color:#c678dd">for</span> one_pic_item <span style="color:#c678dd">in</span> all_pic_dic<span style="color:#999999">[</span><span style="color:#669900">'res'</span><span style="color:#999999">]</span><span style="color:#999999">:</span>
one_json_item <span style="color:#669900">=</span> all_pic_dic<span style="color:#999999">[</span><span style="color:#669900">'res'</span><span style="color:#999999">]</span><span style="color:#999999">[</span>one_pic_item<span style="color:#999999">]</span>
one_item <span style="color:#669900">=</span> <span style="color:#999999">{</span><span style="color:#999999">}</span>
one_item<span style="color:#999999">[</span><span style="color:#669900">'name'</span><span style="color:#999999">]</span> <span style="color:#669900">=</span> one_pic_item<span style="color:#999999">.</span>strip<span style="color:#999999">(</span><span style="color:#999999">)</span><span style="color:#999999">.</span>lstrip<span style="color:#999999">(</span><span style="color:#999999">)</span><span style="color:#999999">.</span>rstrip<span style="color:#999999">(</span><span style="color:#669900">','</span><span style="color:#999999">)</span>
one_item<span style="color:#999999">[</span><span style="color:#669900">'x'</span><span style="color:#999999">]</span> <span style="color:#669900">=</span> one_json_item<span style="color:#999999">[</span><span style="color:#669900">'x'</span><span style="color:#999999">]</span>
one_item<span style="color:#999999">[</span><span style="color:#669900">'y'</span><span style="color:#999999">]</span> <span style="color:#669900">=</span> one_json_item<span style="color:#999999">[</span><span style="color:#669900">'y'</span><span style="color:#999999">]</span>
one_item<span style="color:#999999">[</span><span style="color:#669900">'w'</span><span style="color:#999999">]</span> <span style="color:#669900">=</span> one_json_item<span style="color:#999999">[</span><span style="color:#669900">'w'</span><span style="color:#999999">]</span>
one_item<span style="color:#999999">[</span><span style="color:#669900">'h'</span><span style="color:#999999">]</span> <span style="color:#669900">=</span> one_json_item<span style="color:#999999">[</span><span style="color:#669900">'h'</span><span style="color:#999999">]</span>
all_item_list<span style="color:#999999">.</span>append<span style="color:#999999">(</span>one_item<span style="color:#999999">)</span>
<span style="color:#c678dd">return</span> all_item_list
<span style="color:#c678dd">def</span> <span style="color:#61aeee">gen_png_from_json</span><span style="color:#999999">(</span>folder_name<span style="color:#999999">,</span> json_filename<span style="color:#999999">,</span> png_filename<span style="color:#999999">)</span><span style="color:#999999">:</span>
big_image <span style="color:#669900">=</span> Image<span style="color:#999999">.</span><span style="color:#669900">open</span><span style="color:#999999">(</span>png_filename<span style="color:#999999">)</span>
all_item_list <span style="color:#669900">=</span> json_to_dict<span style="color:#999999">(</span>json_filename<span style="color:#999999">)</span>
<span style="color:#c678dd">print</span> <span style="color:#669900">'gen_png_from_json:'</span> <span style="color:#669900">+</span> folder_name
<span style="color:#5c6370">#清理掉原目录</span>
<span style="color:#c678dd">if</span> <span style="color:#669900">not</span> os<span style="color:#999999">.</span>path<span style="color:#999999">.</span>isdir<span style="color:#999999">(</span>folder_name<span style="color:#999999">)</span><span style="color:#999999">:</span>
<span style="color:#5c6370">#os.removedirs(folder_name)</span>
os<span style="color:#999999">.</span>mkdir<span style="color:#999999">(</span>folder_name<span style="color:#999999">)</span>
<span style="color:#c678dd">for</span> i<span style="color:#999999">,</span> one_item_data <span style="color:#c678dd">in</span> <span style="color:#669900">enumerate</span><span style="color:#999999">(</span>all_item_list<span style="color:#999999">)</span><span style="color:#999999">:</span>
file_name <span style="color:#669900">=</span> one_item_data<span style="color:#999999">[</span><span style="color:#669900">'name'</span><span style="color:#999999">]</span>
x <span style="color:#669900">=</span> one_item_data<span style="color:#999999">[</span><span style="color:#669900">'x'</span><span style="color:#999999">]</span>
y <span style="color:#669900">=</span> one_item_data<span style="color:#999999">[</span><span style="color:#669900">'y'</span><span style="color:#999999">]</span>
w <span style="color:#669900">=</span> one_item_data<span style="color:#999999">[</span><span style="color:#669900">'w'</span><span style="color:#999999">]</span>
h <span style="color:#669900">=</span> one_item_data<span style="color:#999999">[</span><span style="color:#669900">'h'</span><span style="color:#999999">]</span>
<span style="color:#5c6370">#设置图像裁剪区域 (x左上,y左上,x右下,y右下)</span>
image_box <span style="color:#669900">=</span> <span style="color:#999999">[</span>x<span style="color:#999999">,</span> y<span style="color:#999999">,</span> x <span style="color:#669900">+</span> w <span style="color:#999999">,</span> y <span style="color:#669900">+</span> h <span style="color:#999999">]</span>
one_pic <span style="color:#669900">=</span> big_image<span style="color:#999999">.</span>crop<span style="color:#999999">(</span>image_box<span style="color:#999999">)</span>
one_pic<span style="color:#999999">.</span>save<span style="color:#999999">(</span>folder_name <span style="color:#669900">+</span> <span style="color:#669900">"/"</span> <span style="color:#669900">+</span> file_name <span style="color:#669900">+</span> <span style="color:#669900">'.png'</span><span style="color:#999999">)</span> <span style="color:#5c6370"># 存储裁剪得到的图像</span>
<span style="color:#5c6370">#print one_item_data</span>
</code></span></span>
plist格式
<span style="color:rgba(0, 0, 0, 0.75)"><span style="color:#000000"><code class="language-py"><span style="color:#5c6370"># -*- co</span>
<span style="color:#5c6370">#!python</span>
<span style="color:#c678dd">import</span> os<span style="color:#999999">,</span>sys
<span style="color:#c678dd">from</span> xml<span style="color:#999999">.</span>etree <span style="color:#c678dd">import</span> ElementTree
<span style="color:#c678dd">from</span> PIL <span style="color:#c678dd">import</span> Image
<span style="color:#c678dd">def</span> <span style="color:#61aeee">tree_to_dict</span><span style="color:#999999">(</span>tree<span style="color:#999999">)</span><span style="color:#999999">:</span>
d <span style="color:#669900">=</span> <span style="color:#999999">{</span><span style="color:#999999">}</span>
<span style="color:#c678dd">for</span> index<span style="color:#999999">,</span> item <span style="color:#c678dd">in</span> <span style="color:#669900">enumerate</span><span style="color:#999999">(</span>tree<span style="color:#999999">)</span><span style="color:#999999">:</span>
<span style="color:#c678dd">if</span> item<span style="color:#999999">.</span>tag <span style="color:#669900">==</span> <span style="color:#669900">'key'</span><span style="color:#999999">:</span>
<span style="color:#c678dd">if</span> tree<span style="color:#999999">[</span>index<span style="color:#669900">+</span><span style="color:#98c379">1</span><span style="color:#999999">]</span><span style="color:#999999">.</span>tag <span style="color:#669900">==</span> <span style="color:#669900">'string'</span><span style="color:#999999">:</span>
d<span style="color:#999999">[</span>item<span style="color:#999999">.</span>text<span style="color:#999999">]</span> <span style="color:#669900">=</span> tree<span style="color:#999999">[</span>index <span style="color:#669900">+</span> <span style="color:#98c379">1</span><span style="color:#999999">]</span><span style="color:#999999">.</span>text
<span style="color:#c678dd">elif</span> tree<span style="color:#999999">[</span>index <span style="color:#669900">+</span> <span style="color:#98c379">1</span><span style="color:#999999">]</span><span style="color:#999999">.</span>tag <span style="color:#669900">==</span> <span style="color:#669900">'true'</span><span style="color:#999999">:</span>
d<span style="color:#999999">[</span>item<span style="color:#999999">.</span>text<span style="color:#999999">]</span> <span style="color:#669900">=</span> <span style="color:#56b6c2">True</span>
<span style="color:#c678dd">elif</span> tree<span style="color:#999999">[</span>index <span style="color:#669900">+</span> <span style="color:#98c379">1</span><span style="color:#999999">]</span><span style="color:#999999">.</span>tag <span style="color:#669900">==</span> <span style="color:#669900">'false'</span><span style="color:#999999">:</span>
d<span style="color:#999999">[</span>item<span style="color:#999999">.</span>text<span style="color:#999999">]</span> <span style="color:#669900">=</span> <span style="color:#56b6c2">False</span>
<span style="color:#c678dd">elif</span> tree<span style="color:#999999">[</span>index<span style="color:#669900">+</span><span style="color:#98c379">1</span><span style="color:#999999">]</span><span style="color:#999999">.</span>tag <span style="color:#669900">==</span> <span style="color:#669900">'dict'</span><span style="color:#999999">:</span>
d<span style="color:#999999">[</span>item<span style="color:#999999">.</span>text<span style="color:#999999">]</span> <span style="color:#669900">=</span> tree_to_dict<span style="color:#999999">(</span>tree<span style="color:#999999">[</span>index<span style="color:#669900">+</span><span style="color:#98c379">1</span><span style="color:#999999">]</span><span style="color:#999999">)</span>
<span style="color:#c678dd">return</span> d
<span style="color:#c678dd">def</span> <span style="color:#61aeee">gen_png_from_plist</span><span style="color:#999999">(</span>plist_filename<span style="color:#999999">,</span> png_filename<span style="color:#999999">)</span><span style="color:#999999">:</span>
file_path <span style="color:#669900">=</span> plist_filename<span style="color:#999999">.</span>replace<span style="color:#999999">(</span><span style="color:#669900">'.plist'</span><span style="color:#999999">,</span> <span style="color:#669900">''</span><span style="color:#999999">)</span>
big_image <span style="color:#669900">=</span> Image<span style="color:#999999">.</span><span style="color:#669900">open</span><span style="color:#999999">(</span>png_filename<span style="color:#999999">)</span>
root <span style="color:#669900">=</span> ElementTree<span style="color:#999999">.</span>fromstring<span style="color:#999999">(</span><span style="color:#669900">open</span><span style="color:#999999">(</span>plist_filename<span style="color:#999999">,</span> <span style="color:#669900">'r'</span><span style="color:#999999">)</span><span style="color:#999999">.</span>read<span style="color:#999999">(</span><span style="color:#999999">)</span><span style="color:#999999">)</span>
plist_dict <span style="color:#669900">=</span> tree_to_dict<span style="color:#999999">(</span>root<span style="color:#999999">[</span><span style="color:#98c379">0</span><span style="color:#999999">]</span><span style="color:#999999">)</span>
to_list <span style="color:#669900">=</span> <span style="color:#c678dd">lambda</span> x<span style="color:#999999">:</span> x<span style="color:#999999">.</span>replace<span style="color:#999999">(</span><span style="color:#669900">'{'</span><span style="color:#999999">,</span><span style="color:#669900">''</span><span style="color:#999999">)</span><span style="color:#999999">.</span>replace<span style="color:#999999">(</span><span style="color:#669900">'}'</span><span style="color:#999999">,</span><span style="color:#669900">''</span><span style="color:#999999">)</span><span style="color:#999999">.</span>split<span style="color:#999999">(</span><span style="color:#669900">','</span><span style="color:#999999">)</span>
<span style="color:#c678dd">for</span> k<span style="color:#999999">,</span>v <span style="color:#c678dd">in</span> plist_dict<span style="color:#999999">[</span><span style="color:#669900">'frames'</span><span style="color:#999999">]</span><span style="color:#999999">.</span>items<span style="color:#999999">(</span><span style="color:#999999">)</span><span style="color:#999999">:</span>
rectlist <span style="color:#669900">=</span> to_list<span style="color:#999999">(</span>v<span style="color:#999999">[</span><span style="color:#669900">'frame'</span><span style="color:#999999">]</span><span style="color:#999999">)</span>
width <span style="color:#669900">=</span> <span style="color:#669900">int</span><span style="color:#999999">(</span> rectlist<span style="color:#999999">[</span><span style="color:#98c379">3</span><span style="color:#999999">]</span> <span style="color:#c678dd">if</span> v<span style="color:#999999">[</span><span style="color:#669900">'rotated'</span><span style="color:#999999">]</span> <span style="color:#c678dd">else</span> rectlist<span style="color:#999999">[</span><span style="color:#98c379">2</span><span style="color:#999999">]</span> <span style="color:#999999">)</span>
height <span style="color:#669900">=</span> <span style="color:#669900">int</span><span style="color:#999999">(</span> rectlist<span style="color:#999999">[</span><span style="color:#98c379">2</span><span style="color:#999999">]</span> <span style="color:#c678dd">if</span> v<span style="color:#999999">[</span><span style="color:#669900">'rotated'</span><span style="color:#999999">]</span> <span style="color:#c678dd">else</span> rectlist<span style="color:#999999">[</span><span style="color:#98c379">3</span><span style="color:#999999">]</span> <span style="color:#999999">)</span>
box<span style="color:#669900">=</span><span style="color:#999999">(</span>
<span style="color:#669900">int</span><span style="color:#999999">(</span>rectlist<span style="color:#999999">[</span><span style="color:#98c379">0</span><span style="color:#999999">]</span><span style="color:#999999">)</span><span style="color:#999999">,</span>
<span style="color:#669900">int</span><span style="color:#999999">(</span>rectlist<span style="color:#999999">[</span><span style="color:#98c379">1</span><span style="color:#999999">]</span><span style="color:#999999">)</span><span style="color:#999999">,</span>
<span style="color:#669900">int</span><span style="color:#999999">(</span>rectlist<span style="color:#999999">[</span><span style="color:#98c379">0</span><span style="color:#999999">]</span><span style="color:#999999">)</span> <span style="color:#669900">+</span> width<span style="color:#999999">,</span>
<span style="color:#669900">int</span><span style="color:#999999">(</span>rectlist<span style="color:#999999">[</span><span style="color:#98c379">1</span><span style="color:#999999">]</span><span style="color:#999999">)</span> <span style="color:#669900">+</span> height<span style="color:#999999">,</span>
<span style="color:#999999">)</span>
sizelist <span style="color:#669900">=</span> <span style="color:#999999">[</span> <span style="color:#669900">int</span><span style="color:#999999">(</span>x<span style="color:#999999">)</span> <span style="color:#c678dd">for</span> x <span style="color:#c678dd">in</span> to_list<span style="color:#999999">(</span>v<span style="color:#999999">[</span><span style="color:#669900">'sourceSize'</span><span style="color:#999999">]</span><span style="color:#999999">)</span><span style="color:#999999">]</span>
rect_on_big <span style="color:#669900">=</span> big_image<span style="color:#999999">.</span>crop<span style="color:#999999">(</span>box<span style="color:#999999">)</span>
<span style="color:#c678dd">if</span> v<span style="color:#999999">[</span><span style="color:#669900">'rotated'</span><span style="color:#999999">]</span><span style="color:#999999">:</span>
rect_on_big <span style="color:#669900">=</span> rect_on_big<span style="color:#999999">.</span>rotate<span style="color:#999999">(</span><span style="color:#98c379">90</span><span style="color:#999999">)</span>
result_image <span style="color:#669900">=</span> Image<span style="color:#999999">.</span>new<span style="color:#999999">(</span><span style="color:#669900">'RGBA'</span><span style="color:#999999">,</span> sizelist<span style="color:#999999">,</span> <span style="color:#999999">(</span><span style="color:#98c379">0</span><span style="color:#999999">,</span><span style="color:#98c379">0</span><span style="color:#999999">,</span><span style="color:#98c379">0</span><span style="color:#999999">,</span><span style="color:#98c379">0</span><span style="color:#999999">)</span><span style="color:#999999">)</span>
<span style="color:#c678dd">if</span> v<span style="color:#999999">[</span><span style="color:#669900">'rotated'</span><span style="color:#999999">]</span><span style="color:#999999">:</span>
result_box<span style="color:#669900">=</span><span style="color:#999999">(</span>
<span style="color:#999999">(</span> sizelist<span style="color:#999999">[</span><span style="color:#98c379">0</span><span style="color:#999999">]</span> <span style="color:#669900">-</span> height <span style="color:#999999">)</span><span style="color:#669900">/</span><span style="color:#98c379">2</span><span style="color:#999999">,</span>
<span style="color:#999999">(</span> sizelist<span style="color:#999999">[</span><span style="color:#98c379">1</span><span style="color:#999999">]</span> <span style="color:#669900">-</span> width <span style="color:#999999">)</span><span style="color:#669900">/</span><span style="color:#98c379">2</span><span style="color:#999999">,</span>
<span style="color:#999999">(</span> sizelist<span style="color:#999999">[</span><span style="color:#98c379">0</span><span style="color:#999999">]</span> <span style="color:#669900">+</span> height <span style="color:#999999">)</span><span style="color:#669900">/</span><span style="color:#98c379">2</span><span style="color:#999999">,</span>
<span style="color:#999999">(</span> sizelist<span style="color:#999999">[</span><span style="color:#98c379">1</span><span style="color:#999999">]</span> <span style="color:#669900">+</span> width <span style="color:#999999">)</span><span style="color:#669900">/</span><span style="color:#98c379">2</span>
<span style="color:#999999">)</span>
<span style="color:#c678dd">else</span><span style="color:#999999">:</span>
result_box<span style="color:#669900">=</span><span style="color:#999999">(</span>
<span style="color:#999999">(</span> sizelist<span style="color:#999999">[</span><span style="color:#98c379">0</span><span style="color:#999999">]</span> <span style="color:#669900">-</span> width <span style="color:#999999">)</span><span style="color:#669900">/</span><span style="color:#98c379">2</span><span style="color:#999999">,</span>
<span style="color:#999999">(</span> sizelist<span style="color:#999999">[</span><span style="color:#98c379">1</span><span style="color:#999999">]</span> <span style="color:#669900">-</span> height <span style="color:#999999">)</span><span style="color:#669900">/</span><span style="color:#98c379">2</span><span style="color:#999999">,</span>
<span style="color:#999999">(</span> sizelist<span style="color:#999999">[</span><span style="color:#98c379">0</span><span style="color:#999999">]</span> <span style="color:#669900">+</span> width <span style="color:#999999">)</span><span style="color:#669900">/</span><span style="color:#98c379">2</span><span style="color:#999999">,</span>
<span style="color:#999999">(</span> sizelist<span style="color:#999999">[</span><span style="color:#98c379">1</span><span style="color:#999999">]</span> <span style="color:#669900">+</span> height <span style="color:#999999">)</span><span style="color:#669900">/</span><span style="color:#98c379">2</span>
<span style="color:#999999">)</span>
result_image<span style="color:#999999">.</span>paste<span style="color:#999999">(</span>rect_on_big<span style="color:#999999">,</span> result_box<span style="color:#999999">,</span> mask<span style="color:#669900">=</span><span style="color:#98c379">0</span><span style="color:#999999">)</span>
<span style="color:#c678dd">if</span> <span style="color:#669900">not</span> os<span style="color:#999999">.</span>path<span style="color:#999999">.</span>isdir<span style="color:#999999">(</span>file_path<span style="color:#999999">)</span><span style="color:#999999">:</span>
os<span style="color:#999999">.</span>mkdir<span style="color:#999999">(</span>file_path<span style="color:#999999">)</span>
outfile <span style="color:#669900">=</span> <span style="color:#999999">(</span>file_path<span style="color:#669900">+</span><span style="color:#669900">'/'</span> <span style="color:#669900">+</span> k<span style="color:#999999">)</span><span style="color:#999999">.</span>replace<span style="color:#999999">(</span><span style="color:#669900">'gift_'</span><span style="color:#999999">,</span> <span style="color:#669900">''</span><span style="color:#999999">)</span>
<span style="color:#c678dd">print</span> outfile<span style="color:#999999">,</span> <span style="color:#669900">"generated"</span>
result_image<span style="color:#999999">.</span>save<span style="color:#999999">(</span>outfile<span style="color:#999999">)</span>
</code></span></span>
- 1
注:依赖PIL,本文使用[Python Imaging Library 1.1.7 for Python 2.7]
官网 : http://www.pythonware.com/products/pil/
安装完后执行
<span style="color:rgba(0, 0, 0, 0.75)"><span style="color:#000000"><code class="language-sh"> cd C:\Python27\scripts\
pip install pillow
</code></span></span>