mini_magick 1.2.3 → 1.2.5

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of mini_magick might be problematic. Click here for more details.

@@ -0,0 +1 @@
1
+ /pkg
File without changes
@@ -0,0 +1,72 @@
1
+ = MiniMagick
2
+
3
+ A ruby wrapper for ImageMagick command line.
4
+
5
+
6
+ == Why?
7
+
8
+ I was using RMagick and loving it, but it was eating up huge amounts
9
+ of memory. A simple script like this...
10
+
11
+ Magick::read("image.jpg") do |f|
12
+ f.write("manipulated.jpg")
13
+ end
14
+
15
+ ...would use over 100 Megs of Ram. On my local machine this wasn't a
16
+ problem, but on my hosting server the ruby apps would crash because of
17
+ their 100 Meg memory limit.
18
+
19
+
20
+ == Solution!
21
+
22
+ Using MiniMagick the ruby processes memory remains small (it spawns
23
+ ImageMagick's command line program mogrify which takes up some memory
24
+ as well, but is much smaller compared to RMagick)
25
+
26
+ MiniMagick gives you access to all the commandline options ImageMagick
27
+ has (Found here http://www.imagemagick.org/script/mogrify.php)
28
+
29
+
30
+ == Examples
31
+
32
+ Want to make a thumbnail from a file...
33
+
34
+ image = MiniMagick::Image.from_file("input.jpg")
35
+ image.resize "100x100"
36
+ image.write("output.jpg")
37
+
38
+ Want to make a thumbnail from a blob...
39
+
40
+ image = MiniMagick::Image.from_blob(blob)
41
+ image.resize "100x100"
42
+ image.write("output.jpg")
43
+
44
+ Need to combine several options?
45
+
46
+ image = MiniMagick::Image.from_file("input.jpg")
47
+ image.combine_options do |c|
48
+ c.sample "50%"
49
+ c.rotate "-90>"
50
+ end
51
+ image.write("output.jpg")
52
+
53
+ Want to manipulate an image at its source (You won't have to write it
54
+ out because the transformations are done on that file)
55
+
56
+ image = MiniMagick::Image.new("input.jpg")
57
+ image.resize "100x100"
58
+
59
+ Want to get some meta-information out?
60
+
61
+ image = MiniMagick::Image.from_file("input.jpg")
62
+ image[:width] # will get the width (you can also use :height and :format)
63
+ image["EXIF:BitsPerSample"] # It also can get all the EXIF tags
64
+ image["%m:%f %wx%h"] # Or you can use one of the many options of the format command
65
+
66
+ For more on the format command see
67
+ http://www.imagemagick.org/script/command-line-options.php#format
68
+
69
+
70
+ == Requirements
71
+
72
+ You must have ImageMagick installed.
data/Rakefile CHANGED
@@ -1,17 +1,68 @@
1
- # -*- ruby -*-
2
-
3
- require 'rubygems'
4
- require 'hoe'
5
- require './lib/mini_magick.rb'
6
-
7
- Hoe.new('mini_magick', MiniMagick::VERSION) do |p|
8
- p.rubyforge_name = 'mini_magick'
9
- p.author = 'Corey Johnson'
10
- p.email = 'probablycorey+ruby@gmail.com'
11
- p.summary = 'A simple image manipulation library based on ImageMagick.'
12
- p.description = p.paragraphs_of('README.txt', 2..5).join("\n\n")
13
- #p.url = p.paragraphs_of('README.txt', 0).first.split(/\n/)[1..-1]
14
- p.changes = p.paragraphs_of('History.txt', 0..1).join("\n\n")
1
+ require 'rake'
2
+ require 'rake/testtask'
3
+ require 'rake/rdoctask'
4
+
5
+ $:.unshift(File.dirname(__FILE__) + "/lib")
6
+ require 'mini_magick'
7
+
8
+ desc 'Default: run unit tests.'
9
+ task :default => :test
10
+
11
+ desc 'Test the mini_magick plugin.'
12
+ Rake::TestTask.new(:test) do |t|
13
+ t.libs << 'lib'
14
+ t.pattern = 'test/**/*_test.rb'
15
+ t.verbose = true
15
16
  end
16
17
 
17
- # vim: syntax=Ruby
18
+ desc 'Generate documentation for the mini_magick plugin.'
19
+ Rake::RDocTask.new(:rdoc) do |rdoc|
20
+ rdoc.rdoc_dir = 'rdoc'
21
+ rdoc.title = 'MiniMagick'
22
+ rdoc.options << '--line-numbers'
23
+ rdoc.options << '--inline-source'
24
+ rdoc.rdoc_files.include('README.rdoc')
25
+ rdoc.rdoc_files.include('lib/**/*.rb')
26
+ end
27
+
28
+ # Jewler tasks
29
+
30
+ begin
31
+ require 'jeweler'
32
+ Jeweler::Tasks.new do |gemspec|
33
+ gemspec.name = "mini_magick"
34
+ gemspec.summary = "Manipulate images with minimal use of memory."
35
+ gemspec.email = "probablycorey@gmail.com"
36
+ gemspec.homepage = "http://github.com/probablycorey/mini_magick"
37
+ gemspec.authors = ["Corey Johnson"]
38
+ gemspec.rubyforge_project = "mini-magick"
39
+ end
40
+ rescue LoadError
41
+ puts "Jeweler not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
42
+ end
43
+
44
+ begin
45
+ require 'rake/contrib/sshpublisher'
46
+ namespace :rubyforge do
47
+
48
+ desc "Release gem and RDoc documentation to RubyForge"
49
+ task :release => ["rubyforge:release:gem", "rubyforge:release:docs"]
50
+
51
+ namespace :release do
52
+ desc "Publish RDoc to RubyForge."
53
+ task :docs => [:rdoc] do
54
+ config = YAML.load(
55
+ File.read(File.expand_path('~/.rubyforge/user-config.yml'))
56
+ )
57
+
58
+ host = "#{config['username']}@rubyforge.org"
59
+ remote_dir = "/var/www/gforge-projects/the-perfect-gem/"
60
+ local_dir = 'rdoc'
61
+
62
+ Rake::SshDirPublisher.new(host, remote_dir, local_dir).upload
63
+ end
64
+ end
65
+ end
66
+ rescue LoadError
67
+ puts "Rake SshDirPublisher is unavailable or your rubyforge environment is not configured."
68
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 1.2.5
@@ -2,12 +2,8 @@ require "tempfile"
2
2
 
3
3
  module MiniMagick
4
4
  class ImageTempFile < Tempfile
5
- def make_tmpname(basename, n)
6
- # force tempfile to use basename's extension if provided
7
- ext = File.extname(basename)
8
-
9
- # force hyphens instead of periods in name
10
- sprintf('%s%d-%d%s', File.basename(basename, ext), $$, n, ext)
5
+ def make_tmpname(ext, n)
6
+ 'mini_magick%d-%d%s' % [$$, n, ext ? ".#{ext}" : '']
11
7
  end
12
8
  end
13
- end
9
+ end
@@ -1,14 +1,13 @@
1
1
  require "open-uri"
2
2
  require "stringio"
3
3
  require "fileutils"
4
+ require "open3"
4
5
 
5
6
  require File.join(File.dirname(__FILE__), '/image_temp_file')
6
7
 
7
8
  module MiniMagick
8
9
  class MiniMagickError < RuntimeError; end
9
10
 
10
- VERSION = '1.2.3'
11
-
12
11
  class Image
13
12
  attr :path
14
13
  attr :tempfile
@@ -16,25 +15,26 @@ module MiniMagick
16
15
 
17
16
  # Class Methods
18
17
  # -------------
19
- class <<self
20
- def from_blob(blob, extension=nil)
18
+ class << self
19
+ def from_blob(blob, ext = nil)
21
20
  begin
22
- tempfile = ImageTempFile.new("minimagick#{extension}")
21
+ tempfile = ImageTempFile.new(ext)
23
22
  tempfile.binmode
24
23
  tempfile.write(blob)
25
24
  ensure
26
- tempfile.close
25
+ tempfile.close if tempfile
27
26
  end
28
-
27
+
29
28
  return self.new(tempfile.path, tempfile)
30
29
  end
31
30
 
32
31
  # Use this if you don't want to overwrite the image file
33
- def from_file(image_path)
32
+ def open(image_path)
34
33
  File.open(image_path, "rb") do |f|
35
34
  self.from_blob(f.read, File.extname(image_path))
36
35
  end
37
36
  end
37
+ alias_method :from_file, :open
38
38
  end
39
39
 
40
40
  # Instance Methods
@@ -57,6 +57,10 @@ module MiniMagick
57
57
  run_command("identify", "-format", format_option("%h"), @path).split("\n")[0].to_i
58
58
  when "width"
59
59
  run_command("identify", "-format", format_option("%w"), @path).split("\n")[0].to_i
60
+ when "dimensions"
61
+ run_command("identify", "-format", format_option("%w %h"), @path).split("\n")[0].split.map{|v|v.to_i}
62
+ when "size"
63
+ File.size(@path) # Do this because calling identify -format "%b" on an animated gif fails!
60
64
  when "original_at"
61
65
  # Get the EXIF original capture as a Time object
62
66
  Time.local(*self["EXIF:DateTimeOriginal"].split(/:|\s+/)) rescue nil
@@ -67,12 +71,33 @@ module MiniMagick
67
71
  end
68
72
  end
69
73
 
74
+ # Sends raw commands to imagemagick's mogrify command. The image path is automatically appended to the command
75
+ def <<(*args)
76
+ run_command("mogrify", *args << @path)
77
+ end
78
+
70
79
  # This is a 'special' command because it needs to change @path to reflect the new extension
71
- def format(format)
80
+ # Formatting an animation into a non-animated type will result in ImageMagick creating multiple
81
+ # pages (starting with 0). You can choose which page you want to manipulate. We default to the
82
+ # first page.
83
+ def format(format, page=0)
72
84
  run_command("mogrify", "-format", format, @path)
73
- @path = @path.sub(/(\.\w+)?$/, ".#{format}")
74
-
75
- raise "Unable to format to #{format}" unless File.exists?(@path)
85
+
86
+ old_path = @path.dup
87
+ @path.sub!(/(\.\w+)?$/, ".#{format}")
88
+ File.delete(old_path) unless old_path == @path
89
+
90
+ unless File.exists?(@path)
91
+ begin
92
+ FileUtils.copy_file(@path.sub(".#{format}", "-#{page}.#{format}"), @path)
93
+ rescue e
94
+ raise MiniMagickError, "Unable to format to #{format}; #{e}" unless File.exist?(@path)
95
+ end
96
+ end
97
+ ensure
98
+ Dir[@path.sub(/(\.\w+)?$/, "-[0-9]*.#{format}")].each do |fname|
99
+ File.unlink(fname)
100
+ end
76
101
  end
77
102
 
78
103
  # Writes the temporary image that we are using for processing to the output path
@@ -83,7 +108,11 @@ module MiniMagick
83
108
 
84
109
  # Give you raw data back
85
110
  def to_blob
86
- File.read @path
111
+ f = File.new @path
112
+ f.binmode
113
+ f.read
114
+ ensure
115
+ f.close if f
87
116
  end
88
117
 
89
118
  # If an unknown method is called then it is sent through the morgrify program
@@ -112,18 +141,22 @@ module MiniMagick
112
141
  end
113
142
 
114
143
  def run_command(command, *args)
115
- args.collect! do |arg|
116
- arg = arg.to_s
117
- arg = %|"#{arg}"| unless arg[0] == ?- # values quoted because they can contain characters like '>', but don't quote switches
118
- arg
144
+ args.collect! do |arg|
145
+ # args can contain characters like '>' so we must escape them, but don't quote switches
146
+ if arg !~ /^\+|\-/
147
+ "\"#{arg}\""
148
+ else
149
+ arg.to_s
150
+ end
119
151
  end
120
152
 
121
- @output = `#{command} #{args.join(' ')}`
153
+ command = "#{command} #{args.join(' ')}"
154
+ output = `#{command} 2>&1`
122
155
 
123
- if $? != 0
124
- raise MiniMagickError, "ImageMagick command (#{command} #{args.join(' ')}) failed: Error Given #{$?}"
156
+ if $?.exitstatus != 0
157
+ raise MiniMagickError, "ImageMagick command (#{command.inspect}) failed: #{{:status_code => $?, :output => output}.inspect}"
125
158
  else
126
- @output
159
+ output
127
160
  end
128
161
  end
129
162
  end
@@ -139,7 +172,7 @@ module MiniMagick
139
172
  @args << "-#{symbol}"
140
173
  @args += args
141
174
  end
142
-
175
+
143
176
  def +(value)
144
177
  @args << "+#{value}"
145
178
  end
@@ -0,0 +1,55 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = %q{mini_magick}
5
+ s.version = "1.2.5"
6
+
7
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
+ s.authors = ["Corey Johnson"]
9
+ s.date = %q{2009-05-27}
10
+ s.email = %q{probablycorey@gmail.com}
11
+ s.extra_rdoc_files = [
12
+ "README.rdoc"
13
+ ]
14
+ s.files = [
15
+ ".gitignore",
16
+ "MIT-LICENSE",
17
+ "README.rdoc",
18
+ "Rakefile",
19
+ "VERSION",
20
+ "lib/image_temp_file.rb",
21
+ "lib/mini_magick.rb",
22
+ "mini_magick.gemspec",
23
+ "test/actually_a_gif.jpg",
24
+ "test/animation.gif",
25
+ "test/command_builder_test.rb",
26
+ "test/image_temp_file_test.rb",
27
+ "test/image_test.rb",
28
+ "test/leaves.tiff",
29
+ "test/not_an_image.php",
30
+ "test/simple.gif",
31
+ "test/trogdor.jpg"
32
+ ]
33
+ s.has_rdoc = true
34
+ s.homepage = %q{http://github.com/probablycorey/mini_magick}
35
+ s.rdoc_options = ["--charset=UTF-8"]
36
+ s.require_paths = ["lib"]
37
+ s.rubyforge_project = %q{mini-magick}
38
+ s.rubygems_version = %q{1.3.1}
39
+ s.summary = %q{Manipulate images with minimal use of memory.}
40
+ s.test_files = [
41
+ "test/command_builder_test.rb",
42
+ "test/image_temp_file_test.rb",
43
+ "test/image_test.rb"
44
+ ]
45
+
46
+ if s.respond_to? :specification_version then
47
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
48
+ s.specification_version = 2
49
+
50
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
51
+ else
52
+ end
53
+ else
54
+ end
55
+ end
File without changes
Binary file
@@ -0,0 +1,20 @@
1
+ require 'test/unit'
2
+ require File.join(File.dirname(__FILE__), '../lib/mini_magick')
3
+
4
+ class CommandBuilderTest < Test::Unit::TestCase
5
+ include MiniMagick
6
+
7
+ def test_basic
8
+ c = CommandBuilder.new
9
+ c.resize "30x40"
10
+ assert_equal "-resize 30x40", c.args.join(" ")
11
+ end
12
+
13
+ def test_complicated
14
+ c = CommandBuilder.new
15
+ c.resize "30x40"
16
+ c.input 1, 3, 4
17
+ c.lingo "mome fingo"
18
+ assert_equal "-resize 30x40 -input 1 3 4 -lingo mome fingo", c.args.join(" ")
19
+ end
20
+ end
@@ -0,0 +1,17 @@
1
+ require 'test/unit'
2
+ require File.join(File.dirname(__FILE__), '../lib/image_temp_file')
3
+
4
+ class ImageTempFileTest < Test::Unit::TestCase
5
+ include MiniMagick
6
+
7
+ def test_multiple_calls_yield_different_files
8
+ first = ImageTempFile.new('test')
9
+ second = ImageTempFile.new('test')
10
+ assert_not_equal first.path, second.path
11
+ end
12
+
13
+ def test_temp_file_has_given_extension
14
+ assert_match /^[^.]+\.jpg$/, ImageTempFile.new('jpg').path
15
+ assert_match /^[^.]+\.png$/, ImageTempFile.new('png').path
16
+ end
17
+ end
@@ -3,66 +3,79 @@ require File.join(File.dirname(__FILE__), '../lib/mini_magick')
3
3
 
4
4
  class ImageTest < Test::Unit::TestCase
5
5
  include MiniMagick
6
-
6
+
7
7
  CURRENT_DIR = File.dirname(File.expand_path(__FILE__)) + "/"
8
8
 
9
9
  SIMPLE_IMAGE_PATH = CURRENT_DIR + "simple.gif"
10
- TIFF_IMAGE_PATH = CURRENT_DIR + "burner.tiff"
10
+ TIFF_IMAGE_PATH = CURRENT_DIR + "leaves.tiff"
11
11
  NOT_AN_IMAGE_PATH = CURRENT_DIR + "not_an_image.php"
12
12
  GIF_WITH_JPG_EXT = CURRENT_DIR + "actually_a_gif.jpg"
13
13
  EXIF_IMAGE_PATH = CURRENT_DIR + "trogdor.jpg"
14
-
14
+ ANIMATION_PATH = CURRENT_DIR + "animation.gif"
15
+
15
16
  def test_image_from_blob
16
17
  File.open(SIMPLE_IMAGE_PATH, "rb") do |f|
17
18
  image = Image.from_blob(f.read)
18
19
  end
19
20
  end
20
-
21
+
21
22
  def test_image_from_file
22
23
  image = Image.from_file(SIMPLE_IMAGE_PATH)
23
24
  end
24
-
25
+
25
26
  def test_image_new
26
27
  image = Image.new(SIMPLE_IMAGE_PATH)
27
28
  end
28
-
29
+
29
30
  def test_image_write
30
31
  output_path = "output.gif"
31
32
  begin
32
33
  image = Image.new(SIMPLE_IMAGE_PATH)
33
34
  image.write output_path
34
-
35
+
35
36
  assert File.exists?(output_path)
36
37
  ensure
37
38
  File.delete output_path
38
39
  end
39
40
  end
40
-
41
+
41
42
  def test_not_an_image
42
43
  assert_raise(MiniMagickError) do
43
44
  image = Image.new(NOT_AN_IMAGE_PATH)
44
45
  end
45
46
  end
46
-
47
+
47
48
  def test_image_meta_info
48
49
  image = Image.new(SIMPLE_IMAGE_PATH)
49
50
  assert_equal 150, image[:width]
50
51
  assert_equal 55, image[:height]
52
+ assert_equal [150, 55], image[:dimensions]
51
53
  assert_match(/^gif$/i, image[:format])
52
54
  end
53
55
 
54
56
  def test_tiff
55
- image = Image.new(TIFF_IMAGE_PATH)
57
+ image = Image.new(TIFF_IMAGE_PATH)
56
58
  assert_equal "tiff", image[:format].downcase
57
- assert_equal 317, image[:width]
58
- assert_equal 275, image[:height]
59
+ assert_equal 295, image[:width]
60
+ assert_equal 242, image[:height]
61
+ end
62
+
63
+ def test_animation_pages
64
+ image = Image.from_file(ANIMATION_PATH)
65
+ image.format "png", 0
66
+ assert_equal "png", image[:format].downcase
59
67
  end
60
-
68
+
69
+ def test_animation_size
70
+ image = Image.from_file(ANIMATION_PATH)
71
+ assert_equal image[:size], 76631
72
+ end
73
+
61
74
  def test_gif_with_jpg_format
62
- image = Image.new(GIF_WITH_JPG_EXT)
75
+ image = Image.new(GIF_WITH_JPG_EXT)
63
76
  assert_equal "gif", image[:format].downcase
64
77
  end
65
-
78
+
66
79
  def test_image_resize
67
80
  image = Image.from_file(SIMPLE_IMAGE_PATH)
68
81
  image.resize "20x30!"
@@ -70,8 +83,8 @@ class ImageTest < Test::Unit::TestCase
70
83
  assert_equal 20, image[:width]
71
84
  assert_equal 30, image[:height]
72
85
  assert_match(/^gif$/i, image[:format])
73
- end
74
-
86
+ end
87
+
75
88
  def test_image_resize_with_minimum
76
89
  image = Image.from_file(SIMPLE_IMAGE_PATH)
77
90
  original_width, original_height = image[:width], image[:height]
@@ -80,7 +93,7 @@ class ImageTest < Test::Unit::TestCase
80
93
  assert_equal original_width, image[:width]
81
94
  assert_equal original_height, image[:height]
82
95
  end
83
-
96
+
84
97
  def test_image_combine_options_resize_blur
85
98
  image = Image.from_file(SIMPLE_IMAGE_PATH)
86
99
  image.combine_options do |c|
@@ -92,36 +105,43 @@ class ImageTest < Test::Unit::TestCase
92
105
  assert_equal 30, image[:height]
93
106
  assert_match(/^gif$/i, image[:format])
94
107
  end
95
-
108
+
96
109
  def test_exif
97
110
  image = Image.from_file(EXIF_IMAGE_PATH)
98
111
  assert_equal('0220', image["exif:ExifVersion"])
99
112
  image = Image.from_file(SIMPLE_IMAGE_PATH)
100
113
  assert_equal('', image["EXIF:ExifVersion"])
101
114
  end
102
-
115
+
103
116
  def test_original_at
104
117
  image = Image.from_file(EXIF_IMAGE_PATH)
105
118
  assert_equal(Time.local('2005', '2', '23', '23', '17', '24'), image[:original_at])
106
119
  image = Image.from_file(SIMPLE_IMAGE_PATH)
107
120
  assert_nil(image[:original_at])
108
121
  end
109
- end
110
122
 
111
- class CommandBuilderTest < Test::Unit::TestCase
112
- include MiniMagick
113
-
114
- def test_basic
115
- c = CommandBuilder.new
116
- c.resize "30x40"
117
- assert_equal "-resize 30x40", c.args.join(" ")
118
- end
119
-
120
- def test_complicated
121
- c = CommandBuilder.new
122
- c.resize "30x40"
123
- c.input 1, 3, 4
124
- c.lingo "mome fingo"
125
- assert_equal "-resize 30x40 -input 1 3 4 -lingo mome fingo", c.args.join(" ")
123
+ def test_tempfile_at_path
124
+ image = Image.from_file(TIFF_IMAGE_PATH)
125
+ assert_equal image.path, image.tempfile.path
126
+ end
127
+
128
+ def test_tempfile_at_path_after_format
129
+ image = Image.from_file(TIFF_IMAGE_PATH)
130
+ image.format('png')
131
+ assert_equal image.path, image.tempfile.path
132
+ end
133
+
134
+ def test_previous_tempfile_deleted_after_format
135
+ image = Image.from_file(TIFF_IMAGE_PATH)
136
+ before = image.path.dup
137
+ image.format('png')
138
+ assert !File.exist?(before)
139
+ end
140
+
141
+ def test_mini_magick_error_when_referencing_not_existing_page
142
+ image = Image.from_file(ANIMATION_PATH)
143
+ assert_raises MiniMagickError do
144
+ image.format('png', 31415)
145
+ end
126
146
  end
127
147
  end
Binary file
File without changes
File without changes
File without changes
metadata CHANGED
@@ -1,71 +1,71 @@
1
1
  --- !ruby/object:Gem::Specification
2
- rubygems_version: 0.9.0.1
3
- specification_version: 1
4
2
  name: mini_magick
5
3
  version: !ruby/object:Gem::Version
6
- version: 1.2.3
7
- date: 2007-06-15 00:00:00 -04:00
8
- summary: A simple image manipulation library based on ImageMagick.
9
- require_paths:
10
- - lib
11
- email: probablycorey+ruby@gmail.com
12
- homepage: http://www.zenspider.com/ZSS/Products/mini_magick/
13
- rubyforge_project: mini_magick
14
- description: "- Why? I was using RMagick and loving it, but it was eating up huge amounts of memory. A simple script like this... Magick::read(\"image.jpg\") do |f| f.write(\"manipulated.jpg\") end ...would use over 100 Megs of Ram. On my local machine this wasn't a problem, but on my hosting server the ruby apps would crash because of their 100 Meg memory limit."
15
- autorequire:
16
- default_executable:
17
- bindir: bin
18
- has_rdoc: true
19
- required_ruby_version: !ruby/object:Gem::Version::Requirement
20
- requirements:
21
- - - ">"
22
- - !ruby/object:Gem::Version
23
- version: 0.0.0
24
- version:
4
+ version: 1.2.5
25
5
  platform: ruby
26
- signing_key:
27
- cert_chain:
28
- post_install_message:
29
6
  authors:
30
7
  - Corey Johnson
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-05-27 00:00:00 +00:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description:
17
+ email: probablycorey@gmail.com
18
+ executables: []
19
+
20
+ extensions: []
21
+
22
+ extra_rdoc_files:
23
+ - README.rdoc
31
24
  files:
25
+ - .gitignore
32
26
  - MIT-LICENSE
33
- - History.txt
34
- - Manifest.txt
35
- - README.txt
27
+ - README.rdoc
36
28
  - Rakefile
37
- - init.rb
29
+ - VERSION
38
30
  - lib/image_temp_file.rb
39
31
  - lib/mini_magick.rb
32
+ - mini_magick.gemspec
40
33
  - test/actually_a_gif.jpg
34
+ - test/animation.gif
35
+ - test/command_builder_test.rb
36
+ - test/image_temp_file_test.rb
37
+ - test/image_test.rb
38
+ - test/leaves.tiff
41
39
  - test/not_an_image.php
42
40
  - test/simple.gif
43
- - test/test_image_temp_file.rb
44
- - test/test_mini_magick_test.rb
45
41
  - test/trogdor.jpg
46
- test_files:
47
- - test/test_image_temp_file.rb
48
- - test/test_mini_magick_test.rb
42
+ has_rdoc: true
43
+ homepage: http://github.com/probablycorey/mini_magick
44
+ post_install_message:
49
45
  rdoc_options:
50
- - --main
51
- - README.txt
52
- extra_rdoc_files:
53
- - History.txt
54
- - Manifest.txt
55
- - README.txt
56
- executables: []
57
-
58
- extensions: []
59
-
46
+ - --charset=UTF-8
47
+ require_paths:
48
+ - lib
49
+ required_ruby_version: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: "0"
54
+ version:
55
+ required_rubygems_version: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - ">="
58
+ - !ruby/object:Gem::Version
59
+ version: "0"
60
+ version:
60
61
  requirements: []
61
62
 
62
- dependencies:
63
- - !ruby/object:Gem::Dependency
64
- name: hoe
65
- version_requirement:
66
- version_requirements: !ruby/object:Gem::Version::Requirement
67
- requirements:
68
- - - ">="
69
- - !ruby/object:Gem::Version
70
- version: 1.2.1
71
- version:
63
+ rubyforge_project: mini-magick
64
+ rubygems_version: 1.3.1
65
+ signing_key:
66
+ specification_version: 2
67
+ summary: Manipulate images with minimal use of memory.
68
+ test_files:
69
+ - test/command_builder_test.rb
70
+ - test/image_temp_file_test.rb
71
+ - test/image_test.rb
@@ -1,11 +0,0 @@
1
- == 1.2.2 / 2007-06-01
2
-
3
- # 1.) all image commands return the image object (The output of the last command is saved in @output)
4
- # 2.) identify doesn't trip over strangley named files
5
- # 3.) TempFile uses file extention now (Thanks http://marsorange.com/archives/of-mogrify-ruby-tempfile-dynamic-class-definitions)
6
- # 4.) identify commands escape output path correctly
7
-
8
- == 1.2.3 / 2007-06-15
9
-
10
- # 1.) Image::from_file doesn't drop the file extension anymore, it and use the image_temp_file correctly
11
- # 4.) TempFiles are stored as an instance variable in Image instances so they don't get cleaned up prematurely via garbage collection
@@ -1,14 +0,0 @@
1
- MIT-LICENSE
2
- History.txt
3
- Manifest.txt
4
- README.txt
5
- Rakefile
6
- init.rb
7
- lib/image_temp_file.rb
8
- lib/mini_magick.rb
9
- test/actually_a_gif.jpg
10
- test/not_an_image.php
11
- test/simple.gif
12
- test/test_image_temp_file.rb
13
- test/test_mini_magick_test.rb
14
- test/trogdor.jpg
data/README.txt DELETED
@@ -1,101 +0,0 @@
1
- mini_magick
2
- by Coery Johnson
3
- FIX (url)
4
-
5
- == DESCRIPTION:
6
-
7
- A ruby wrapper for ImageMagick command line.
8
-
9
- - Why?
10
-
11
- I was using RMagick and loving it, but it was eating up huge amounts of memory. A simple script like this...
12
-
13
- Magick::read("image.jpg") do |f|
14
- f.write("manipulated.jpg")
15
- end
16
-
17
- ...would use over 100 Megs of Ram. On my local machine this wasn't a problem, but on my hosting server the ruby apps would crash because of their 100 Meg memory limit.
18
-
19
- - Solution!
20
-
21
- Using MiniMagick the ruby processes memory remains small (it spawns ImageMagick's command line program mogrify which takes up some memory as well, but is much smaller compared to RMagick)
22
-
23
-
24
- == FEATURES/PROBLEMS:
25
-
26
- MiniMagick gives you access to all the commandline options ImageMagick has (Found here http://www.imagemagick.org/script/mogrify.php)
27
-
28
- == SYNOPSIS:
29
-
30
- Want to make a thumbnail from a file...
31
-
32
- image = MiniMagick::Image.from_file("input.jpg")
33
- image.resize "100x100"
34
- image.write("output.jpg")
35
-
36
- Want to make a thumbnail from a blob...
37
-
38
- image = MiniMagick::Image.from_blob(blob)
39
- image.resize "100x100"
40
- image.write("output.jpg")
41
-
42
- Need to combine several options?
43
-
44
- image = MiniMagick::Image.from_file("input.jpg")
45
- image.combine_options do |c|
46
- c.sample "50%"
47
- c.rotate "-90>"
48
- end
49
- image.write("output.jpg")
50
-
51
- Want to manipulate an image at its source (You won't have to write it out because the transformations are done on that file)
52
-
53
- image = MiniMagick::Image.new("input.jpg")
54
- image.resize "100x100"
55
-
56
- Want to get some meta-information out?
57
-
58
- image = MiniMagick::Image.from_file("input.jpg")
59
- image[:width] # will get the width (you can also use :height and :format)
60
- image["EXIF:BitsPerSample"] # It also can get all the EXIF tags
61
- image["%m:%f %wx%h"] # Or you can use one of the many options of the format command found here http://www.imagemagick.org/script/command-line-options.php#format
62
-
63
-
64
- == REQUIREMENTS:
65
-
66
- You must have ImageMagick installed.
67
-
68
- == INSTALL:
69
-
70
- If you downloaded the plugin version, just drop the plugin into RAILS_ROOT/plugins/
71
-
72
- If you installed this as a gem, then to get it to work add <require "mini_magick"> to RAILS_ROOT/config/environment.rb
73
-
74
- If you have just downloaded this files then copy the mini_magick.rb file into your RAILS_ROOT/lib directory and add <require "mini-magick"> to RAILS_ROOT/config/environment.rb
75
-
76
- MiniMagick does NOT require rails though. All the code you need to use MiniMagick is located in the mini_magick/lib/mini_magick.rb file.
77
-
78
- == LICENSE:
79
-
80
- (The MIT License)
81
-
82
- Copyright (c) 2007 FIX
83
-
84
- Permission is hereby granted, free of charge, to any person obtaining
85
- a copy of this software and associated documentation files (the
86
- 'Software'), to deal in the Software without restriction, including
87
- without limitation the rights to use, copy, modify, merge, publish,
88
- distribute, sublicense, and/or sell copies of the Software, and to
89
- permit persons to whom the Software is furnished to do so, subject to
90
- the following conditions:
91
-
92
- The above copyright notice and this permission notice shall be
93
- included in all copies or substantial portions of the Software.
94
-
95
- THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
96
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
97
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
98
- IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
99
- CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
100
- TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
101
- SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/init.rb DELETED
@@ -1,2 +0,0 @@
1
- require 'mini_magick'
2
- require 'image_temp_file'
@@ -1,14 +0,0 @@
1
- require 'test/unit'
2
- require File.join(File.dirname(__FILE__), '../lib/image_temp_file')
3
-
4
- class ImageTest < Test::Unit::TestCase
5
- include MiniMagick
6
-
7
- def test_image_temp_file
8
- tmp = ImageTempFile.new('test')
9
- assert_match %r{^test}, File::basename(tmp.path)
10
- tmp = ImageTempFile.new('test.jpg')
11
- assert_match %r{^test}, File::basename(tmp.path)
12
- assert_match %r{\.jpg$}, File::basename(tmp.path)
13
- end
14
- end