最近、私の子供は彼の好きな漫画からキャラクターのカラーリングを作りたいと思っていました。明らかな解決策は、Linux用のある種のグラフィカルエディタを使用することでしたが(私はLinuxユーザーであるため)、私は怠惰な人間であることを思い出しました。
幸い、私はPythonとJupyterLabに精通しています。 Jupyterがどのようにタスクを簡単にするかを見てみましょう。
まず第一に、もちろん最新バージョンのPythonが必要です(macOSユーザーの場合は、このチュートリアルに従うことができます)。次に、JupyterLabとPillow(Python Imaging Library(PIL)のフォーク)をインストールして開く必要があります。
$ python -V
Python 3.8.5
$ pip install jupyterlab pillow
……………………..
$ jupyter lab
この場合、鹿をイメージして描きたいと思います。まず、画像をダウンロードしてローカルに保存しましょう。著作権に煩わされないように、CreativeCommonsまたはその他のオープンソースライセンスの画像を使用することをお勧めします。この例では、Unsplashのオープンソースイメージを使用して、deer.jpgという名前を付けました。
インポートすることから始めましょう:
from PIL import Image
画像を開いてサイズを確認しましょう。
pic = Image.open("deer.jpg")
pic.size
(3561, 5342)
これはおそらく私たちの仕事には少し多すぎます。これらの高解像度の画像は、ページを着色するのではなく、本に適しています。画像サイズを小さくする:
x, y = pic.size
x //= 10
y //= 10
smaller = pic.resize((x, y))
サイズは10分の1になりました。
smaller
完璧に。先に進みます。
この鹿は、境界検出アルゴリズムの餌食になりやすいはずです。着色を容易にするために、画像をクリーンアップする必要があります。そして、幸いなことに、これにも既成のアルゴリズムがあります。
from PIL import ImageFilter
edges = smaller.filter(ImageFilter.FIND_EDGES)
edges
これはおそらく最も重要なステップです。余分な詳細はすべて削除し、明確な線を残します。色は少し変ですが、この問題を解決するのは難しくありません。画像をカラーストライプに分割し、最も鮮明な線のあるものを選択します。
bands = edges.split()
bands[0]
これで線ははっきりしましたが、パレット自体はまだ印刷に適していません。これは、プリンターのインクが不足し、子供が黒い背景に絵を描くことを好まないためです。そこで、色を反転させます。xのしきい値をmax-blackとmax-whiteに設定して、線をさらに明確にします。
outline = bands[0].point(lambda x: 255 if x<100 else 0)
outline
ここで、画像に多くの空きスペースが残っていることに注意してみましょう。それでは、トリミングしてみましょう。
outline.crop((10, 200, 300, 400))
まあ、それだけです。写真をPDF形式(印刷用)で保存しましょう:
outline.save("deer.pdf")
これはあなたがあなたの子供のためにあなた自身の着色ページを簡単に作ることができる方法です:最小のルーチン、最大のプログラミング!
広告
Epicサーバーは、強力なAMDEPYCプロセッサと非常に高速なIntelNVMeドライブを備えたLinuxまたはWindowsVPSです。ホットケーキのように分散!
