pygameでRPG（画像追加）


[記事全体の目次へ移動](https://qiita.com/hijpa/items/056acaa13e935590fdc2)

# 画像を追加

<details><summary>ここをクリックしてください</summary>

```python:
でもちょっと足りないので編集しましょう。
以下のコードで足りない画像を追加できます。

![manto_12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3874121/b00b5281-3c67-b2b1-2105-bd07ddc19e7e.png)

![player.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3874121/8c53e5d8-665d-c204-7b9d-67d3b361cfbc.png)

上の画像が下の画像のようになります。

エラーが出たら、フォルダ名が日本語になってないか、ファイル名が数字で始まってないか確認しましょう。r文字も忘れずつけましょう。r"ファイルのパス"


```python:画像編集

import cv2
import numpy as np

# 画像を読み込む（アルファチャンネルを含む）
# ここにキャラクター画像のパスを貼り付ける
image = cv2.imread(パス, cv2.IMREAD_UNCHANGED)

# 画像が正しく読み込まれたか確認
if image is None:
    print("画像が読み込まれませんでした。ファイルパスを確認してください。")
else:
    # コピーする部分の座標とサイズ
    x, y, w, h = 32, 0, 32, 128
    part = image[y:y+h, x:x+w]

    # 元の画像の右端に追加するために、新しい画像を作成
    new_width = image.shape[1] + w
    new_image = np.zeros((image.shape[0], new_width, 4), dtype=np.uint8)

    # 元の画像を新しい画像にコピー
    if image.shape[2] == 4:
        new_image[:, :image.shape[1], :] = image
    else:
        new_image[:, :image.shape[1], :3] = image
        new_image[:, :image.shape[1], 3] = 255  # アルファチャンネルを追加

    # コピーした部分を新しい画像の右端に追加
    if part.shape[2] == 4:
        new_image[:, image.shape[1]:, :] = part
    else:
        new_image[:, image.shape[1]:, :3] = part
        new_image[:, image.shape[1]:, 3] = 255  # アルファチャンネルを追加

    # 結果を保存
    cv2.imwrite('edited_image.png', new_image)
    print("完了しました")
```
</details>

# フォルダ内のすべてのファイルに追加

<details><summary>ここをクリックしてください</summary>


![manto_12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3874121/b00b5281-3c67-b2b1-2105-bd07ddc19e7e.png)

![player.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3874121/8c53e5d8-665d-c204-7b9d-67d3b361cfbc.png)

上の画像が下の画像のようになります。

ファイルが読み込まれない場合はフォルダ名を確認してください。日本語のフォルダ名はダメです。フォルダ名がキャラチップだとエラーが出ます。サイズが違うのもダメです。大きさは96*128です。

pngファイルです。jpegファイルではありません。

~~OSError: [WinError 123] ファイル名、ディレクトリ名、またはボリューム ラベルの構文が間違っています。というエラー文が表示されたら、パスの前に r をつけましょう。r"フォルダのパス"~~ input()にしたら必要なくなりました。

ここではフォルダのパスにダブルクォーテーションは必要ありません。
![スクリーンショット (692).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3874121/c9229b1a-3d52-64e3-2826-12c87533599f.png)

```python:画像編集
import cv2
import numpy as np
import os

# 処理するフォルダのパスを指定
folder_path = input("folder_path: ")
output_folder = input("output_folder: ")

# 出力フォルダが存在しない場合は作成
if not os.path.exists(output_folder):
    os.makedirs(output_folder)

# フォルダ内のすべてのファイルを処理
for filename in os.listdir(folder_path):
    if filename.endswith(".png"):
        file_path = os.path.join(folder_path, filename)
        image = cv2.imread(file_path, cv2.IMREAD_UNCHANGED)

        # 画像が正しく読み込まれたか確認
        if image is None:
            print(f"{filename} が読み込まれませんでした。")
            continue

        # コピーする部分の座標とサイズ
        x, y, w, h = 32, 0, 32, 128
        part = image[y:y+h, x:x+w]

        # 元の画像の右端に追加するために、新しい画像を作成
        new_width = image.shape[1] + w
        new_image = np.zeros((image.shape[0], new_width, 4), dtype=np.uint8)

        # 元の画像を新しい画像にコピー
        if image.shape[2] == 4:
            new_image[:, :image.shape[1], :] = image
        else:
            new_image[:, :image.shape[1], :3] = image
            new_image[:, :image.shape[1], 3] = 255  # アルファチャンネルを追加

        # コピーした部分を新しい画像の右端に追加
        if part.shape[2] == 4:
            new_image[:, image.shape[1]:, :] = part
        else:
            new_image[:, image.shape[1]:, :3] = part
            new_image[:, image.shape[1]:, 3] = 255  # アルファチャンネルを追加

        # 結果を保存
        output_path = os.path.join(output_folder, filename)
        cv2.imwrite(output_path, new_image)
        print(f"{filename} の処理が完了しました。")

print("すべてのファイルの処理が完了しました。")
```
</details>

# フォルダ内のすべてのファイルに追加２
(pyファイルがあるフォルダで実行するだけです。フォルダ名の指定がいりません。上書きなので元の画像は失われます)

<details><summary>ここをクリックしてください</summary>

```python
import cv2
import numpy as np
import os

# スクリプトが存在するフォルダのパスを取得
folder_path = os.path.dirname(os.path.abspath(__file__))
output_folder = os.path.join(folder_path)

# 出力フォルダが存在しない場合は作成
if not os.path.exists(output_folder):
    os.makedirs(output_folder)

# フォルダ内のすべてのファイルを処理
for filename in os.listdir(folder_path):
    if filename.endswith(".png"):
        file_path = os.path.join(folder_path, filename)
        image = cv2.imread(file_path, cv2.IMREAD_UNCHANGED)

        # 画像が正しく読み込まれたか確認
        if image is None:
            print(f"{filename} が読み込まれませんでした。")
            continue

        # コピーする部分の座標とサイズ
        x, y, w, h = 32, 0, 32, 128
        part = image[y:y+h, x:x+w]

        # 元の画像の右端に追加するために、新しい画像を作成
        new_width = image.shape[1] + w
        new_image = np.zeros((image.shape[0], new_width, 4), dtype=np.uint8)

        # 元の画像を新しい画像にコピー
        if image.shape[2] == 4:
            new_image[:, :image.shape[1], :] = image
        else:
            new_image[:, :image.shape[1], :3] = image
            new_image[:, :image.shape[1], 3] = 255  # アルファチャンネルを追加

        # コピーした部分を新しい画像の右端に追加
        if part.shape[2] == 4:
            new_image[:, image.shape[1]:, :] = part
        else:
            new_image[:, image.shape[1]:, :3] = part
            new_image[:, image.shape[1]:, 3] = 255  # アルファチャンネルを追加

        # 結果を保存
        output_path = os.path.join(output_folder, filename)
        cv2.imwrite(output_path, new_image)
        print(f"{filename} の処理が完了しました。")

print("すべてのファイルの処理が完了しました。")
```

</details>