图集分割小图 json plist 或者无配置文件的强势分割

转载备忘
另外 应对不同格式的json,需要自己修改内容,比如我的就找不到res这个key
 
问题:
1 json下载出来如果decode报错,用nodepad++ 转存为无dom utf8格式就能正常用json库操作了
 
原作者的github仓库,我fork了
 
 
Python切割图集
原创 发布于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>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值