Class: Imageproxy::Convert

Inherits:
Command
  • Object
show all
Defined in:
lib/imageproxy/convert.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options) ⇒ Convert

Returns a new instance of Convert.



7
8
9
10
11
12
13
# File 'lib/imageproxy/convert.rb', line 7

def initialize(options)
  @options = options
  if (!(options.resize || options.thumbnail || options.rotate || options.flip || options.format ||
    options.quality || options.overlay))
    raise "Missing action or illegal parameter value"
  end
end

Instance Attribute Details

#optionsObject (readonly)

Returns the value of attribute options.



5
6
7
# File 'lib/imageproxy/convert.rb', line 5

def options
  @options
end

Instance Method Details

#convert_optionsObject



36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/imageproxy/convert.rb', line 36

def convert_options
  convert_options = []
  convert_options << "-resize #{resize_thumbnail_options(options.resize)}" if options.resize
  convert_options << "-thumbnail #{resize_thumbnail_options(options.thumbnail)}" if options.thumbnail
  convert_options << "-flop" if options.flip == "horizontal"
  convert_options << "-flip" if options.flip == "vertical"
  convert_options << rotate_options if options.rotate
  convert_options << "-colors 256" if options.format == "png8"
  convert_options << "-quality #{options.quality}" if options.quality
  convert_options << interlace_options if options.progressive
  convert_options.join " "
end

#execute(user_agent = nil, timeout = nil) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/imageproxy/convert.rb', line 15

def execute(user_agent=nil, timeout=nil)
  if options.overlay
    @overlay_file ||= Tempfile.new("imageproxy").tap(&:close)
    try_command_with_timeout(curl options.overlay, :user_agent => user_agent, :timeout => timeout, :output => @overlay_file.path)
    try_command_with_timeout curl(options.source, :user_agent => user_agent, :timeout => timeout) +
                      "| composite #{@overlay_file.path} - - | convert - #{convert_options} #{new_format}#{file.path}"
    file
  else
    try_command_with_timeout %'#{curl options.source, :user_agent => user_agent, :timeout => timeout} | convert - #{convert_options} #{new_format}#{file.path}'
    file
  end
end

#fileObject



87
88
89
# File 'lib/imageproxy/convert.rb', line 87

def file
  @tempfile ||= Tempfile.new("imageproxy").tap(&:close)
end

#interlace_optionsObject



72
73
74
75
76
77
78
79
80
81
# File 'lib/imageproxy/convert.rb', line 72

def interlace_options
  case options.progressive
    when "true"
      "-interlace JPEG"
    when "false"
      "-interlace none"
    else
      ""
  end
end

#new_formatObject



83
84
85
# File 'lib/imageproxy/convert.rb', line 83

def new_format
  options.format ? "#{options.format}:" : ""
end

#resize_thumbnail_options(size) ⇒ Object



49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/imageproxy/convert.rb', line 49

def resize_thumbnail_options(size)
  case options.shape
    when "cut"
      "#{size}^ -gravity center -extent #{size}"
    when "preserve"
      size
    when "pad"
      background = options.background ? %|"#{options.background}"| : %|none -matte|
      "#{size} -background #{background} -gravity center -extent #{size}"
    else
      size
  end
end

#rotate_optionsObject



63
64
65
66
67
68
69
70
# File 'lib/imageproxy/convert.rb', line 63

def rotate_options
  if options.rotate.to_f % 90 == 0
    "-rotate #{options.rotate}"
  else
    background = options.background ? %|"#{options.background}"| : %|none|
    "-background #{background} -matte -rotate #{options.rotate}"
  end
end

#try_command_with_timeout(cmd) ⇒ Object



28
29
30
31
32
33
34
# File 'lib/imageproxy/convert.rb', line 28

def try_command_with_timeout cmd
  Timeout::timeout(10) { execute_command cmd }
rescue Timeout::Error => e
  puts "Command timed out after 10 seconds, retrying >#{cmd}<"
  execute_command cmd
  puts "SUCCESS " * 20
end