Top > materials

materials の変更点

TITLE:画像置場
&attachref(./assault.png,16x16);
&attachref(./engineer.png,16x16);
&attachref(./recon.png,16x16);
&attachref(./support.png,16x16);
&attachref();
&attachref();

* アイコン画像の切り出し方法(プロ向け) [#y988b35f]

※Pythonのコードが読めない人は、以下のコードを実行しないでください。
筆者はコード実行により想定外のことが起きても責任を持ちません。&br;
こういう画像から一つ一つ、トリミングするのだるいっすよね。

&attachref(./9fdf6d3a961fcfc3d6f40f4f18ab4c49.png,nolink,50%);

というわけで、Python3の輪郭抽出で、
アイコン画像を切り出せるスクリプトを書いたので、
良ければお使いください。

&attachref(./screenshot_2026-04-04_171808.png,nolink,50%);
** ソースコード [#t6fd9eef]

以下のテキストをコピペして、
`crop.py` という名前でファイルを作成してください。

#region(ソースコードを開くにはこちら)

#pre{{
import cv2
import os
import sys
import numpy as np

# ドラッグアンドドロップされたファイル
images = sys.argv[1:]

if not images:
    print("画像をこのスクリプトにドラッグしてください")
    sys.exit()

for img_path in images:

    # 日本語パス対応の読み込み
    data = np.fromfile(img_path, dtype=np.uint8)
    img = cv2.imdecode(data, cv2.IMREAD_COLOR)

    if img is None:
        print(f"読み込めません: {img_path}")
        continue

    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

    edges = cv2.Canny(gray, 50, 150)

    contours, _ = cv2.findContours(edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

    folder_name = os.path.splitext(os.path.basename(img_path))[0]
    os.makedirs(folder_name, exist_ok=True)

    i = 0
    for c in contours:
        x, y, w, h = cv2.boundingRect(c)

        if w > 80 and h > 80:
            crop = img[y:y+h, x:x+w]

            output_path = os.path.join(folder_name, f"icon_{i}.png")

            # 日本語パス対応の保存
            ext = os.path.splitext(output_path)[1]
            result, buf = cv2.imencode(ext, crop)
            if result:
                buf.tofile(output_path)

            i += 1
}}

#endregion
** 使い方 [#h20a5fac]


1. 事前に、Python3を公式サイトからダウンロードして、インストールしておきます
2. だいたいでいいので、余計な装飾が入らないようにあらかじめ画像を以下のような感じでトリミングしておきます

&attachref(./9fdf6d3a961fcfc3d6f40f4f18ab4c49.png,nolink,50%);
Windows標準のフォトとかペイントで切り抜いておkです

3. 切り出したい画像を一つのフォルダにまとめて置きます
4. `crop.py` を、画像があるフォルダと同じ場所に置きます
5. エクスプローラーのアドレスバーに`cmd`を入力して、コマンドプロンプトを開きます
6. 以下のコマンドを1行ずつ実行して、必要なライブラリ(`opencv`)をインストールします

#pre{{
python.exe -m pip install --upgrade pip
pip install opencv-python
}}

7. 切り抜きたい画像を、 `crop.py` にドラッグアンドドロップで放り込みます

&attachref(./Screenshot_2026-04-07_112714.jpg,nolink,75%);

8. 画像がフォルダに出力されるので、あとはいい感じに料理して使ってください

