image_science 1.1.3 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data.tar.gz.sig ADDED
Binary file
data/History.txt CHANGED
@@ -1,41 +1,70 @@
1
+ == 1.2.0 / 2009-06-23
2
+
3
+ * 7 minor enhancements:
4
+
5
+ * Moved quick_thumb to bin/image_science_thumb and properly added.
6
+ * Added -s (square) flag to bin/image_science_thumb
7
+ * Added autorotating on image load. (choonkeat)
8
+ * Added ruby_inline to clean globs
9
+ * Added with_image_from_memory. (sumbach)
10
+ * Switched to minitest.
11
+ * Updated rakefile for now hoe capabilities.
12
+
13
+ * 3 bug fixes:
14
+
15
+ * Check and convert to 24 BPP if save type is jpg. Caused by 32bpp png to jpg.
16
+ * Fixed 1.9isms
17
+ * Fixed BMP support. Tweaked whitespace.
18
+
1
19
  == 1.1.3 / 2007-05-30
2
20
 
3
21
  * 2 minor enhancements:
22
+
4
23
  * Added quick_thumb as an example to look at.
5
24
  * Error handler doesn't raise by default. Raises if $DEBUG==true.
6
25
 
7
26
  == 1.1.2 / 2007-04-18
8
27
 
9
28
  * 2 bug fixes:
29
+
10
30
  * reports bad height/width values for resize
11
31
  * explicitly removes ICC color profiles from PNGs (bug in freeimage).
12
32
 
13
33
  == 1.1.1 / 2007-03-08
14
34
 
15
35
  * 5 minor enhancements:
36
+
16
37
  * Added error handler that raises with information about what went wrong.
17
38
  * thumbnail is now pure ruby, everything now uses resize.
18
39
  * Produces cleaner JPEG files, with a small cost to file size/speed.
19
40
  * resize now uses Catmull-Rom spline filter for better quality.
20
41
  * resize copies existing ICC Profile to thumbnail, producing better color.
21
42
  * ICC Profile NOT copied for PNG as it seems to be buggy.
43
+
22
44
  * 1 bug fix:
45
+
23
46
  * Fixed rdoc
24
47
 
25
48
  == 1.1.0 / 2007-01-05
26
49
 
27
50
  * 3 major enhancements:
51
+
28
52
  * Added resize(width, height)
29
53
  * Added save(path)
30
54
  * All thumbnail and resize methods yield instead of saving directly.
55
+
31
56
  * 1 minor enhancement:
57
+
32
58
  * Will now try to use FreeImage from ports if /opt/local exists.
59
+
33
60
  * 2 bug fixes:
61
+
34
62
  * Fixed the linker issue on PPC.
35
63
  * Rakefile will now clean the image files created by bench.rb
36
64
 
37
65
  == 1.0.0 / 2006-12-01
38
66
 
39
67
  * 1 major enhancement
68
+
40
69
  * Birthday!
41
70
 
data/Manifest.txt CHANGED
@@ -3,7 +3,7 @@ Manifest.txt
3
3
  README.txt
4
4
  Rakefile
5
5
  bench.rb
6
+ bin/image_science_thumb
6
7
  lib/image_science.rb
7
- quick_thumb
8
8
  test/pix.png
9
9
  test/test_image_science.rb
data/README.txt CHANGED
@@ -1,7 +1,7 @@
1
- ImageScience
2
- http://seattlerb.rubyforge.org/ImageScience.html
3
- http://rubyforge.org/projects/seattlerb
4
- by Ryan Davis
1
+ = ImageScience
2
+
3
+ * http://seattlerb.rubyforge.org/ImageScience.html
4
+ * http://rubyforge.org/projects/seattlerb
5
5
 
6
6
  == DESCRIPTION:
7
7
 
@@ -44,7 +44,7 @@ For more information including build steps, see http://seattlerb.rubyforge.org/
44
44
 
45
45
  (The MIT License)
46
46
 
47
- Copyright (c) 2006-2007 Ryan Davis, Seattle.rb
47
+ Copyright (c) 2006-2009 Ryan Davis, Seattle.rb
48
48
 
49
49
  Permission is hereby granted, free of charge, to any person obtaining
