Cropped Yuu's face too
23/3/2020
Similar to Chito previously, I cropped out every Yuu face from Bloom Into You totalling 2325 images.
You can find them at https://gnupluslinux.com/yuu/ and download a zip containing every image sorted by chapter and ordered here.
Who cares for the details but, I used xbindkeys to create a shortcut that launches a script. This script uses scrot to take a cropped screenshot into a directory.
During the cropping of all faces I used feh to view images in order using `ls -1 -rt | xargs feh`. This will list the directory, show only file names, reverse the order and order them by modification time.
The file name is randomised, so to order them I needed to use the files modification time. To do this I used a simple bash script: `n=0; ls -tr | while read i; do n=$((n+1)); mv -- "$i" "$(printf %03d "$n").png"; done`. This renames every image in order (001.png, 002.png ...). I took care to use the `preserve` flag in cp (copy) to preserve the modification date when copying around.
Next I had to compress the images, to do this I used pngquant `pngquant --quality=65-80 * --ext .png --force`.
To prevent having to run the script manually in each chapter directory one at a time I ran them in a loop `for d in chapter*; do ( cd "$d" && ../../script.sh ); done`.
After compression the total file size for all images went from 138MB to 52MB.
Then I had to somehow turn these images files into html files. To do this I wrote a simple Python script that iterates through every chapter and image and generates the pages and navigation bars.

The python script:
#!/usr/bin/python
import glob
outputdir = "out/" # directory to output html
templatefile = "template.txt" # template file
imgglob = "*.png" # glob for image files
nochapters = 45; # number of chapters to include
localimgloc = "../" # location of images on filesystem (../chapterx)
dirprefix = "chapter"; # prefix for chapter directories
imgloc = "https://gnupluslinux.com/anime/yuu/"; # location of images
# final will be imgloc+dirprefix+chapternumber
# (https://gnupluslibux.com/anime/yuu/chapterx/001.png)
def getimgno(chapter):
'''
get number of images in chapter
'''
return len(glob.glob1("%s/%s%s" % (localimgloc, dirprefix, str(chapter)), imgglob))
def generatenavbar(chapter):
'''
generate navigation bar for chapter
'''
bar = "Chapter: ";
for p in range(1, nochapters+1):
if p == chapter:
# handle own chapter specially
bar += "<strong>%s</strong> " % (str(p));
else:
bar += "<a href=\"%s%s.html\">%s</a> " % (dirprefix, str(p), str(p));
return bar;
def generateimages(chapter):
imgcount = getimgno(chapter);
images = "";
print(str(imgcount));
for p in range(1, imgcount+1):
images += "<a href=\"%s/%s%s/%03d.png\"> <img src=\"%s/%s%s/%03d.png\" alt=\"Yuu face #%s\"></a>\n" \
% (imgloc, dirprefix, str(chapter), p, imgloc, dirprefix, str(chapter), p, p);
#print(images);
return images;
def generatepages():
'''
call all functions and generate/output final html
'''
for p in range(1, nochapters+1):
navbar = generatenavbar(p);
# read template into memory
templatedata = "";
with open (templatefile, 'r') as template:
templatedata = template.read();
#insert title
templatedata = templatedata.replace("{TITLE}", "Yuu's face in chapter %s" % p);
# insert navbar
templatedata = templatedata.replace("{NAVBAR}", navbar);
#insert images
images = generateimages(p);
templatedata = templatedata.replace("{IMAGES}", images);
# write to output file
with open("%s/%s%s.html" % (outputdir, dirprefix, p), 'w') as out:
out.write(templatedata);
def main():
generatepages();
if __name__ == "__main__":
main();


