nikkie-ftnextの日記

イベントレポートや読書メモを発信

世界一? かわいい! をPythonにもやらせよう #世界一可愛い

目次

震源

学マスでした

Pythonで世界一可愛い

要は画像の加工です。

『退屈なことはPythonにやらせよう』に、画像の上にロゴ画像を載せるプログラムがあります。
https://automatetheboringstuff.com/2e/chapter19/ (Project: Adding a Logo)
これをもとに開発しました。

実装解説

このブログで頻繁に取り上げているpipx run1ですが、なんとgistからも実行できることを知りました!
https://pipx.pypa.io/stable/#running-from-url

% pipx run https://gist.githubusercontent.com/ftnext/162898df3011883380f89771b647adde/raw/818fa20479eb9187d9efacb4d291bc959a21cf3a/put_mask.py \
    emily_sakura.jpg most_kawaii_yoko.png emily_sakura_kawaii.png 

実装にはPillowを使っています。

「世界一?かわいい!」(マスク画像)をそのまま上から載せる作戦にしました(※他の実装もありえます)。
元の画像をthumbnailで縦横比を保ったまま、マスク画像のサイズに近づけています。
https://pillow.readthedocs.io/en/stable/reference/Image.html#PIL.Image.Image.thumbnail

This method calculates an appropriate thumbnail size to preserve the aspect of the image

上下左右に余白を追加してマスク画像とサイズを揃えています
(実装は真っ白な画像を作って、そこに貼り付ける

マスク画像はpasteで貼り付けます。
https://pillow.readthedocs.io/en/stable/reference/Image.html#PIL.Image.Image.paste
このときmask引数がポイント。
マスク画像の透過部分を除いて、貼り付けられます。

If a mask is given, this method updates only the regions indicated by the mask.

(突貫で作ったので、サイズの扱い部分、バグを埋め込んでいるかもしれません。気づいたら修正します)

できあがり!2

終わりに

世界一かわいいエミリーちゃんを自給自足しました🤗
その中でPillowまわりでいくつか発見がありました。
カワイイは(Pythonで)つくれる!!

開発中、自分のスライドで遊んでいたのですが、

hayasaka(HTMLで作ったスライドの画像を撮るツール)にかわいくする機能、ありかも...

番外:世界一可愛い私で申し訳ない

P.S. 「連続テレビ小説」にも拡張できるはず!

マスクの扱いの調整が必要そうですね(宿題事項)


  1. リンク集的な記事です
  2. PyCon JP スタッフをしていた時期のnikkieさんをかわいくしてみました。画像のURLはこちらから