0

optimizeimages: add oxipng support

This commit is contained in:
Nicolas F
2017-03-16 15:50:02 +01:00
parent 5c44084332
commit 4770af93f7
2 changed files with 38 additions and 0 deletions

View File

@@ -777,6 +777,24 @@ Image options
**Default:** ``2``
``oxipng``
An optipng replacement written in Rust. Works much like optipng.
``olevel``
An integer between ``0`` (few optimizations) and ``6`` (many
optimizations). The default should be satisfactory for everyone,
higher levels than the default see almost no benefit.
**Default:** ``2``
``threads``
An integer specifying how many threads per process to use. Note that
Overviewer spawns one oxipng process per Overviewer worker process,
so increasing this value if you already have one Overviewer process
per CPU thread makes little sense, and can actually slow down the
rendering.
**Default:** ``1``
``pngcrush``
pngcrush, like optipng, is a lossless PNG recompressor. If you are able to do so, it
is recommended to use optipng instead, as it generally yields better results in less

View File

@@ -192,6 +192,26 @@ class jpegoptim(Optimizer, JPEGOptimizer):
return True
class oxipng(Optimizer, PNGOptimizer):
binarynames = ["oxipng"]
def __init__(self, olevel=2, threads=1):
if olevel > 6:
raise Exception("olevel should be between 0 and 6 inclusive")
if threads < 1:
raise Exception("threads needs to be at least 1")
self.olevel = olevel
self.threads = threads
def optimize(self, img):
Optimizer.fire_and_forget(self, [self.binaryname, "-o" +
str(self.olevel), "-q", "-t" +
str(self.threads), img])
def is_crusher(self):
return True
def optimize_image(imgpath, imgformat, optimizers):
for opt in optimizers:
if imgformat == 'png':