Pythonで画像を他の画像にペーストする(Pillow編)

PythonのPillow(PIL)モジュールのImageオブジェクト同士をペーストしてみます。

目次

  1. 空のImageオブジェクトを作る
  2. Imageオブジェクトにペーストする
  3. ペーストの実施例

空のImageオブジェクトを作る

newメソッドを使って、新しい単色のImageオブジェクトを作ります。小さい画像のペースト先ですね。

img = PIL.Image.new(mode, size, [color])
変数 内容
mode str Imageオブジェクトのモードです。
size tuple オブジェクトの大きさの指定です。幅と高さのタプルで指定します。
color tuple 省略可。既定値は0(黒)。指定の仕方はモードに依存します。
img Image Imageオブジェクト。

modeはオブジェクトのカラーのモードの指定です。下表から選択します。

モード 内容
1 1 bit/pixel 白黒画像
L 8 bit/pixel 白黒画像
P 8 bit/pixel カラーパレット画像
RGB 3x8 bit/pixel カラー画像
RGBA 4x8 bit/pixel 透過度マスク付きカラー画像
CMYK 4x8 bit/pixel CMYKカラー画像
YCbCr 3x8 bit/pixel ビデオカラー画像
LAB 3x8 bit/pixel Labカラー画像
HSV 3x8 bit/pixel HSVカラー画像
I 32 bit/pixel 符号付き整数
F 32 bit/pixel 浮動小数点数

colorの指定の仕方はモードによって変わります。例えばモードが1やLならintで、RGBなら(red, green, blue)のintのタプルで指定します。

例えば、RGBカラーで64x64サイズの白色にする場合は下記のようにします。

img = PIL.Image.new(mode='RGB', size=(64, 64), color=(255, 255, 255))

Imageオブジェクトにペーストする

小さいImageオブジェクトを大きいImageオブジェクトに貼り付けるには、pasteメソッドを使用します。

canvas_img.paste(source_img, [box], [mask])
変数 内容
canvas_img Image 貼り付けされる側のImageオブジェクト。
source_img Image 貼り付けるImageオブジェクト。
box tuple 省略可。既定値はNone(左上)。貼り付ける位置を示すタプル。
mask Image 省略可。既定値はNone。

貼り付ける位置をboxに指定します。boxはintのタプルで指定します。貼り付けられる画像の左上の位置だけを指定する場合は、(left, upper)という形で指定します。左上と右下を指定する場合は、(left, upper, right, lower)という形で指定します。

ペーストの実施例

実際に試してみます。

プロ生ちゃん の画像(256x256)を横500ピクセル縦300ピクセルの画像に貼り付けます。貼り付ける位置は、プロ生ちゃんの画像の左上が(50, 22)の位置になるようにします。

まずプロ生ちゃんの画像はこちらです。

貼り付ける画像

これを読み込みます。

>>> from PIL import Image

>>> source_img = Image.open('original.png')

次に桜鼠色の画像を作ります。R:233 G:223 B:229です。

>>> canvas_img = Image.new('RGB', (500,300), (233,223,229))

参考までに表示してみると、こんな画像です。

貼り付けられる画像

では、ペースト(貼り付け)します。

>>> canvas_img.paste(source_img, (50,22))

こういう画像ができあがります。

結果の画像

広告

Pythonで画像処理カテゴリの投稿