&attachref(./screenshot_2026-04-04_172006.png,nolink,50%);
* バナー画像の切り出し方法(プロ向け) [#of76d5d7]

&attachref(sc_2099.jpg,nolink,40%);

こんな感じの、ゲーム画面全体のスクリーンショット(W 1920px H 1080px)を
pyファイルにドラッグアンドドロップすると、
7つ分のバナー画像を等間隔で切り出すスクリプトも作りました。
&attachref(./screenshot_2026-04-04_211257.png,nolink,50%);
複数枚の画像丸ごとドラッグアンドドロップにも対応しています。
バナー画像の開始位置が違うと思いますので、
画像を目視確認して、開始位置を微調整できるようにしてあります。
&attachref(./screenshot_2026-04-04_211519.jpg,nolink,40%);
フルHD以外のモニター使ってる人のことは、知りません。
** ソースコード [#g1562ad1]

以下のテキストをコピペして、
`weapon_crops.py` という名前でファイルを作成してください。

#region(ソースコードを開くにはこちら)

#pre{{
import cv2
import os
import sys
import numpy as np

# バナー画像一つ目のオフセット
OFFSET_X = 93
OFFSET_Y = 183

# バナー画像の大きさ
CELL_WIDTH = 325
CELL_HEIGHT = 105

# バナー画像二つ目以降の間隔
ROW_GAP = 10
ROW_PITCH = CELL_HEIGHT + ROW_GAP

ROWS = 20


def imread_unicode(path):
    data = np.fromfile(path, dtype=np.uint8)
    return cv2.imdecode(data, cv2.IMREAD_COLOR)


def adjust_offset_y(img, start_y):

    y = start_y

    while True:

        preview = img.copy()

        cv2.line(preview, (0, y), (preview.shape[1], y), (0,0,255), 2)

        cv2.putText(
            preview,
            f"OFFSET_Y = {y}  (W/S move 1px  A/D move 10px  ENTER confirm)",
            (20,40),
            cv2.FONT_HERSHEY_SIMPLEX,
            1,
            (0,255,0),
            2
        )

        cv2.imshow("preview", preview)

        key = cv2.waitKey(0) & 0xFF

        if key == 13:  # Enter
            break

        elif key == ord('w'):
            y -= 1

        elif key == ord('s'):
            y += 1

        elif key == ord('a'):
            y -= 10

        elif key == ord('d'):
            y += 10

    cv2.destroyAllWindows()

    return y


images = sys.argv[1:]

if len(images) == 0:
    print("画像をドラッグしてください")
    input()
    exit()

file_index = 1

for path in images:

    print("\n===== 処理開始 =====")
    print("ファイル:", path)

    img = imread_unicode(path)

    if img is None:
        print("読み込み失敗")
        continue

    h, w = img.shape[:2]

    OFFSET_Y = adjust_offset_y(img, OFFSET_Y)

    print("確定 OFFSET_Y:", OFFSET_Y)

    folder = f"output_{file_index:03d}"
    os.makedirs(folder, exist_ok=True)

    count = 0

    for i in range(ROWS):

        x1 = OFFSET_X
        y1 = OFFSET_Y + i * ROW_PITCH

        x2 = x1 + CELL_WIDTH
        y2 = y1 + CELL_HEIGHT

        if y2 > h:
            break

        crop = img[y1:y2, x1:x2]

        out = os.path.join(folder, f"weapon_{count}.png")
        cv2.imwrite(out, crop)

        print("保存:", out)

        count += 1

    print("切り出し数:", count)

    file_index += 1


print("\n処理終了")
input()
}}

#endregion

** 使い方 [#c5987b69]

1. 事前に、Python3を公式サイトからダウンロードして、インストールしておきます
2. 切り出したい画像があるスクリーンショットを一つのフォルダにまとめて置きます

こちらのスクリプトは、事前のトリミング等は不要です。無編集でそのまま加工できます。

3. `weapon_crops.py` を、画像があるフォルダと同じ場所に置きます
4. エクスプローラーのアドレスバーに`cmd`を入力して、コマンドプロンプトを開きます
5. 以下のコマンドを1行ずつ実行して、画像切り出しに必要なライブラリのインストールを行います

#pre{{
python.exe -m pip install --upgrade pip
pip install opencv-python
}}

6. 切り抜きたいスクリーンショットたちを、`weapon_crops.py` にドラッグアンドドロップすることで、実行します

&attachref(./screenshot_2026-04-04_211519.jpg,nolink,40%);

赤い線が表示されて、W/Sキーで位置調整が出来ればOKです。
Wキーで上に、Sキーで下にオフセット位置を調整できます。
Enterキーを押せば、その位置で切り抜きを実行します。

7. 「output_001」のような連番フォルダに、切り抜き画像が置かれます。後はいい感じに料理してください

&attachref(./screenshot_2026-04-04_211843.png,nolink,50%);

等間隔で7枚切り出すので、特殊ウェポンのように、
バナー画像数が6枚以下の場合、何もない部分も切り抜かれます。
''仕様です。''許せサスケ…
'''ーーー許せサスケ… …これが仕様だーーー'''
* コメント [#comment]
#pcomment(,reply,20,)

ホーム リロード   新規 下位ページ作成 コピー 編集 添付 一覧 最終更新 差分 バックアップ 検索   凍結 名前変更