50
50
  a copy of this software and associated documentation files (the
data/Rakefile CHANGED
@@ -2,16 +2,16 @@
2
2
 
3
3
  require 'rubygems'
4
4
  require 'hoe'
5
- require './lib/image_science.rb'
6
5
 
7
- Hoe.new('image_science', ImageScience::VERSION) do |p|
8
- p.rubyforge_name = 'seattlerb'
9
- p.description = p.paragraphs_of('README.txt', 2..3).join(" ")
10
- p.summary = p.description[/^[^.]+\./]
11
- p.url = p.paragraphs_of('README.txt', 0).first.split(/\n/)[1..-1].first.strip
12
- p.changes = p.paragraphs_of('History.txt', 0..1).join("\n\n")
13
- p.extra_deps << 'RubyInline'
14
- p.clean_globs << 'blah*png'
6
+ Hoe.plugin :seattlerb
7
+ Hoe.plugin :inline
8
+
9
+ Hoe.spec 'image_science' do
10
+ developer 'Ryan Davis', 'ryand-ruby@zenspider.com'
11
+
12
+ self.rubyforge_name = 'seattlerb'
13
+
14
+ clean_globs << 'blah*png' << 'images/*_thumb.*'
15
15
  end
16
16
 
17
17
  # vim: syntax=Ruby
data/bench.rb CHANGED
File without changes
@@ -1,4 +1,6 @@
1
- #!/usr/local/bin/ruby -w
1
+ #!/usr/local/bin/ruby -ws
2
+
3
+ $s ||= false
2
4
 
3
5
  abort "#{File.basename $0} max_length files..." unless ARGV.size > 1
4
6
 
@@ -7,11 +9,13 @@ require 'image_science'
7
9
 
8
10
  max_length = ARGV.shift.to_i
9
11
 
12
+ msg = $s ? :cropped_thumbnail : :thumbnail
13
+
10
14
  ARGV.each do |file|
11
15
  begin
12
16
  result = ImageScience.with_image file do |img|
13
17
  begin
14
- img.thumbnail(max_length) do |thumb|
18
+ img.send(msg, max_length) do |thumb|
15
19
  # add _thumb and switch from gif to png. Really. gif just sucks.
16
20
  out = file.sub(/(\.[^\.]+)$/, '_thumb\1').sub(/gif$/, 'png')
17
21
  thumb.save(out)
data/lib/image_science.rb CHANGED
@@ -11,7 +11,7 @@ require 'inline'
11
11
  # http://seattlerb.rubyforge.org/ImageScience.html
12
12
 
13
13
  class ImageScience
14
- VERSION = '1.1.3'
14
+ VERSION = '1.2.0'
15
15
 
16
16
  ##
17
17
  # The top-level image loader opens +path+ and then yields the image.
@@ -19,6 +19,12 @@ class ImageScience
19
19
  def self.with_image(path) # :yields: image
20
20
  end
21
21
 
22
+ ##
23
+ # The top-level image loader, opens an image from the string +data+ and then yields the image.
24
+
25
+ def self.with_image_from_memory(data) # :yields: image
26
+ end
27
+
22
28
  ##
23
29
  # Crops an image to +left+, +top+, +right+, and +bottom+ and then
24
30
  # yields the new image.
@@ -107,8 +113,9 @@ class ImageScience
107
113
 
108
114
  builder.prefix <<-"END"
109
115
  VALUE wrap_and_yield(FIBITMAP *image, VALUE self, FREE_IMAGE_FORMAT fif) {
110
- VALUE klass = fif ? self : CLASS_OF(self);
111
- VALUE type = fif ? INT2FIX(fif) : rb_iv_get(self, "@file_type");
116
+ unsigned int self_is_class = rb_type(self) == T_CLASS;
117
+ VALUE klass = self_is_class ? self : CLASS_OF(self);
118
+ VALUE type = self_is_class ? INT2FIX(fif) : rb_iv_get(self, "@file_type");
112
119
  VALUE obj = Data_Wrap_Struct(klass, NULL, NULL, image);
113
120
  rb_iv_set(obj, "@file_type", type);
114
121
  return rb_ensure(rb_yield, obj, unload, obj);
@@ -120,8 +127,8 @@ class ImageScience
120
127
  FREE_IMAGE_FORMAT fif = FIX2INT(rb_iv_get(self, "@file_type"));
121
128
  if (fif != FIF_PNG && FreeImage_FIFSupportsICCProfiles(fif)) {
122
129
  FIICCPROFILE *profile = FreeImage_GetICCProfile(from);
123
- if (profile && profile->data) {
124
- FreeImage_CreateICCProfile(to, profile->data, profile->size);
130
+ if (profile && profile->data) {
131
+ FreeImage_CreateICCProfile(to, profile->data, profile->size);
125
132
  }
126
133
  }
127
134
  }
@@ -129,7 +136,6 @@ class ImageScience
129
136
 
130
137
  builder.prefix <<-"END"
131
138
  void FreeImageErrorHandler(FREE_IMAGE_FORMAT fif, const char *message) {
132
- if (! RTEST(ruby_debug)) return;
133
139
  rb_raise(rb_eRuntimeError,
134
140
  "FreeImage exception for type %s: %s",
135
141
  (fif == FIF_UNKNOWN) ? "???" : FreeImage_GetFormatFromFIF(fif),
@@ -141,15 +147,31 @@ class ImageScience
141
147
 
142
148
  builder.c_singleton <<-"END"
143
149
  VALUE with_image(char * input) {
144
- FREE_IMAGE_FORMAT fif = FIF_UNKNOWN;
150
+ FREE_IMAGE_FORMAT fif = FIF_UNKNOWN;
145
151
 
146
- fif = FreeImage_GetFileType(input, 0);
147
- if (fif == FIF_UNKNOWN) fif = FreeImage_GetFIFFromFilename(input);
148
- if ((fif != FIF_UNKNOWN) && FreeImage_FIFSupportsReading(fif)) {
152
+ fif = FreeImage_GetFileType(input, 0);
153
+ if (fif == FIF_UNKNOWN) fif = FreeImage_GetFIFFromFilename(input);
154
+ if ((fif != FIF_UNKNOWN) && FreeImage_FIFSupportsReading(fif)) {
149
155
  FIBITMAP *bitmap;
150
156
  VALUE result = Qnil;
151
157
  int flags = fif == FIF_JPEG ? JPEG_ACCURATE : 0;
152
158
  if (bitmap = FreeImage_Load(fif, input, flags)) {
159
+ FITAG *tagValue = NULL;
160
+ FreeImage_GetMetadata(FIMD_EXIF_MAIN, bitmap, "Orientation", &tagValue);
161
+ switch (tagValue == NULL ? 0 : *((short *) FreeImage_GetTagValue(tagValue))) {
162
+ case 6:
163
+ bitmap = FreeImage_RotateClassic(bitmap, 270);
164
+ break;
165
+ case 3:
166
+ bitmap = FreeImage_RotateClassic(bitmap, 180);
167
+ break;
168
+ case 8:
169
+ bitmap = FreeImage_RotateClassic(bitmap, 90);
170
+ break;
171
+ default:
172
+ break;
173
+ }
174
+
153
175
  result = wrap_and_yield(bitmap, self, fif);
154
176
  }
155
177
  return result;
@@ -158,6 +180,36 @@ class ImageScience
158
180
  }
159
181
  END
160
182
 
183
+ builder.c_singleton <<-"END"
184
+ VALUE with_image_from_memory(VALUE image_data) {
185
+ FREE_IMAGE_FORMAT fif = FIF_UNKNOWN;
186
+
187
+ Check_Type(image_data, T_STRING);
188
+ BYTE *image_data_ptr = (BYTE*)RSTRING_PTR(image_data);
189
+ DWORD image_data_length = RSTRING_LEN(image_data);
190
+ FIMEMORY *stream = FreeImage_OpenMemory(image_data_ptr, image_data_length);
191
+
192
+ if (NULL == stream) {
193
+ rb_raise(rb_eTypeError, "Unable to open image_data");
194
+ }
195
+
196
+ fif = FreeImage_GetFileTypeFromMemory(stream, 0);
197
+ if ((fif == FIF_UNKNOWN) || !FreeImage_FIFSupportsReading(fif)) {
198
+ rb_raise(rb_eTypeError, "Unknown file format");
199
+ }
200
+
201
+ FIBITMAP *bitmap = NULL;
202
+ VALUE result = Qnil;
203
+ int flags = fif == FIF_JPEG ? JPEG_ACCURATE : 0;
204
+ bitmap = FreeImage_LoadFromMemory(fif, stream, flags);
205
+ FreeImage_CloseMemory(stream);
206
+ if (bitmap) {
207
+ result = wrap_and_yield(bitmap, self, fif);
208
+ }
209
+ return result;
210
+ }
211
+ END
212
+
161
213
  builder.c <<-"END"
162
214
  VALUE with_crop(int l, int t, int r, int b) {
163
215
  FIBITMAP *copy;
@@ -206,11 +258,20 @@ class ImageScience
206
258
  VALUE save(char * output) {
207
259
  FREE_IMAGE_FORMAT fif = FreeImage_GetFIFFromFilename(output);
208
260
  if (fif == FIF_UNKNOWN) fif = FIX2INT(rb_iv_get(self, "@file_type"));
209
- if ((fif != FIF_UNKNOWN) && FreeImage_FIFSupportsWriting(fif)) {
261
+ if ((fif != FIF_UNKNOWN) && FreeImage_FIFSupportsWriting(fif)) {
210
262
  GET_BITMAP(bitmap);
211
263
  int flags = fif == FIF_JPEG ? JPEG_QUALITYSUPERB : 0;
264
+ BOOL result = 0, unload = 0;
265
+
212
266
  if (fif == FIF_PNG) FreeImage_DestroyICCProfile(bitmap);
213
- return FreeImage_Save(fif, bitmap, output, flags) ? Qtrue : Qfalse;
267
+ if (fif == FIF_JPEG && FreeImage_GetBPP(bitmap) != 24)
268
+ bitmap = FreeImage_ConvertTo24Bits(bitmap), unload = 1; // sue me
269
+
270
+ result = FreeImage_Save(fif, bitmap, output, flags);
271
+
272
+ if (unload) FreeImage_Unload(bitmap);
273
+
274
+ return result ? Qtrue : Qfalse;
214
275
  }
215
276
  rb_raise(rb_eTypeError, "Unknown file format");
216
277
  }
@@ -1,10 +1,17 @@
1
- require 'test/unit/testcase'
2
- require 'test/unit' if $0 == __FILE__
3
- require 'image_science'
1
+ dir = File.expand_path "~/.ruby_inline"
2
+ if test ?d, dir then
3
+ require 'fileutils'
4
+ puts "nuking #{dir}"
5
+ # force removal, Windoze is bitching at me, something to hunt later...
6
+ FileUtils.rm_r dir, :force => true
7
+ end
4
8
 
5
- class TestImageScience < Test::Unit::TestCase
6
- def deny x; assert ! x; end
9
+ require 'rubygems'
10
+ require 'minitest/unit'
11
+ require 'minitest/autorun' if $0 == __FILE__
12
+ require 'image_science'
7
13
 
14
+ class TestImageScience < MiniTest::Unit::TestCase
8
15
  def setup
9
16
  @path = 'test/pix.png'
10
17
  @tmppath = 'test/pix-tmp.png'
@@ -46,6 +53,33 @@ class TestImageScience < Test::Unit::TestCase
46
53
  end
47
54
  end
48
55
 
56
+ def test_class_with_image_from_memory
57
+ data = File.new(@path).binmode.read
58
+
59
+ ImageScience.with_image_from_memory data do |img|
60
+ assert_kind_of ImageScience, img
61
+ assert_equal @h, img.height
62
+ assert_equal @w, img.width
63
+ assert img.save(@tmppath)
64
+ end
65
+
66
+ assert File.exists?(@tmppath)
67
+
68
+ ImageScience.with_image @tmppath do |img|
69
+ assert_kind_of ImageScience, img
70
+ assert_equal @h, img.height
71
+ assert_equal @w, img.width
72
+ end
73
+ end
74
+
75
+ def test_class_with_image_from_memory_empty_string
76
+ assert_raises TypeError do
77
+ ImageScience.with_image_from_memory "" do |img|
78
+ flunk
79
+ end
80
+ end
81
+ end
82
+
49
83
  def test_resize
50
84
  ImageScience.with_image @path do |img|
51
85
  img.resize(25, 25) do |thumb|
@@ -87,7 +121,7 @@ class TestImageScience < Test::Unit::TestCase
87
121
  end
88
122
  end
89
123
 
90
- deny File.exists?(@tmppath)
124
+ refute File.exists?(@tmppath)
91
125
 
92
126
  assert_raises ArgumentError do
93
127
  ImageScience.with_image @path do |img|
@@ -97,7 +131,7 @@ class TestImageScience < Test::Unit::TestCase
97
131
  end
98
132
  end
99
133
 
100
- deny File.exists?(@tmppath)
134
+ refute File.exists?(@tmppath)
101
135
  end
102
136
 
103
137
  def test_resize_negative
@@ -109,7 +143,7 @@ class TestImageScience < Test::Unit::TestCase
109
143
  end
110
144
  end
111
145
 
112
- deny File.exists?(@tmppath)
146
+ refute File.exists?(@tmppath)
113
147
 
114
148
  assert_raises ArgumentError do
115
149
  ImageScience.with_image @path do |img|
@@ -119,6 +153,6 @@ class TestImageScience < Test::Unit::TestCase
119
153
  end
120
154
  end
121
155
 
122
- deny File.exists?(@tmppath)
156
+ refute File.exists?(@tmppath)
123
157
  end
124
158
  end
metadata CHANGED
@@ -1,74 +1,102 @@
1
1
  --- !ruby/object:Gem::Specification
2
- rubygems_version: 0.9.4
3
- specification_version: 1
4
2
  name: image_science
5
3
  version: !ruby/object:Gem::Version
6
- version: 1.1.3
7
- date: 2007-05-30 00:00:00 -04:00
8
- summary: ImageScience is a clean and happy Ruby library that generates thumbnails -- and kicks the living crap out of RMagick.
9
- require_paths:
10
- - lib
11
- email: ryand-ruby@zenspider.com
12
- homepage: http://seattlerb.rubyforge.org/ImageScience.html
13
- rubyforge_project: seattlerb
14
- description: ImageScience is a clean and happy Ruby library that generates thumbnails -- and kicks the living crap out of RMagick. Oh, and it doesn't leak memory like a sieve. :) For more information including build steps, see http://seattlerb.rubyforge.org/
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.0
25
5
  platform: ruby
26
- signing_key:
27
- cert_chain:
28
- post_install_message:
29
6
  authors:
30
7
  - Ryan Davis
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain:
11
+ - |
12
+ -----BEGIN CERTIFICATE-----
13
+ MIIDPjCCAiagAwIBAgIBADANBgkqhkiG9w0BAQUFADBFMRMwEQYDVQQDDApyeWFu
14
+ ZC1ydWJ5MRkwFwYKCZImiZPyLGQBGRYJemVuc3BpZGVyMRMwEQYKCZImiZPyLGQB
15
+ GRYDY29tMB4XDTA5MDMwNjE4NTMxNVoXDTEwMDMwNjE4NTMxNVowRTETMBEGA1UE
16
+ AwwKcnlhbmQtcnVieTEZMBcGCgmSJomT8ixkARkWCXplbnNwaWRlcjETMBEGCgmS
17
+ JomT8ixkARkWA2NvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALda
18
+ b9DCgK+627gPJkB6XfjZ1itoOQvpqH1EXScSaba9/S2VF22VYQbXU1xQXL/WzCkx
19
+ taCPaLmfYIaFcHHCSY4hYDJijRQkLxPeB3xbOfzfLoBDbjvx5JxgJxUjmGa7xhcT
20
+ oOvjtt5P8+GSK9zLzxQP0gVLS/D0FmoE44XuDr3iQkVS2ujU5zZL84mMNqNB1znh
21
+ GiadM9GHRaDiaxuX0cIUBj19T01mVE2iymf9I6bEsiayK/n6QujtyCbTWsAS9Rqt
22
+ qhtV7HJxNKuPj/JFH0D2cswvzznE/a5FOYO68g+YCuFi5L8wZuuM8zzdwjrWHqSV
23
+ gBEfoTEGr7Zii72cx+sCAwEAAaM5MDcwCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAw
24
+ HQYDVR0OBBYEFEfFe9md/r/tj/Wmwpy+MI8d9k/hMA0GCSqGSIb3DQEBBQUAA4IB
25
+ AQAY59gYvDxqSqgC92nAP9P8dnGgfZgLxP237xS6XxFGJSghdz/nI6pusfCWKM8m
26
+ vzjjH2wUMSSf3tNudQ3rCGLf2epkcU13/rguI88wO6MrE0wi4ZqLQX+eZQFskJb/
27
+ w6x9W1ur8eR01s397LSMexySDBrJOh34cm2AlfKr/jokKCTwcM0OvVZnAutaovC0
28
+ l1SVZ0ecg88bsWHA0Yhh7NFxK1utWoIhtB6AFC/+trM0FQEB/jZkIS8SaNzn96Rl
29
+ n0sZEf77FLf5peR8TP/PtmIg7Cyqz23sLM4mCOoTGIy5OcZ8TdyiyINUHtb5ej/T
30
+ FBHgymkyj/AOSqKRIpXPhjC6
31
+ -----END CERTIFICATE-----
32
+
33
+ date: 2009-06-23 00:00:00 -07:00
34
+ default_executable:
35
+ dependencies:
36
+ - !ruby/object:Gem::Dependency
37
+ name: hoe
38
+ type: :development
39
+ version_requirement:
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ requirements:
42
+ - - ">="
43
+ - !ruby/object:Gem::Version
44
+ version: 2.3.0
45
+ version:
46
+ description: |-
47
+ ImageScience is a clean and happy Ruby library that generates
48
+ thumbnails -- and kicks the living crap out of RMagick. Oh, and it
49
+ doesn't leak memory like a sieve. :)
50
+
51
+ For more information including build steps, see http://seattlerb.rubyforge.org/
52
+ email:
53
+ - ryand-ruby@zenspider.com
54
+ executables:
55
+ - image_science_thumb
56
+ extensions: []
57
+
58
+ extra_rdoc_files:
59
+ - History.txt
60
+ - Manifest.txt
61
+ - README.txt
31
62
  files:
32
63
  - History.txt
33
64
  - Manifest.txt
34
65
  - README.txt
35
66
  - Rakefile
36
67
  - bench.rb
68
+ - bin/image_science_thumb
37
69
  - lib/image_science.rb
38
- - quick_thumb
39
70
  - test/pix.png
40
71
  - test/test_image_science.rb
41
- test_files:
42
- - test/test_image_science.rb
72
+ has_rdoc: true
73
+ homepage: http://seattlerb.rubyforge.org/ImageScience.html
74
+ licenses: []
75
+
76
+ post_install_message:
43
77
  rdoc_options:
44
78
  - --main
45
79
  - README.txt
46
- extra_rdoc_files:
47
- - History.txt
48
- - Manifest.txt
49
- - README.txt
50
- executables: []
51
-
52
- extensions: []
53
-
80
+ require_paths:
81
+ - lib
82
+ required_ruby_version: !ruby/object:Gem::Requirement
83
+ requirements:
84
+ - - ">="
85
+ - !ruby/object:Gem::Version
86
+ version: "0"
87
+ version:
88
+ required_rubygems_version: !ruby/object:Gem::Requirement
89
+ requirements:
90
+ - - ">="
91
+ - !ruby/object:Gem::Version
92
+ version: "0"
93
+ version:
54
94
  requirements: []
55
95
 
56
- dependencies:
57
- - !ruby/object:Gem::Dependency
58
- name: RubyInline
59
- version_requirement:
60
- version_requirements: !ruby/object:Gem::Version::Requirement
61
- requirements:
62
- - - ">"
63
- - !ruby/object:Gem::Version
64
- version: 0.0.0
65
- version:
66
- - !ruby/object:Gem::Dependency
67
- name: hoe
68
- version_requirement:
69
- version_requirements: !ruby/object:Gem::Version::Requirement
70
- requirements:
71
- - - ">="
72
- - !ruby/object:Gem::Version
73
- version: 1.2.1
74
- version:
96
+ rubyforge_project: seattlerb
97
+ rubygems_version: 1.3.4
98
+ signing_key:
99
+ specification_version: 3
100
+ summary: ImageScience is a clean and happy Ruby library that generates thumbnails -- and kicks the living crap out of RMagick
101
+ test_files:
102
+ - test/test_image_science.rb
metadata.gz.sig ADDED
@@ -0,0 +1,4 @@
1
+ #
2
+ ���
3
+ �'��6�@�[ߺk~�V;t �� 7�����hG��I�q�j_�#�IH��� ����%���T'���0O������
4
+ (r%��$