diff --git a/overviewer_core/optimizeimages.py b/overviewer_core/optimizeimages.py index aaa8280ea..6912a7b2c 100644 --- a/overviewer_core/optimizeimages.py +++ b/overviewer_core/optimizeimages.py @@ -15,6 +15,7 @@ import os import subprocess +from PIL import Image class Optimizer: @@ -209,6 +210,27 @@ def is_crusher(self): return True +class pillowpng(Optimizer, PNGOptimizer): + + def __init__(self, colors=256, dither=True): + if colors < 2: + raise Exception("You can't use less than 2 colors") + self.colors = colors + self.dither = dither + + def optimize(self, img): + orig = Image.open(img) + conv = orig.convert('P', palette=Image.ADAPTIVE, colors=self.colors, + dither=Image.FLOYDSTEINBERG if self.dither else Image.NONE) + conv.save(img, format='PNG', optimize=True) + + def check_availability(self): + return True + + def is_crusher(self): + return True + + def optimize_image(imgpath, imgformat, optimizers): for opt in optimizers: if imgformat == 'png': diff --git a/overviewer_core/settingsDefinition.py b/overviewer_core/settingsDefinition.py index 78def0ed2..dce00fc11 100644 --- a/overviewer_core/settingsDefinition.py +++ b/overviewer_core/settingsDefinition.py @@ -47,7 +47,7 @@ from .settingsValidators import * from .observer import ProgressBarObserver, LoggingObserver, JSObserver -from .optimizeimages import pngnq, optipng, pngcrush +from .optimizeimages import pngnq, optipng, pngcrush, pillowpng import platform import sys