【Python】Pillowで複数の画像を重ねる(合成する)方法

スポンサードリンク
Python
過去の自分
過去の自分

新しく作った画像の左上に、会社のロゴを入れることになっているんだけど、
1つ1つ入れていくのはめんどう…。
PythonのPillowで一気に合成することはできないの?

今の自分
今の自分

なるほど…。
では今回は、「Pillowで画像を重ねる(合成する)方法」
できるだけわかりやすく解説いたします。
また、「複数の画像を一気に合成する方法」
紹介いたしますので、ぜひ最後まで読んでいってください。

著者情報
スポンサードリンク

PythonのPillowで複数の画像を重ねる(合成する)方法

「paste()」を使います。まずは全コードと実行結果をお見せします。
解説は後ほど行います。

全コード

ひとまず、1枚の画像を合成するコードを紹介いたします。

import PIL
from PIL import Image

input_img_back = Image.open('C:/Utatane/input_img_back.jpg')
input_img_front = Image.open('C:/Utatane/input_img_front.jpg')

input_img_back.paste(input_img_front)

input_img_back.save('C:/Utatane/output_img.jpg')
input_img_back.paste(input_img_front)

実行結果

実行結果

事前準備

  • Pillowのインストール

画像を加工したり編集したりするには「Pillow」のインストールが必要です。

Pillowのインストール方法

Pillowを初めて使用する場合は、下記コードを入力・実行して、インストールしてください。

pip install Pillow

※Pillowを使用したことがある場合は、このインストール作業は不要です。

インストールに関する詳細や、インストールができなかった場合の対処法は下記記事で解説しております。
また、Pillowの簡単な使い方も紹介しておりますのでご参考ください。

解説

※わかりやすさを重視しております。厳密には解釈が異なる場合がありますことをご了承ください。

インポートや画像の取り込み・出力方法の解説は、インストールの記事をご参考ください。

画像を重ねる(合成する)

input_img_back.paste(input_img_front)

上記コードにて、画像に画像を重ねる(画像を合成する)ことができます。

まず背景になる画像が入った変数を書いたら、「.paste()」を書きます。
()内に重ねる画像が入った変数を書いたら完了です。

<画像を重ねる場合のテンプレ>
【 背景になる画像が入った変数.paste(重ねる画像が入った変数) 】

これで、画像を重ねる(合成する)ことができます。

今回の場合は、「600×600px」の画像(input_img_back)に300×80pxの画像(input_img_front)を重ねました。
重なる場所はデフォルトでは左上になります。

左上以外に重ねたい場合

重ねる位置は自由に決めることが可能です。
右上に重ねてみましょう。

右上に重ねた場合
input_img_back.paste(input_img_front, (300, 0))

()内の数字が追加されただけです。
これは座標で、(0, 0)が画像の左上(デフォルト)を表します。
(50, 10)なら、左上から右に50px、下に10px移動した位置に重ねられます。

50-10の位置に重ねた場合

あとは重ねる方の画像サイズを考慮しながら、位置を微調整してみてください。

スポンサードリンク

複数の画像を一気に重ねる(合成する)方法

下記のコードを実行することで、「input」フォルダに入った画像全てにロゴ画像(input_img_front.jpg)を重ねることができます。

import PIL
from PIL import Image
import os

os.makedirs('C:/Utatane/output', exist_ok=True)

input_img_front = Image.open('C:/Utatane/input_img_front.jpg')

for filename in os.listdir('C:/Utatane/input'):
    if filename.endswith('.jpg') :
        input_img_back = Image.open(os.path.join('C:/Utatane/input', filename))
        input_img_back.paste(input_img_front)
        input_img_back.save(os.path.join('C:/Utatane/output', filename))

前項で紹介した方法をfor文で繰り返し、全ての画像に適用しています。

<コード5行目>
出力するフォルダを作成

<コード7行目>
ロゴ画像(重ねる画像)を取り込み

<コード9行目~最後>
9行目:「input」フォルダ内の背景になる画像を取り込み
10行目:拡張子が「jpg」なら以下の操作を行う
11行目:「input」フォルダのパスとファイル名を連結(フルパスに)して取り込み
12行目:背景画像にロゴ画像を重ねる
13行目:出力フォルダパスとファイル名を連結(フルパスに)して出力

これで「input」フォルダ内のjpg画像を全て処理できます。

スポンサードリンク

うまく動作しない場合の対処法

エラーが出る

No such file or directory: ○○

これは、読み込むファイルやフォルダが見つからないというエラーです。
読み込むファイルのファイル名と構文のファイル名が一致しているか確認しましょう。

詳しい解説は、下記記事をご参考ください。

○○ is not defined

今まで出てきていない変数などを処理しようとした時に出るエラーです。
変数名などが間違っていないかチェックしましょう。

詳しい解説は、下記記事をご参考ください。

その他のエラー

その他のエラーが出た場合は、エラー文をコピーしてNETで検索してみましょう。

スポンサードリンク

最後に

PythonのPillowで複数の画像を重ねる(合成する)方法を解説いたしました。

当ブログでは、Pythonに関する情報を配信しております。
この記事がわかりやすいと感じた方は、他の記事も読んでいってください。

挫折せずにPythonを独学で学習する方法は特におすすめです。

最後までお読みいただき、ありがとうございました。がんばってください!

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