はじめに
現在CS50’s Introduction to Programming with Pythonに沿ってPythonの学習を進めています。
今回は"Week 6 File I/0"内のProblem Set, "CS50 P-shirt"で必要になったライブラリの使い方を勉強のためにまとめていきます。
CS50 P-shirt
取り組んでいるProblem Setはこちらになります。
与えられた人形の画像とTシャツの画像を重ね合わせ1つの画像を生成することが課題になります。
画像を利用するためのライブラリとしてPILが挙げられており、必要になるPillowのメソッドをまとめて行きます。
PIL.Image.open
イメージファイルを開く
PIL.Image.open(fp, mode='r', formats=None)
- fp : 開きたい画像ファイルの名前(文字列)、パス(pathlib.Pathオブジェクト)、またはファイルオブジェクト。
- mode : モードです。指定する場合、ここでは必ず"r"という文字列(readの意)。
- formats : 読み込もうとする画像ファイルの形式のリストやタプル。このパラメータを使うと、チェックする形式を絞ることができる。Noneを指定すると、サポートされているすべての形式を試す。サポートされている形式の一覧は、python3 -m PILというコマンドを実行するか、PIL.features.pilinfo()という関数を使って確認できる。
- このメソッドはイメージオブジェクトを返す
PIL.ImageOps.fit
イメージのリサイズと切り抜き
PIL.ImageOps.fit(image, size, method=Resampling.BICUBIC, bleed=0.0, centering=(0.5, 0.5))
- image: リサイズと切り抜きをしたい画像
- size : リサイズと切り抜き後の画像のサイズです。幅と高さをピクセル単位で指定。(200, 100)と指定すると、幅200ピクセル、高さ100ピクセルの画像になる。
- method : リサイズするときに使う補間法。補間法とは、画像を拡大や縮小するときに、画素の間の色をどう計算するかという方法。デフォルトでは、BICUBICという補間法が使われる。BICUBICは、画素の周囲16画素(4×4)を考慮して補間。他にも、NEAREST, BILINEAR, LANCZOSなどの補間法がある。
- bleed : 画像の外側から一定の割合だけ切り取ることができる。このパラメータには、0から0.5未満の小数を指定。例えば、0.01と指定すると、画像の外側から1%ずつ切り取られる。デフォルトでは、0となっており、切り取られない。
- centering : 切り抜く位置を調整。このパラメータには、(0.0, 0.0)から(1.0, 1.0)までの範囲の小数の組み合わせを指定。例えば、(0.5, 0.5)と指定すると、中央から切り抜かれる。つまり、幅を切り抜く場合は左右から50%ずつ、高さを切り抜く場合は上下から50%ずつ切り取られる。また、(0.0, 0.0)と指定すると、左上から切り抜かれる。つまり、幅を切り抜く場合は右側から全て、高さを切り抜く場合は下側から全て切り取られる。他にも、(1.0, 0.0)と指定すると、左下から切り抜かれたり、(0.25, 0.75)と指定すると、右上寄りから切り抜かれたりする。
- この関数はイメージオブジェクトを返す
Image.paste
イメージの貼り付け
Image.paste(im, box=None, mask=None)
- im : 貼り付ける画像または色(整数や数値の組み合わせ)
- box : 貼り付ける位置を指定する引数。4つの数値で領域を指定する、2つの数値で左上の座標を指定する、省略するかNoneにするか(左上から貼り付ける)ができる。二番目の引数に画像が指定されていて三番目の引数がない場合は、boxは(0, 0)になり、二番目の引数はマスク画像(貼り付ける部分を制御するための画像)として扱われる。
- mask : マスク画像を指定する引数。Noneの場合は画像が使用されない。
- 貼り付けた画像から生成されたイメージオブジェクトを返す。
注意
画像とマスク貼り付け箇所を指定しなければならないため今回のProblem Setでは下記のような記述になる。(puppet:パペットのイメージオブジェクト、shirt:Tシャツのイメージオブジェクト、貼り付け位置指定無し)
Image.paste
puppet.paste(shirt, shirt)
Image.save
イメージの保存
Image.save(fp, format=None, **params)
- fp : 保存するファイル名(文字列)、パス(pathlib.Pathオブジェクト)、またはファイルオブジェクト。
- format : フォーマットを指定するオプション。省略すると、ファイル名の拡張子からフォーマットを判断。ファイルオブジェクトを使った場合は、必ずこのオプションを使う必要あり。
- params : 書き込みに関する追加の指示を与えるオプション。利用できるオプションは画像形式によって異なる。quality, optimize等。
# おわりに
from PIL import Image, ImageOpt
を忘れないようにしましょう。