image_science 1.1.3 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
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%��$