diff options
author | Hans Hagen <pragma@wxs.nl> | 2019-06-01 22:12:48 +0200 |
---|---|---|
committer | Context Git Mirror Bot <phg@phi-gamma.net> | 2019-06-01 22:12:48 +0200 |
commit | 822d6299d6c28fe3780ff40831ec5c00c60133f5 (patch) | |
tree | 365fa79c20cb515efe97785cdf59430ab17a1e8f /tex/context/base/mkiv/lpdf-img.lua | |
parent | e2658addf306f729945c184e46f98df39dd7026c (diff) | |
download | context-822d6299d6c28fe3780ff40831ec5c00c60133f5.tar.gz |
2019-06-01 19:20:00
Diffstat (limited to 'tex/context/base/mkiv/lpdf-img.lua')
-rw-r--r-- | tex/context/base/mkiv/lpdf-img.lua | 42 |
1 files changed, 32 insertions, 10 deletions
diff --git a/tex/context/base/mkiv/lpdf-img.lua b/tex/context/base/mkiv/lpdf-img.lua index 8f9c87ddd..a299a023d 100644 --- a/tex/context/base/mkiv/lpdf-img.lua +++ b/tex/context/base/mkiv/lpdf-img.lua @@ -855,11 +855,19 @@ do switch(true) end - local alwaysdecode = false + local alwaysdecode = false + local compresslevel = 3 - -- directives.register("graphics.png.decode", function(v) - -- alwaysdecode = v - -- end) + directives.register("graphics.png.recompress", function(v) + alwaysdecode = v + end) + + directives.register("graphics.png.compresslevel", function(v) + v = tonumber(v) + if compresslevel >= 0 or compresslevel <= 9 then + compresslevel = v + end + end) function injectors.png(specification) -- inspect(specification) @@ -946,6 +954,7 @@ do end -- local decode = alwaysdecode + local filter = pdfconstant("FlateDecode") local major = pdfmajorversion() local minor = pdfminorversion() if major > 1 then @@ -994,8 +1003,12 @@ do else content = convert(r) -- can be in deinterlace if needed end - content = zlibcompress(content,3) - decode = true + if compresslevel > 0 then + content = zlibcompress(content,compresslevel) + else + filter = nil + end + decode = true elseif mask then if not (colordepth == 8 or colordepth == 16) then report_png("mask can't be split from the image") @@ -1003,10 +1016,15 @@ do end content = zlibdecompress(content) content, mask = decodemask(content,xsize,ysize,colordepth,colorspace) - content = zlibcompress(content,3) + if compresslevel > 0 then + content = zlibcompress(content,compresslevel) + else + filter = nil + end decode = true -- we don't copy the filter byte elseif transparent then -- in test suite + -- how about decode/recompress here if palette then mask = createmask(content,palette,transparent,xsize,ysize,colordepth,colorspace) else @@ -1017,8 +1035,12 @@ do local bytes = analyze(colordepth,colorspace) if bytes then content = zlibdecompress(content) - content = applyfilter(content,xsize,ysize,bytes) - content = zlibcompress(content,3) + content = decodestrip(openstring(content),xsize,ysize,bytes) + if compresslevel > 0 then + content = zlibcompress(content,compresslevel) + else + filter = nil + end else return end @@ -1041,7 +1063,7 @@ do Width = xsize, Height = ysize, BitsPerComponent = colordepth, - Filter = pdfconstant("FlateDecode"), + Filter = filter, ColorSpace = palette or pdfconstant(colorspace), Length = #content, } + specification.attr |