python(Pillow)で画像切り出し

python Python

はじめに

大量のドット絵を32x32で切り出しする必要があったので
pythonでコードを作成しました。
自分でも忘れないように今回の調べたことをコードを記載します。

ライブラリ

今回は【Pillow】を使用します。
他にも何種類かはあったので使う機会があればそちらも紹介します。

インストール方法

・PIPインストール方法
  pip install Pillow

・Anacondaにインストール方法
  conda install Pillow

使い方

#Pillowをインポートする
from PIL import Image

・ファイルのオープン
    g_file = Image.open(fname)
  ・fname:ファイルパス+ファイル名

・ファイルの属性
    # 画像のフォーマット、サイズ、モードを取得
    print(g_file.format, g_file.size, g_file.mode)
    #サイズはピクセルです。
  ・576x384ピクセルのPNGファイルを例とすると下記の様に出力する。
   PNG (576, 384) RGBA

・ファイルの切り出し
    img_cut = g_file.crop((p_left,p_upper,p_right,p_lower))
    ・引数はleft,upper,right,lowerとなります。
   左端から32ピクセルの正方形を切り出すなら下記となる
   (0,0,32,32)

・モードの変更(RGBA→RGB)
    img_cut_rgb=img_cut.convert('RGB')
    ・引数はモードです(RGB)等

・ファイルの保存
    img_cut_rgb.save(pas_f, "PNG")
    ・引数は、ファイルパス+ファイル名、フォーマット(指定しなくてもよい)

参考ソース

前提:画像保存の保存元と保存先はpythonソースの改装は同じにしてください。
   ソースはwindowsで実行を確認しています。
   LINUXでは確認していないです。
   ディレクトリパスは変更が必要かもしれないです。
      事前に「org」と「new_f」フォルダの作成が必要です。
ソース概要:
ソースと同じ階層のフォルダ「org」内の複数の画像ファイルを32x32に切り出しPNGファイルで
「new_f」に保存します。
※org配下には画像以外のファイルを置かないでください。

ソース

from PIL import Image
import glob
import os

fnames = glob.glob(".\\org\\*")

#enumerateはindexと変数を取得できる
for fcnt,fname in enumerate(fnames):
    
    print(fname)
    #画像ファイルをオープンする
    g_file = Image.open(fname)

    # 画像のフォーマット、サイズ、モードを取得
    #サイズはピクセルです。
    print(g_file.format, g_file.size, g_file.mode)
    print(fcnt)
    #32x32のドット絵を切り出す。
    #切り出し回数を数える
    g_scnt=(g_file.size[0]//32)*(g_file.size[1]//32)
    g_xcnt=(g_file.size[0]//32)
    g_ycnt=(g_file.size[1]//32)
    print(g_scnt,g_xcnt,g_ycnt)

    p_mcnt=0
    for pcnt in range(0,(g_scnt+0)):
        #(0,0)の位置から切り出しをスタートする
        if pcnt == 0:
            p_left = 0
            p_upper= 0
            p_right= 32
            p_lower= 32
        else:
            #右に32ピクセル移動する
            p_left = p_left+32
            p_right=p_right+32

            #右端までいったら左に戻り次の32x32から切り出し
            if g_xcnt <= p_mcnt:
                p_left =0
                p_upper=p_upper+32
                p_right=32
                p_lower=p_lower+32
                p_mcnt = 0
        print(p_left,p_upper,p_right,p_lower,p_mcnt)
        #ファイルを切り出す
        img_cut = g_file.crop((p_left,p_upper,p_right,p_lower))
        #出力ファイル位置及びファイル名を作成する
        pas_f = os.path.join('.\\new_f\\' , str(fcnt) + '_' + str(pcnt)+'.png')
        # 画面に出力
        print("pas_f:",pas_f)
        print("size2:",img_cut.size)
        #RGBにする
        img_cut_rgb=img_cut.convert('RGB')
        #PNG指定で保存する
        img_cut_rgb.save(pas_f, "PNG")
        p_mcnt = p_mcnt+1
    


        

コメント

タイトルとURLをコピーしました