Class: SafeImage::OperationBackends::ImageMagick

Inherits:
Base
  • Object
show all
Defined in:
lib/safe_image/operation_backends/image_magick.rb

Overview

ImageMagick operation orchestration. Inputs/outputs still pass the shared path safety checks before the lower backend builds argv arrays with coder: prefixes and the restrictive policy.xml.

Instance Attribute Summary

Attributes inherited from Base

#config

Instance Method Summary collapse

Methods inherited from Base

#frame_count, #initialize

Constructor Details

This class inherits a constructor from SafeImage::OperationBackends::Base

Instance Method Details

#convert(input:, output:, format:, quality:, optimize:, max_pixels:, chroma_subsampling: nil) ⇒ Object



61
62
63
64
65
66
67
68
# File 'lib/safe_image/operation_backends/image_magick.rb', line 61

def convert(input:, output:, format:, quality:, optimize:, max_pixels:, chroma_subsampling: nil)
  input, output = input_output!(input, output)
  probe = operation_probe(input, max_pixels: resolved_max_pixels(max_pixels))
  normalized_format = Formats.normalize(format)
  info = ImageMagickBackend.convert(input: probe.input, output: output, format: format, quality: quality)
  optimize_output(output, normalized_format == "jpg" ? quality : nil) if optimize
  result_from_info(probe.input, output, info, :imagemagick, tier: :convert)
end

#convert_favicon_to_png(input:, output:, optimize:, max_pixels: nil) ⇒ Object



77
78
79
80
81
82
# File 'lib/safe_image/operation_backends/image_magick.rb', line 77

def convert_favicon_to_png(input:, output:, optimize:, max_pixels: nil)
  input, output = input_output!(input, output)
  info = ImageMagickBackend.convert_ico_to_png(input: Pathname.new(input).expand_path.to_s, output: output)
  optimize_output(output, nil) if optimize
  result_from_info(input, output, info, :imagemagick, tier: :convert_favicon)
end

#crop(input:, output:, width:, height:, quality:, optimize:, max_pixels:, chroma_subsampling: nil) ⇒ Object



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/safe_image/operation_backends/image_magick.rb', line 28

def crop(input:, output:, width:, height:, quality:, optimize:, max_pixels:, chroma_subsampling: nil)
  input, output = input_output!(input, output)
  probe = operation_probe(input, max_pixels: resolved_max_pixels(max_pixels))
  output = safe_output!(output)
  info =
    ImageMagickBackend.resize_like(
      input: probe.input,
      output: output,
      width: width,
      height: height,
      format: Formats.extension(output),
      quality: quality,
      crop: :north
    )
  optimize_output(output, quality) if optimize
  result_from_info(probe.input, output, info, :imagemagick, tier: :crop)
end

#downsize(input:, output:, dimensions:, optimize:, max_pixels:, quality: nil, chroma_subsampling: nil) ⇒ Object



46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/safe_image/operation_backends/image_magick.rb', line 46

def downsize(input:, output:, dimensions:, optimize:, max_pixels:, quality: nil, chroma_subsampling: nil)
  input, output = input_output!(input, output)
  probe = operation_probe(input, max_pixels: resolved_max_pixels(max_pixels))
  output = safe_output!(output)
  info =
    ImageMagickBackend.downsize(
      input: probe.input,
      output: output,
      dimensions: dimensions,
      format: Formats.extension(output)
    )
  optimize_output(output, nil) if optimize
  result_from_info(probe.input, output, info, :imagemagick, tier: :downsize)
end

#fix_orientation(input:, output:, max_pixels:, quality: nil) ⇒ Object



70
71
72
73
74
75
# File 'lib/safe_image/operation_backends/image_magick.rb', line 70

def fix_orientation(input:, output:, max_pixels:, quality: nil)
  input, output = input_output!(input, output)
  probe = operation_probe(input, max_pixels: resolved_max_pixels(max_pixels))
  info = ImageMagickBackend.fix_orientation(input: probe.input, output: output)
  result_from_info(probe.input, output, info, :imagemagick, tier: :fix_orientation)
end

#letter_avatar(output:, size:, background_rgb:, letter:, pointsize:, font:) ⇒ Object



84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
# File 'lib/safe_image/operation_backends/image_magick.rb', line 84

def letter_avatar(output:, size:, background_rgb:, letter:, pointsize:, font:)
  output = safe_output!(output)
  request = {
    output: output,
    size: size,
    background_rgb: background_rgb,
    letter: letter,
    pointsize: pointsize,
    font: font
  }
  result_from_info(
    "generated",
    output,
    ImageMagickBackend.letter_avatar(**request),
    :imagemagick,
    tier: :letter_avatar
  )
end

#resize(input:, output:, width:, height:, quality:, optimize:, max_pixels:, chroma_subsampling: nil) ⇒ Object



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/safe_image/operation_backends/image_magick.rb', line 11

def resize(input:, output:, width:, height:, quality:, optimize:, max_pixels:, chroma_subsampling: nil)
  input, output = input_output!(input, output)
  probe = operation_probe(input, max_pixels: resolved_max_pixels(max_pixels))
  output = safe_output!(output)
  info =
    ImageMagickBackend.thumbnail(
      input: probe.input,
      output: output,
      width: width,
      height: height,
      format: Formats.extension(output),
      quality: quality
    )
  optimize_output(output, quality) if optimize
  result_from_info(probe.input, output, info, :imagemagick, tier: :resize)
end