Module: SafeImage::Optimizer
- Defined in:
- lib/safe_image/optimizer.rb
Constant Summary collapse
- MAX_PNGQUANT_SIZE =
pngquant’s lossy trial is worthwhile only for small generated PNGs; above this size the extra decode/quantize pass is comparatively expensive. The lossless PNG optimizer still runs for larger PNGs.
500_000- JPEGTRAN_OPERATIONS =
EXIF orientation values mapped onto jpegtran’s lossless transforms.
{ 2 => %w[-flip horizontal], 3 => %w[-rotate 180], 4 => %w[-flip vertical], 5 => ["-transpose"], 6 => %w[-rotate 90], 7 => ["-transverse"], 8 => %w[-rotate 270] }.freeze
Class Method Summary collapse
- .jpegtran_perfect_reject?(error) ⇒ Boolean
-
.optimize(input:, output:, mode: :lossless, strip_metadata: true, quality: nil, timeout: Runner::DEFAULT_TIMEOUT, strict: true, assume_upright: false) ⇒ Object
assume_upright: skips the JPEG orientation check; only for callers optimising output this gem just encoded (which is always upright).
Class Method Details
.jpegtran_perfect_reject?(error) ⇒ Boolean
25 26 27 28 |
# File 'lib/safe_image/optimizer.rb', line 25 def jpegtran_perfect_reject?(error) error.is_a?(CommandError) && error.category == :exit_status && error.status.to_i == 1 && Array(error.command).include?("-perfect") end |
.optimize(input:, output:, mode: :lossless, strip_metadata: true, quality: nil, timeout: Runner::DEFAULT_TIMEOUT, strict: true, assume_upright: false) ⇒ Object
assume_upright: skips the JPEG orientation check; only for callers optimising output this gem just encoded (which is always upright).
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/safe_image/optimizer.rb', line 32 def optimize( input:, output:, mode: :lossless, strip_metadata: true, quality: nil, timeout: Runner::DEFAULT_TIMEOUT, strict: true, assume_upright: false ) input, output = PathSafety.ensure_distinct_file_paths!(input, output) ext = normalized_extension(input) StagedOutput.replace(output, suffix: ".safe-image.#{ext}") do |tmp_path| FileUtils.cp(input, tmp_path) optimize_working_file!( tmp_path, mode: mode, strip_metadata: , quality: quality, timeout: timeout, strict: strict, assume_upright: assume_upright ) end end |