見出し画像

『退屈なことはPythonにやらせよう』19章 画像の操作のらくがき帳📝

こんにちは。aliceです。
明日は秋分の日ですね。日が落ちるのが早くなったなぁと感じます。
それと同時に、朝起きる時間がだんだんゆっくりになってきました。

こうやって秋になっていくんですね。



今回は画像の操作です。
Pillowを使って画像の操作をします。

猫の画像を使っていろんな操作をするのですが癒されましたー。
おうちにねこちゃんがいる生活ってどんななのかな?


前回のらくがき帳



19章 英語版🔤


GitHub💖



19.1.1 色とRGBA値


RGBA値って色の三原則とアルファ値をひとまとめにしたものだったんだ。
よくわからず、適当に数字をいじったりしていました。


19.2.3 画像のコピー&ペースト


ニャーをたくさんコピーします。

from PIL import Image


def tile_image(input_path, output_path, tile_x):
    """
    画像をタイル状に貼り付ける

    :param input_path: 入力画像のパス
    :param output_path: 出力画像のパス
    :param tile_x: タイルとして使う部分の座標 (left, top, right, bottom)
    :return: なし
    """
    # 画像を開く
    original_image = Image.open(input_path)

    # 元画像のコピーを作成
    copied_image = original_image.copy()

    # タイルとして使う部分を切り出す
    tile_image = original_image.crop(tile_x)

    # 画像サイズを取得
    original_width, original_height = original_image.size
    tile_width, tile_height = tile_image.size

    # タイル状に画像を貼り付ける
    for left in range(0, original_width, tile_width):
        for top in range(0, original_height, tile_height):
            copied_image.paste(tile_image, (left, top))

    # タイル化した画像を保存
    copied_image.save(output_path)


if __name__ == '__main__':
    tile_x = (335, 345, 565, 560)  # 切り出す範囲
    input_image_path = 'zophie.png'
    output_image_path = 'tiled_zophie.png'
    tile_image(input_image_path, output_image_path, tile_x)



ニャーがたくさん🐈



19.2.4 画像のサイズを変更する


サイズを半分にしてみました。

from PIL import Image


def resize_image(input_file_path, output_file_path):
    # 画像を開く
    image = Image.open(input_file_path)

    # 画像のサイズを半分にする
    width, height = image.size
    new_width = width // 2
    new_height = height // 2
    resized_image = image.resize((new_width, new_height))

    # サイズを半分にした画像を保存
    resized_image.save(output_file_path)


# 使用例:
input_path = 'input_image.jpg'
output_path = 'output_image.jpg'
resize_image(input_path, output_path)



19.3 プロジェクト:ロゴを追加する


指定したディレクトリ内にある画像に右下にロゴを入れます🐈

from pathlib import Path

from PIL import Image

# 定数定義
SQUARE_FIT_SIZE = 300
LOGO_FILENAME = 'catlogo.png'
PIC_FOLDER = 'pictures'
SAVE_FOLDER = 'withLogo'


def main():
    """ロゴを画像に追加する """

    # ロゴ画像を開く
    logo_im = Image.open(LOGO_FILENAME)
    logo_width, logo_height = logo_im.size

    # 出力フォルダを作成
    Path(SAVE_FOLDER).mkdir(exist_ok=True)

    # 指定したフォルダ内の画像ファイルを処理
    for image_path in get_image_files():
        # ロゴファイルをスキップ
        if image_path.name == LOGO_FILENAME:
            continue

        # 画像を開く
        im = Image.open(image_path)
        width, height = im.size

        # リサイズ処理
        if width > SQUARE_FIT_SIZE and height > SQUARE_FIT_SIZE:
            if width > height:
                height = int((SQUARE_FIT_SIZE / width) * height)
                width = SQUARE_FIT_SIZE
            else:
                width = int((SQUARE_FIT_SIZE / height) * width)
                height = SQUARE_FIT_SIZE

            print(f'Resizing {image_path.name}...')
            im = im.resize((width, height))

        # ロゴの追加
        print(f'Adding logo to {image_path.name}...')
        im.paste(logo_im, (width - logo_width, height - logo_height), logo_im)

        # 出力フォルダに保存
        output_path = Path(SAVE_FOLDER) / image_path.name
        im.save(output_path)


def get_image_files():
    """指定したフォルダ内の画像ファイルを取得するユーティリティ関数"""
    return Path(PIC_FOLDER).glob('*.*')


if __name__ == '__main__':
    main()


か、かわいい🐱

ロゴをいれました。


おまけ


せっかくなので、作った画像をどうぞ。
いやされました🐱


お顔だけ切り抜いた🐱


一番好きな6度傾けたニャー🐱


つづき


この記事が気に入ったらサポートをしてみませんか?