# frozen_string_literal: true require 'image_optim/worker' require 'image_optim/option_helpers' class ImageOptim class Worker # http://www.advsys.net/ken/util/pngout.htm class Pngout < Worker COPY_CHUNKS_OPTION = option(:copy_chunks, false, 'Copy optional chunks'){ |v| !!v } STRATEGY_OPTION = option(:strategy, 0, 'Strategy: '\ '`0` - xtreme, '\ '`1` - intense, '\ '`2` - longest Match, '\ '`3` - huffman Only, '\ '`4` - uncompressed') do |v| OptionHelpers.limit_with_range(v.to_i, 0..4) end def run_order 2 end def optimize(src, dst, options = {}) args = %W[ -k#{copy_chunks ? 1 : 0} -s#{strategy} -q -y #{src} #{dst} ] execute(:pngout, args, options) && optimized?(src, dst) rescue SignalException => e raise unless Signal.list.key(e.signo) == 'SEGV' raise unless resolve_bin!(:pngout).version <= '20150920' warn "pngout caused Segmentation fault for #{src}" end end end end