image_science 1.2.5 → 1.2.6
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.
- checksums.yaml +7 -0
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/History.txt +6 -0
- data/Rakefile +6 -2
- data/lib/image_science.rb +38 -3
- metadata +86 -105
- metadata.gz.sig +0 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 2f4c2bf100b9b9c8b0fc90434c2457f59ad04413
|
4
|
+
data.tar.gz: 27a8915d9d58366d4f780087e6518a75ba97772e
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 14f8f590cc4ff27fd8604b6dfcd6fe0ef38ec3e80ec03a896f79383e2e136d8c12418f6366afa661dbc6a83c5f7bcf17587e7c51d9df70473f37f8001fcb4799
|
7
|
+
data.tar.gz: 65c54429309c45b2547a278b7e0a0d109645392e17f31f7c4af12cebd44b64813624980a111fef2e0ce710f8883978f0c269f04b1c1396954140eeaf04b0737b
|
checksums.yaml.gz.sig
ADDED
Binary file
|
data.tar.gz.sig
CHANGED
Binary file
|
data/History.txt
CHANGED
data/Rakefile
CHANGED
@@ -8,13 +8,17 @@ Hoe.add_include_dirs("../../RubyInline/dev/lib",
|
|
8
8
|
|
9
9
|
Hoe.plugin :seattlerb
|
10
10
|
Hoe.plugin :inline
|
11
|
+
Hoe.plugin :isolate
|
11
12
|
|
12
13
|
Hoe.spec 'image_science' do
|
13
14
|
developer 'Ryan Davis', 'ryand-ruby@zenspider.com'
|
14
15
|
|
15
|
-
self.rubyforge_name = 'seattlerb'
|
16
|
-
|
17
16
|
clean_globs << 'blah*png' << 'images/*_thumb.*'
|
18
17
|
end
|
19
18
|
|
19
|
+
task :debug => :isolate do
|
20
|
+
file = ENV["F"]
|
21
|
+
ruby "-Ilib bin/image_science_thumb 100 #{file}"
|
22
|
+
end
|
23
|
+
|
20
24
|
# vim: syntax=Ruby
|
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.2.
|
14
|
+
VERSION = '1.2.6'
|
15
15
|
|
16
16
|
##
|
17
17
|
# The top-level image loader opens +path+ and then yields the image.
|
@@ -104,6 +104,8 @@ class ImageScience
|
|
104
104
|
|
105
105
|
builder.prefix <<-"END"
|
106
106
|
#define GET_BITMAP(name) Data_Get_Struct(self, FIBITMAP, (name)); if (!(name)) rb_raise(rb_eTypeError, "Bitmap has already been freed");
|
107
|
+
static ID err_key; /* used as thread-local key */
|
108
|
+
static void raise_deferred(void);
|
107
109
|
END
|
108
110
|
|
109
111
|
builder.prefix <<-"END"
|
@@ -113,18 +115,29 @@ class ImageScience
|
|
113
115
|
|
114
116
|
FreeImage_Unload(bitmap);
|
115
117
|
DATA_PTR(self) = NULL;
|
118
|
+
raise_deferred(); /* raise just in case */
|
116
119
|
return Qnil;
|
117
120
|
}
|
118
121
|
END
|
119
122
|
|
120
123
|
builder.prefix <<-"END"
|
124
|
+
static VALUE raise_or_yield(VALUE obj) {
|
125
|
+
/*
|
126
|
+
* check for FreeImage routines which may warn or error out,
|
127
|
+
* do not run user code if there are warnings/errors here:
|
128
|
+
*/
|
129
|
+
raise_deferred();
|
130
|
+
|
131
|
+
return rb_yield(obj);
|
132
|
+
}
|
133
|
+
|
121
134
|
VALUE wrap_and_yield(FIBITMAP *image, VALUE self, FREE_IMAGE_FORMAT fif) {
|
122
135
|
unsigned int self_is_class = rb_type(self) == T_CLASS;
|
123
136
|
VALUE klass = self_is_class ? self : CLASS_OF(self);
|
124
137
|
VALUE type = self_is_class ? INT2FIX(fif) : rb_iv_get(self, "@file_type");
|
125
138
|
VALUE obj = Data_Wrap_Struct(klass, NULL, NULL, image);
|
126
139
|
rb_iv_set(obj, "@file_type", type);
|
127
|
-
return rb_ensure(
|
140
|
+
return rb_ensure(raise_or_yield, obj, unload, obj);
|
128
141
|
}
|
129
142
|
END
|
130
143
|
|
@@ -140,12 +153,28 @@ class ImageScience
|
|
140
153
|
}
|
141
154
|
END
|
142
155
|
|
156
|
+
# we defer raising the error until it we find a safe point to do so
|
157
|
+
# We cannot use rb_ensure in these cases because FreeImage may internally
|
158
|
+
# make allocations via which our code will never see.
|
143
159
|
builder.prefix <<-"END"
|
144
160
|
void FreeImageErrorHandler(FREE_IMAGE_FORMAT fif, const char *message) {
|
145
|
-
|
161
|
+
VALUE err = rb_sprintf(
|
146
162
|
"FreeImage exception for type %s: %s",
|
147
163
|
(fif == FIF_UNKNOWN) ? "???" : FreeImage_GetFormatFromFIF(fif),
|
148
164
|
message);
|
165
|
+
rb_thread_local_aset(rb_thread_current(), err_key, err);
|
166
|
+
}
|
167
|
+
END
|
168
|
+
|
169
|
+
# do not call this until necessary variables are wrapped up for GC
|
170
|
+
# otherwise there will be leaks
|
171
|
+
builder.prefix <<-"END"
|
172
|
+
static void raise_deferred(void) {
|
173
|
+
VALUE err = rb_thread_local_aref(rb_thread_current(), err_key);
|
174
|
+
if (!NIL_P(err)) {
|
175
|
+
rb_thread_local_aset(rb_thread_current(), err_key, Qnil);
|
176
|
+
rb_raise(rb_eRuntimeError, "%s", StringValueCStr(err));
|
177
|
+
}
|
149
178
|
}
|
150
179
|
END
|
151
180
|
|
@@ -174,6 +203,7 @@ class ImageScience
|
|
174
203
|
END
|
175
204
|
|
176
205
|
builder.add_to_init "FreeImage_SetOutputMessage(FreeImageErrorHandler);"
|
206
|
+
builder.add_to_init 'err_key = rb_intern("__FREE_IMAGE_ERROR");'
|
177
207
|
|
178
208
|
builder.c_singleton <<-"END"
|
179
209
|
VALUE with_image(char * input) {
|
@@ -190,6 +220,7 @@ class ImageScience
|
|
190
220
|
bitmap = ReOrient(bitmap);
|
191
221
|
result = wrap_and_yield(bitmap, self, fif);
|
192
222
|
}
|
223
|
+
raise_deferred();
|
193
224
|
return result;
|
194
225
|
}
|
195
226
|
rb_raise(rb_eTypeError, "Unknown file format");
|
@@ -228,6 +259,7 @@ class ImageScience
|
|
228
259
|
bitmap = ReOrient(bitmap);
|
229
260
|
result = wrap_and_yield(bitmap, self, fif);
|
230
261
|
}
|
262
|
+
raise_deferred();
|
231
263
|
return result;
|
232
264
|
}
|
233
265
|
END
|
@@ -242,6 +274,7 @@ class ImageScience
|
|
242
274
|
copy_icc_profile(self, bitmap, copy);
|
243
275
|
result = wrap_and_yield(copy, self, 0);
|
244
276
|
}
|
277
|
+
raise_deferred();
|
245
278
|
return result;
|
246
279
|
}
|
247
280
|
END
|
@@ -275,6 +308,7 @@ class ImageScience
|
|
275
308
|
copy_icc_profile(self, bitmap, image);
|
276
309
|
return wrap_and_yield(image, self, 0);
|
277
310
|
}
|
311
|
+
raise_deferred();
|
278
312
|
return Qnil;
|
279
313
|
}
|
280
314
|
END
|
@@ -298,6 +332,7 @@ class ImageScience
|
|
298
332
|
|
299
333
|
if (unload) FreeImage_Unload(bitmap);
|
300
334
|
|
335
|
+
raise_deferred();
|
301
336
|
return result ? Qtrue : Qfalse;
|
302
337
|
}
|
303
338
|
rb_raise(rb_eTypeError, "Unknown file format");
|
metadata
CHANGED
@@ -1,24 +1,18 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: image_science
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
prerelease:
|
6
|
-
segments:
|
7
|
-
- 1
|
8
|
-
- 2
|
9
|
-
- 5
|
10
|
-
version: 1.2.5
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.2.6
|
11
5
|
platform: ruby
|
12
|
-
authors:
|
6
|
+
authors:
|
13
7
|
- Ryan Davis
|
14
8
|
autorequire:
|
15
9
|
bindir: bin
|
16
|
-
cert_chain:
|
10
|
+
cert_chain:
|
17
11
|
- |
|
18
12
|
-----BEGIN CERTIFICATE-----
|
19
|
-
|
13
|
+
MIIDPjCCAiagAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMRMwEQYDVQQDDApyeWFu
|
20
14
|
ZC1ydWJ5MRkwFwYKCZImiZPyLGQBGRYJemVuc3BpZGVyMRMwEQYKCZImiZPyLGQB
|
21
|
-
|
15
|
+
GRYDY29tMB4XDTEzMDkxNjIzMDQxMloXDTE0MDkxNjIzMDQxMlowRTETMBEGA1UE
|
22
16
|
AwwKcnlhbmQtcnVieTEZMBcGCgmSJomT8ixkARkWCXplbnNwaWRlcjETMBEGCgmS
|
23
17
|
JomT8ixkARkWA2NvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALda
|
24
18
|
b9DCgK+627gPJkB6XfjZ1itoOQvpqH1EXScSaba9/S2VF22VYQbXU1xQXL/WzCkx
|
@@ -28,93 +22,88 @@ cert_chain:
|
|
28
22
|
qhtV7HJxNKuPj/JFH0D2cswvzznE/a5FOYO68g+YCuFi5L8wZuuM8zzdwjrWHqSV
|
29
23
|
gBEfoTEGr7Zii72cx+sCAwEAAaM5MDcwCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAw
|
30
24
|
HQYDVR0OBBYEFEfFe9md/r/tj/Wmwpy+MI8d9k/hMA0GCSqGSIb3DQEBBQUAA4IB
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
25
|
+
AQCFZ7JTzoy1gcG4d8A6dmOJy7ygtO5MFpRIz8HuKCF5566nOvpy7aHhDDzFmQuu
|
26
|
+
FX3zDU6ghx5cQIueDhf2SGOncyBmmJRRYawm3wI0o1MeN6LZJ/3cRaOTjSFy6+S6
|
27
|
+
zqDmHBp8fVA2TGJtO0BLNkbGVrBJjh0UPmSoGzWlRhEVnYC33TpDAbNA+u39UrQI
|
28
|
+
ynwhNN7YbnmSR7+JU2cUjBFv2iPBO+TGuWC+9L2zn3NHjuc6tnmSYipA9y8Hv+As
|
29
|
+
Y4evBVezr3SjXz08vPqRO5YRdO3zfeMT8gBjRqZjWJGMZ2lD4XNfrs7eky74CyZw
|
30
|
+
xx3n58i0lQkBE1EpKE0lFu/y
|
37
31
|
-----END CERTIFICATE-----
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
- !ruby/object:Gem::Dependency
|
32
|
+
date: 2014-01-16 00:00:00.000000000 Z
|
33
|
+
dependencies:
|
34
|
+
- !ruby/object:Gem::Dependency
|
42
35
|
name: RubyInline
|
43
|
-
|
44
|
-
|
45
|
-
none: false
|
46
|
-
requirements:
|
36
|
+
requirement: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
47
38
|
- - ~>
|
48
|
-
- !ruby/object:Gem::Version
|
49
|
-
|
50
|
-
segments:
|
51
|
-
- 3
|
52
|
-
- 9
|
53
|
-
version: "3.9"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '3.9'
|
54
41
|
type: :runtime
|
55
|
-
version_requirements: *id001
|
56
|
-
- !ruby/object:Gem::Dependency
|
57
|
-
name: minitest
|
58
42
|
prerelease: false
|
59
|
-
|
60
|
-
|
61
|
-
|
43
|
+
version_requirements: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ~>
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '3.9'
|
48
|
+
- !ruby/object:Gem::Dependency
|
49
|
+
name: minitest
|
50
|
+
requirement: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
62
52
|
- - ~>
|
63
|
-
- !ruby/object:Gem::Version
|
64
|
-
|
65
|
-
segments:
|
66
|
-
- 5
|
67
|
-
- 0
|
68
|
-
version: "5.0"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '5.2'
|
69
55
|
type: :development
|
70
|
-
version_requirements: *id002
|
71
|
-
- !ruby/object:Gem::Dependency
|
72
|
-
name: rdoc
|
73
56
|
prerelease: false
|
74
|
-
|
75
|
-
|
76
|
-
|
57
|
+
version_requirements: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '5.2'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: rdoc
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
77
66
|
- - ~>
|
78
|
-
- !ruby/object:Gem::Version
|
79
|
-
|
80
|
-
segments:
|
81
|
-
- 4
|
82
|
-
- 0
|
83
|
-
version: "4.0"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '4.0'
|
84
69
|
type: :development
|
85
|
-
version_requirements: *id003
|
86
|
-
- !ruby/object:Gem::Dependency
|
87
|
-
name: hoe
|
88
70
|
prerelease: false
|
89
|
-
|
90
|
-
|
91
|
-
requirements:
|
71
|
+
version_requirements: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
92
73
|
- - ~>
|
93
|
-
- !ruby/object:Gem::Version
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '4.0'
|
76
|
+
- !ruby/object:Gem::Dependency
|
77
|
+
name: hoe
|
78
|
+
requirement: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ~>
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '3.8'
|
99
83
|
type: :development
|
100
|
-
|
84
|
+
prerelease: false
|
85
|
+
version_requirements: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ~>
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '3.8'
|
101
90
|
description: |-
|
102
91
|
ImageScience is a clean and happy Ruby library that generates
|
103
92
|
thumbnails -- and kicks the living crap out of RMagick. Oh, and it
|
104
93
|
doesn't leak memory like a sieve. :)
|
105
|
-
|
94
|
+
|
106
95
|
For more information including build steps, see http://seattlerb.rubyforge.org/
|
107
|
-
email:
|
96
|
+
email:
|
108
97
|
- ryand-ruby@zenspider.com
|
109
|
-
executables:
|
98
|
+
executables:
|
110
99
|
- image_science_thumb
|
111
100
|
extensions: []
|
112
|
-
|
113
|
-
extra_rdoc_files:
|
101
|
+
extra_rdoc_files:
|
114
102
|
- History.txt
|
115
103
|
- Manifest.txt
|
116
104
|
- README.txt
|
117
|
-
files:
|
105
|
+
files:
|
106
|
+
- .gemtest
|
118
107
|
- History.txt
|
119
108
|
- Manifest.txt
|
120
109
|
- README.txt
|
@@ -125,40 +114,32 @@ files:
|
|
125
114
|
- test/pix.png
|
126
115
|
- test/portrait.jpg
|
127
116
|
- test/test_image_science.rb
|
128
|
-
- .gemtest
|
129
117
|
homepage: http://seattlerb.rubyforge.org/ImageScience.html
|
130
|
-
licenses:
|
131
|
-
|
118
|
+
licenses:
|
119
|
+
- MIT
|
120
|
+
metadata: {}
|
132
121
|
post_install_message:
|
133
|
-
rdoc_options:
|
122
|
+
rdoc_options:
|
134
123
|
- --main
|
135
124
|
- README.txt
|
136
|
-
require_paths:
|
125
|
+
require_paths:
|
137
126
|
- lib
|
138
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
none: false
|
149
|
-
requirements:
|
150
|
-
- - ">="
|
151
|
-
- !ruby/object:Gem::Version
|
152
|
-
hash: 3
|
153
|
-
segments:
|
154
|
-
- 0
|
155
|
-
version: "0"
|
127
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - '>='
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
133
|
+
requirements:
|
134
|
+
- - '>='
|
135
|
+
- !ruby/object:Gem::Version
|
136
|
+
version: '0'
|
156
137
|
requirements: []
|
157
|
-
|
158
|
-
|
159
|
-
rubygems_version: 1.8.25
|
138
|
+
rubyforge_project: image_science
|
139
|
+
rubygems_version: 2.2.1
|
160
140
|
signing_key:
|
161
|
-
specification_version:
|
162
|
-
summary: ImageScience is a clean and happy Ruby library that generates thumbnails
|
163
|
-
|
141
|
+
specification_version: 4
|
142
|
+
summary: ImageScience is a clean and happy Ruby library that generates thumbnails
|
143
|
+
-- and kicks the living crap out of RMagick
|
144
|
+
test_files:
|
164
145
|
- test/test_image_science.rb
|
metadata.gz.sig
CHANGED
Binary file
|