Class: MiniMagick::Image
- Inherits:
-
Object
- Object
- MiniMagick::Image
- Defined in:
- lib/mini_magick.rb
Instance Attribute Summary collapse
-
#output ⇒ Object
readonly
Returns the value of attribute output.
-
#path ⇒ Object
readonly
Returns the value of attribute path.
-
#tempfile ⇒ Object
readonly
Returns the value of attribute tempfile.
Class Method Summary collapse
- .from_blob(blob, extension = nil) ⇒ Object
-
.from_file(image_path) ⇒ Object
Use this if you don’t want to overwrite the image file.
Instance Method Summary collapse
-
#[](value) ⇒ Object
For reference see www.imagemagick.org/script/command-line-options.php#format.
-
#combine_options(&block) ⇒ Object
You can use multiple commands together using this method.
-
#format(format) ⇒ Object
This is a ‘special’ command because it needs to change @path to reflect the new extension.
-
#format_option(format) ⇒ Object
Outputs a carriage-return delimited format string for Unix and Windows.
-
#initialize(input_path, tempfile = nil) ⇒ Image
constructor
Instance Methods —————-.
-
#method_missing(symbol, *args) ⇒ Object
If an unknown method is called then it is sent through the morgrify program Look here to find all the commands (www.imagemagick.org/script/mogrify.php).
- #run_command(command, *args) ⇒ Object
-
#to_blob ⇒ Object
Give you raw data back.
-
#windows? ⇒ Boolean
Check to see if we are running on win32 – we need to escape things differently.
-
#write(output_path) ⇒ Object
Writes the temporary image that we are using for processing to the output path.
Constructor Details
#initialize(input_path, tempfile = nil) ⇒ Image
Instance Methods
42 43 44 45 46 47 48 |
# File 'lib/mini_magick.rb', line 42 def initialize(input_path, tempfile=nil) @path = input_path @tempfile = tempfile # ensures that the tempfile will stick around until this image is garbage collected. # Ensure that the file is an image run_command("identify", @path) end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(symbol, *args) ⇒ Object
If an unknown method is called then it is sent through the morgrify program Look here to find all the commands (www.imagemagick.org/script/mogrify.php)
91 92 93 94 95 |
# File 'lib/mini_magick.rb', line 91 def method_missing(symbol, *args) args.push(@path) # push the path onto the end run_command("mogrify", "-#{symbol}", *args) self end |
Instance Attribute Details
#output ⇒ Object (readonly)
Returns the value of attribute output.
15 16 17 |
# File 'lib/mini_magick.rb', line 15 def output @output end |
#path ⇒ Object (readonly)
Returns the value of attribute path.
13 14 15 |
# File 'lib/mini_magick.rb', line 13 def path @path end |
#tempfile ⇒ Object (readonly)
Returns the value of attribute tempfile.
14 15 16 |
# File 'lib/mini_magick.rb', line 14 def tempfile @tempfile end |
Class Method Details
.from_blob(blob, extension = nil) ⇒ Object
20 21 22 23 24 25 26 27 28 29 30 |
# File 'lib/mini_magick.rb', line 20 def from_blob(blob, extension=nil) begin tempfile = ImageTempFile.new("minimagick#{extension}") tempfile.binmode tempfile.write(blob) ensure tempfile.close end return self.new(tempfile.path, tempfile) end |
.from_file(image_path) ⇒ Object
Use this if you don’t want to overwrite the image file
33 34 35 36 37 |
# File 'lib/mini_magick.rb', line 33 def from_file(image_path) File.open(image_path, "rb") do |f| self.from_blob(f.read, File.extname(image_path)) end end |
Instance Method Details
#[](value) ⇒ Object
For reference see www.imagemagick.org/script/command-line-options.php#format
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
# File 'lib/mini_magick.rb', line 51 def [](value) # Why do I go to the trouble of putting in newlines? Because otherwise animated gifs screw everything up case value.to_s when "format" run_command("identify", "-format", format_option("%m"), @path).split("\n")[0] when "height" run_command("identify", "-format", format_option("%h"), @path).split("\n")[0].to_i when "width" run_command("identify", "-format", format_option("%w"), @path).split("\n")[0].to_i when "original_at" # Get the EXIF original capture as a Time object Time.local(*self["EXIF:DateTimeOriginal"].split(/:|\s+/)) rescue nil when /^EXIF\:/i run_command('identify', '-format', "\"%[#{value}]\"", @path).chop else run_command('identify', '-format', "\"#{value}\"", @path).split("\n")[0] end end |
#combine_options(&block) ⇒ Object
You can use multiple commands together using this method
98 99 100 101 102 |
# File 'lib/mini_magick.rb', line 98 def (&block) c = CommandBuilder.new block.call c run_command("mogrify", *c.args << @path) end |
#format(format) ⇒ Object
This is a ‘special’ command because it needs to change @path to reflect the new extension
71 72 73 74 75 76 |
# File 'lib/mini_magick.rb', line 71 def format(format) run_command("mogrify", "-format", format, @path) @path = @path.sub(/(\.\w+)?$/, ".#{format}") raise "Unable to format to #{format}" unless File.exists?(@path) end |
#format_option(format) ⇒ Object
Outputs a carriage-return delimited format string for Unix and Windows
110 111 112 |
# File 'lib/mini_magick.rb', line 110 def format_option(format) windows? ? "#{format}\\n" : "#{format}\\\\n" end |
#run_command(command, *args) ⇒ Object
114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 |
# File 'lib/mini_magick.rb', line 114 def run_command(command, *args) args.collect! do |arg| arg = arg.to_s arg = %|"#{arg}"| unless arg[0] == ?- # values quoted because they can contain characters like '>', but don't quote switches arg end @output = `#{command} #{args.join(' ')}` if $? != 0 raise MiniMagickError, "ImageMagick command (#{command} #{args.join(' ')}) failed: Error Given #{$?}" else @output end end |
#to_blob ⇒ Object
Give you raw data back
85 86 87 |
# File 'lib/mini_magick.rb', line 85 def to_blob File.read @path end |
#windows? ⇒ Boolean
Check to see if we are running on win32 – we need to escape things differently
105 106 107 |
# File 'lib/mini_magick.rb', line 105 def windows? !(RUBY_PLATFORM =~ /win32/).nil? end |
#write(output_path) ⇒ Object
Writes the temporary image that we are using for processing to the output path
79 80 81 82 |
# File 'lib/mini_magick.rb', line 79 def write(output_path) FileUtils.copy_file @path, output_path run_command "identify", output_path # Verify that we have a good image end |