X-Git-Url: https://git.mdrn.pl/redakcja.git/blobdiff_plain/36387dac2e103ca656be9dc65fabb936f80191d1..97e1a72c211205e4596accbfc86cf5eeaec487ee:/scripts/imgconv.py diff --git a/scripts/imgconv.py b/scripts/imgconv.py new file mode 100755 index 00000000..ce514b32 --- /dev/null +++ b/scripts/imgconv.py @@ -0,0 +1,94 @@ +#!/usr/bin/env python +import sys +import os +import shutil +from os.path import splitext, dirname, basename, realpath +from PIL import Image, ImageFilter, ImageEnhance, ImageOps + + +def resize(image, max_width, max_height): + """Resize image so it's not wider than max_width and not higher than max_height.""" + width, height = image.size + ratio = max(1.0, float(width) / max_width, float(height) / max_height) + new_width, new_height = int(width / ratio), int(height / ratio) + return image.resize((new_width, new_height), Image.ANTIALIAS) + + +def crop(image, ratio, from_right=False): + """Crop image to ratio of current width.""" + width, height = image.size + new_width = width * ratio + if from_right: + bounds = (int(width - new_width), 0, int(width), int(height)) + else: + bounds = (0, 0, int(new_width), int(height)) + image = image.crop(bounds) + image.load() + return image + + +def ratio(image): + """Return width to height ratio of image.""" + width, height = image.size + return float(width) / height + + +def try_creating(directory): + try: + os.mkdir(directory) + except: + pass + + +output_dir = realpath(os.getcwd()) + '/output' +# big_output_dir = output_dir + '/big' +tmp_output_dir = output_dir + '/tmp' + +try_creating(output_dir) +# try_creating(big_output_dir) +try_creating(tmp_output_dir) + + +for file_name in sys.argv[1:]: + base_name, ext = splitext(file_name) + try: + image = Image.open(file_name) + except IOError, e: + sys.stderr.write('\nerror:%s:%s\n' % (file_name, e.message)) + continue + + # Check ratio + if ratio(image) > 1: + images = [crop(image, 0.6), crop(image, 0.6, from_right=True)] + else: + images = [image] + + for i, image in enumerate(images): + image_name = '%s.%d.png' % (basename(base_name), i) + + # Save files + small_image = resize(image, 640, 960) + small_image = small_image.convert('L') + small_image = ImageOps.autocontrast(small_image, cutoff=85) + # small_image = small_image.filter(ImageFilter.SHARPEN) + small_image.save(tmp_output_dir + '/' + image_name) + + os.system('pngnq -n 128 -s 1 -e .png -d "%s" -f "%s"' % ( + output_dir, + tmp_output_dir + '/' + image_name, + )) + os.remove(tmp_output_dir + '/' + image_name) + + # big_image = resize(image, 960, 1440) + # big_image = big_image.convert('L') + # big_image = big_image.filter(ImageFilter.SHARPEN) + # big_image.save(tmp_output_dir + '/' + image_name, optimize=True) + # os.system('pngnq -n 16 -s 1 -e .png -d "%s" -f "%s"' % ( + # big_output_dir, + # tmp_output_dir + '/' + image_name, + # )) + # os.remove(tmp_output_dir + '/' + image_name) + + sys.stderr.write('.') + +shutil.rmtree(tmp_output_dir)