Pillow(PIL)
ブログを運営していて煩雑になるのは、画像の処理。
大きいままだとサーバーの容量を逼迫してしまうし、小さすぎたり、解像度が低すぎたりすると画像がみづらくなってしまいます。
3PySciでは撮影したり、スクリーンショットしたりした画像で必要なところを切り抜き、長辺を1000ピクセルとなるように加工してから、アップロードしています。
もちろん名前も変更しなければいけません。
そんな煩雑な作業をプログラムで改善できないか。
もう400以上も記事を書いていて、今更ながらに思ったわけです。
ということで画像を自動で処理してくれるプログラムの作成に取り掛かっていきますが、まずは画像処理のライブラリを勉強していこうと思います。
その画像処理のライブラリというのがPillow、別の名をPIL(Python Image Library)といいます。
今回はこのPillowの簡単な使い方を解説していきましょう。
もしインストールされていない方はこちらの記事を参考にインストールしてみてください。
画像はPixabayよりダウンロードしたこちらの画像(pillow1-1.png)を使っていきます。
画像の読み込み
まずはPillowを使って処理する画像を読み込みましょう。
<セル1>
from PIL import Image
im = Image.open("Figure.jpg")
im
実行結果
最初の行はPillow(PIL)の「Image」というモジュールのインポートです。
from PIL import Image
次の行で変数imに読み込んだ画像を格納しています。
im = Image.open("pillow1-1.jpg")
最後の「im」で画像を表示しています。
思ったよりも簡単にできたと思います。
画像サイズの取得
この後、トリミングやらサイズ変更やらをしていくに当たって、画像のサイズが必要になるので、最初に取得してみましょう。
画像のサイズを取得するには「画像名.size」を使います。
<セル2>
print(im.size)
実行結果
(1920, 1280)
画像をトリミング
次に画像をトリミングする方法を見ていきましょう。
トリミングする際はトリミングして残す範囲を「画像名.crop((左、上、右、下))」でそれぞれ左上を起点としたピクセルを入力します。
この際、範囲は二つの括弧でかこってあることに注意してください。
まずは左をトリミングしてみます。
<セル3>
crop_left = im.crop((500, 0, 1920, 1280))
crop_left
実行結果
次に上をトリミングしてみます。
<セル4>
crop_upper = im.crop((0,500,1920,1280))
crop_upper
実行結果
次に右をトリミングしてみます。
<セル5>
crop_right = im.crop((0, 0, 1420,1280))
crop_right
実行結果
最後に下をトリミング。
<セル6>
crop_lower = im.crop((0, 0, 1920,780))
crop_lower
実行結果
ちなみにトリミングして残す範囲を括弧一つで入力してしまうとこんなエラーがでます。
crop_lower = im.crop(0, 0, 1920,780)
crop_lower
実行結果
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-18-75930be12fa8> in <module>
----> 1 crop_lower = im.crop(0, 0, 1920,780)
2
3 crop_lower
TypeError: crop() takes from 1 to 2 positional arguments but 5 were given
画像のサイズ変更
次に画像のサイズ変更をしてみましょう。
サイズ変更には「画像名.resize(サイズ変更後の横、サイズ変更後の縦)」を使います。
<セル7>
resized = im.resize((1000, 1280))
print(resized.size)
resized
実行結果
(1000, 1280)
画像の保存
画像の保存は「画像名.save(保存する画像名)」です。
<セル8>
resized.save("resized.png")
実行結果
これで大体やりたいことはできそうです。
ただしサイズ変更が縦横比が変わってしまっているので、この点はプログラムで修正が必要になりそうです。
次回は縦横比を変えない状態でサイズ変更する方法を探っていきましょう。
ではでは今回はこんな感じで。
コメント