Recently, my child needed to make a coloring web page from a favourite cartoon. My first thought was to make use of one of many open supply applications on Linux that manipulate photographs, however then I remembered I don’t know find out how to use any of them. Luckily, I understand how to make use of Jupyter and Python.
How arduous can or not it’s, I figured, to make use of Jupyter for that?
To comply with alongside, it is advisable have a contemporary model of Python (should you’re a macOS consumer, you’ll be able to comply with this guide), then set up and open Jupyter Labs, which you’ll be able to study extra about here, and Pillow, a pleasant fork of the Python Imaging Library (PIL), with:
$ python -V
$ pip set up jupyterlab pillow
# Installation course of ommitted
$ jupyter lab
Imagine you need to make a coloring web page with a picture of a deer. The first step might be to obtain an image of a deer and reserve it regionally. Beware of photographs with doubtful copyright standing; it is best to make use of one thing with a Creative Commons or different open entry license. For this instance, I used an brazenly licensed picture from Unsplash and named it
Once you are in Jupyter Lab, begin by importing
from PIL import Image
With these preliminaries out of the best way, open the picture then have a look at the picture dimension:
pic = Image.open("deer.jpg")
Wow, it is a little bit of sticker shock—high-resolution photos are fantastic if you wish to make a pleasant guide about deer, however that is most likely too huge for a selfmade coloring guide web page. Scale it waaaaaaay down. (This kindness is necessary in order that this text hundreds quick in your browser, too!)
x, y = pic.dimension
x //= 10
y //= 10
smaller = pic.resize((x, y))
This lowered the size of the picture by 10. See what that appears like:
Beautiful! Majestic and distant, this deer must be a breeze for an edge-detection algorithm. Speaking of which, sure, that is the following step. You need to clear up the picture so coloring shall be is a breeze, and fortunately there’s an algorithm for that. Do some edge detection:
from PIL import ImageFilter
edges = smaller.filter(ImageFilter.FIND_EDGES)
This might be crucial step. It removes all of the extraneous particulars and leaves clear strains. The shade is just a little bizarre, however this isn’t a tough drawback to unravel. Split the picture into its shade bands, and select the one the place the strains are crispest:
bands = edges.break up()
The strains are clear now, however this isn’t a great picture to print as a result of your printer will run out of ink, and your child is not going to be completely happy coloring on black. So invert the colours. While you are at it, snap the colours to max-black or max-white to make the strains even crisper by utilizing a lambda function call:
define = bands[zero].level(lambda x: 255 if x<100 else zero)
The authentic picture had numerous nature that I mercilessly cleared. Now there’s numerous empty area, so crop the image to the necessities:
define.crop((10, 200, 300, 400))
All that is left is to save lots of the image as one thing simple to print, like a PDF:
I will let you determine find out how to print from Linux.
Have enjoyable making selfmade coloring books in your youngsters!