fastimage_resize 1.2.4 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README +2 -2
- data/README.textile +33 -9
- data/VERSION.yml +3 -3
- data/lib/fastimage_resize.rb +63 -18
- data/test/test.rb +36 -7
- metadata +8 -8
data/README
CHANGED
@@ -11,11 +11,11 @@ FastImage Resize is an extremely light solution for resizing images in ruby by u
|
|
11
11
|
|
12
12
|
RubyInline
|
13
13
|
|
14
|
-
|
14
|
+
gem install RubyInline
|
15
15
|
|
16
16
|
FastImage
|
17
17
|
|
18
|
-
|
18
|
+
gem install fastimage
|
19
19
|
|
20
20
|
Libgd
|
21
21
|
|
data/README.textile
CHANGED
@@ -10,18 +10,34 @@ And it doesn't rely on installing external heavy libraries such as RMagick (whic
|
|
10
10
|
|
11
11
|
FastImage Resize uses *Libgd*, which is commonly available on most unix platforms, including OSX. It is very likely that you already have this software installed on your server.
|
12
12
|
|
13
|
+
As its input, FastImage Resize can take a URI, a filename, or an IO object (or anything that responds to :read).
|
14
|
+
If you do not supply an output filename in the :outfile option, FastImage Resize will return you a Tempfile object. This will be unlinked when it is finalized during garbage collection.
|
15
|
+
|
16
|
+
FastImage Resize relies on "RubyInline":https://github.com/seattlerb/rubyinline for compiling and managing the C extension code.
|
17
|
+
|
18
|
+
h4. Incompatible API change Version 2.0.0 and above
|
19
|
+
|
20
|
+
Note that the parameters for version 2.0.0 have changed, the output filename is no longer the second parameter. See the examples.
|
21
|
+
|
13
22
|
h2. Examples
|
14
23
|
|
15
24
|
<pre>
|
16
25
|
<code>
|
17
26
|
require 'fastimage_resize'
|
18
27
|
|
19
|
-
FastImage.resize("http://stephensykes.com/images/ss.com_x.gif", "my.gif"
|
20
|
-
=>
|
21
|
-
</pre>
|
22
|
-
</code>
|
28
|
+
FastImage.resize("http://stephensykes.com/images/ss.com_x.gif", 100, 20, :outfile=>"my.gif")
|
29
|
+
=> nil
|
23
30
|
|
24
|
-
|
31
|
+
outfile = FastImage.resize("nonexistentfile.png", 50, 50)
|
32
|
+
=>FastImage::ImageFetchFailure: FastImage::ImageFetchFailure
|
33
|
+
|
34
|
+
outfile = FastImage.resize("afile.png", 50, 150)
|
35
|
+
=> #<File:/var/folders/vm/vd65y2597xl_by6c73_m9j1h0000gn/T/FastImage20111003-7638-x3l8r7-0>
|
36
|
+
|
37
|
+
File.open("afile.png", "r") {|f| FastImage.resize(f, 100, 100)}
|
38
|
+
=> #<File:/var/folders/vm/vd65y2597xl_by6c73_m9j1h0000gn/T/FastImage20111003-7638-y1ofh-0>
|
39
|
+
</code>
|
40
|
+
</pre>
|
25
41
|
|
26
42
|
h2. Installation
|
27
43
|
|
@@ -31,7 +47,7 @@ h4. Gem
|
|
31
47
|
|
32
48
|
<pre>
|
33
49
|
<code>
|
34
|
-
|
50
|
+
gem install fastimage_resize
|
35
51
|
</pre>
|
36
52
|
</code>
|
37
53
|
|
@@ -74,7 +90,7 @@ h2. Requirements
|
|
74
90
|
|
75
91
|
<pre>
|
76
92
|
<code>
|
77
|
-
|
93
|
+
gem install RubyInline
|
78
94
|
</pre>
|
79
95
|
</code>
|
80
96
|
|
@@ -82,7 +98,7 @@ h2. Requirements
|
|
82
98
|
|
83
99
|
<pre>
|
84
100
|
<code>
|
85
|
-
|
101
|
+
gem install fastimage
|
86
102
|
</pre>
|
87
103
|
</code>
|
88
104
|
|
@@ -113,8 +129,16 @@ Because of the way that libgd works, gif files that have transparency may not al
|
|
113
129
|
|
114
130
|
h2. Tests
|
115
131
|
|
116
|
-
You'll need to '
|
132
|
+
You'll need to 'gem install fakeweb' to be able to run the tests
|
117
133
|
|
118
134
|
h2. References
|
119
135
|
|
120
136
|
* "http://blog.new-bamboo.co.uk/2007/12/3/super-f-simple-resizing":http://blog.new-bamboo.co.uk/2007/12/3/super-f-simple-resizing
|
137
|
+
|
138
|
+
h2. Licence
|
139
|
+
|
140
|
+
MIT, see file MIT_LICENCE
|
141
|
+
|
142
|
+
h2. Author
|
143
|
+
|
144
|
+
Stephen Sykes, @sdsykes
|
data/VERSION.yml
CHANGED
data/lib/fastimage_resize.rb
CHANGED
@@ -4,18 +4,18 @@
|
|
4
4
|
#
|
5
5
|
# require 'fastimage_resize'
|
6
6
|
#
|
7
|
-
# FastImage.resize("http://stephensykes.com/images/ss.com_x.gif", "my.gif"
|
7
|
+
# FastImage.resize("http://stephensykes.com/images/ss.com_x.gif", 100, 20, :outfile=>"my.gif")
|
8
8
|
# => 1
|
9
9
|
#
|
10
10
|
# === Requirements
|
11
11
|
#
|
12
12
|
# RubyInline
|
13
13
|
#
|
14
|
-
#
|
14
|
+
# gem install RubyInline
|
15
15
|
#
|
16
16
|
# FastImage
|
17
17
|
#
|
18
|
-
#
|
18
|
+
# gem install fastimage
|
19
19
|
#
|
20
20
|
# Libgd
|
21
21
|
#
|
@@ -37,28 +37,73 @@ class FastImage
|
|
37
37
|
class FormatNotSupported < FastImageException # :nodoc:
|
38
38
|
end
|
39
39
|
|
40
|
-
|
41
|
-
|
40
|
+
# Resizes an image, storing the result in a file given in file_out
|
41
|
+
#
|
42
|
+
# Input can be a filename, a uri, or an IO object.
|
43
|
+
#
|
44
|
+
# FastImage Resize can resize GIF, JPEG and PNG files.
|
45
|
+
#
|
46
|
+
# === Example
|
47
|
+
#
|
48
|
+
# require 'fastimage_resize'
|
49
|
+
#
|
50
|
+
# FastImage.resize("http://stephensykes.com/images/ss.com_x.gif", 100, 20, :outfile=>"my.gif")
|
51
|
+
#
|
52
|
+
# === Supported options
|
53
|
+
# [:jpeg_quality]
|
54
|
+
# A figure passed to libgd to determine quality of output jpeg (only useful if input is jpeg)
|
55
|
+
# [:outfile]
|
56
|
+
# Name of a file to store the output in, in this case a temp file is not used
|
57
|
+
#
|
58
|
+
def self.resize(input, w, h, options={})
|
59
|
+
jpeg_quality = options[:jpeg_quality].to_i || -1
|
60
|
+
file_out = options[:outfile]
|
42
61
|
|
43
|
-
|
44
|
-
|
45
|
-
f = Tempfile.new(name)
|
46
|
-
f.write(open(u).read)
|
47
|
-
f.close
|
48
|
-
resize_local(f.path, file_out, w, h, jpeg_quality)
|
49
|
-
File.unlink(f.path)
|
62
|
+
if input.respond_to?(:read)
|
63
|
+
file_in = read_to_local(input)
|
50
64
|
else
|
51
|
-
|
65
|
+
u = URI.parse(input)
|
66
|
+
if u.scheme == "http" || u.scheme == "https" || u.scheme == "ftp"
|
67
|
+
file_in = read_to_local(open(u))
|
68
|
+
else
|
69
|
+
file_in = input.to_s
|
70
|
+
end
|
52
71
|
end
|
72
|
+
|
73
|
+
if !file_out
|
74
|
+
temp_file = Tempfile.new(name)
|
75
|
+
file_out = temp_file.path
|
76
|
+
else
|
77
|
+
temp_file = nil
|
78
|
+
end
|
79
|
+
|
80
|
+
fast_image = new(file_in, :raise_on_failure=>true)
|
81
|
+
type_index = SUPPORTED_FORMATS.index(fast_image.type)
|
82
|
+
raise FormatNotSupported unless type_index
|
83
|
+
|
84
|
+
in_path = file_in.respond_to?(:path) ? file_in.path : file_in
|
85
|
+
|
86
|
+
fast_image.resize_image(in_path, file_out.to_s, w.to_i, h.to_i, type_index, jpeg_quality)
|
87
|
+
|
88
|
+
if file_in.respond_to?(:close)
|
89
|
+
file_in.close
|
90
|
+
file_in.unlink
|
91
|
+
end
|
92
|
+
|
93
|
+
temp_file
|
53
94
|
rescue OpenURI::HTTPError, SocketError, URI::InvalidURIError, RuntimeError => e
|
54
95
|
raise ImageFetchFailure, e.class
|
55
96
|
end
|
56
97
|
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
98
|
+
private
|
99
|
+
|
100
|
+
# returns readable tempfile
|
101
|
+
def self.read_to_local(readable)
|
102
|
+
temp = Tempfile.new(name)
|
103
|
+
temp.write(readable.read)
|
104
|
+
temp.close
|
105
|
+
temp.open
|
106
|
+
temp
|
62
107
|
end
|
63
108
|
|
64
109
|
def resize_image(filename_in, filename_out, w, h, image_type, jpeg_quality); end
|
data/test/test.rb
CHANGED
@@ -41,20 +41,49 @@ END
|
|
41
41
|
FakeWeb.register_uri(:get, "#{TestUrl}/redirect", :response=>redirect_response)
|
42
42
|
|
43
43
|
class FastImageResizeTest < Test::Unit::TestCase
|
44
|
-
def
|
44
|
+
def test_resize_image_types_from_http
|
45
45
|
GoodFixtures.each do |fn, info|
|
46
46
|
outfile = File.join(PathHere, "fixtures", "resized_" + fn)
|
47
|
-
FastImage.resize(TestUrl + fn,
|
47
|
+
FastImage.resize(TestUrl + fn, info[1][0] / 3, info[1][1] / 2, :outfile=>outfile)
|
48
48
|
assert_equal [info[1][0] / 3, info[1][1] / 2], FastImage.size(outfile)
|
49
49
|
File.unlink outfile
|
50
50
|
end
|
51
51
|
end
|
52
52
|
|
53
|
+
def test_resize_image_types_from_files
|
54
|
+
GoodFixtures.each do |fn, info|
|
55
|
+
outfile = File.join(PathHere, "fixtures", "resized_" + fn)
|
56
|
+
FastImage.resize(File.join(FixturePath, fn), info[1][0] / 3, info[1][1] / 2, :outfile=>outfile)
|
57
|
+
assert_equal [info[1][0] / 3, info[1][1] / 2], FastImage.size(outfile)
|
58
|
+
File.unlink outfile
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_resize_image_types_from_io_objects
|
63
|
+
GoodFixtures.each do |fn, info|
|
64
|
+
outfile = File.join(PathHere, "fixtures", "resized_" + fn)
|
65
|
+
File.open(File.join(FixturePath, fn)) do |io|
|
66
|
+
FastImage.resize(io, info[1][0] / 3, info[1][1] / 2, :outfile=>outfile)
|
67
|
+
assert_equal [info[1][0] / 3, info[1][1] / 2], FastImage.size(outfile)
|
68
|
+
File.unlink outfile
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
def test_resize_to_temp_file
|
74
|
+
GoodFixtures.each do |fn, info|
|
75
|
+
File.open(File.join(FixturePath, fn)) do |io|
|
76
|
+
outfile = FastImage.resize(io, info[1][0] / 3, info[1][1] / 2)
|
77
|
+
assert_equal [info[1][0] / 3, info[1][1] / 2], FastImage.size(outfile)
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
53
82
|
def test_should_raise_for_bmp_files
|
54
83
|
fn = BadFixtures[0]
|
55
84
|
outfile = File.join(PathHere, "fixtures", "resized_" + fn)
|
56
85
|
assert_raises(FastImage::FormatNotSupported) do
|
57
|
-
FastImage.resize(TestUrl + fn,
|
86
|
+
FastImage.resize(TestUrl + fn, 20, 20, :outfile=>outfile)
|
58
87
|
end
|
59
88
|
end
|
60
89
|
|
@@ -62,7 +91,7 @@ class FastImageResizeTest < Test::Unit::TestCase
|
|
62
91
|
fn = BadFixtures[1]
|
63
92
|
outfile = File.join(PathHere, "fixtures", "resized_" + fn)
|
64
93
|
assert_raises(FastImage::SizeNotFound) do
|
65
|
-
FastImage.resize(TestUrl + fn,
|
94
|
+
FastImage.resize(TestUrl + fn, 20, 20, :outfile=>outfile)
|
66
95
|
end
|
67
96
|
end
|
68
97
|
|
@@ -70,19 +99,19 @@ class FastImageResizeTest < Test::Unit::TestCase
|
|
70
99
|
fn = BadFixtures[2]
|
71
100
|
outfile = File.join(PathHere, "fixtures", "resized_" + fn)
|
72
101
|
assert_raises(FastImage::UnknownImageType) do
|
73
|
-
FastImage.resize(TestUrl + fn,
|
102
|
+
FastImage.resize(TestUrl + fn, 20, 20, :outfile=>outfile)
|
74
103
|
end
|
75
104
|
end
|
76
105
|
|
77
106
|
def test_should_raise_for_invalid_uri
|
78
107
|
assert_raises(FastImage::ImageFetchFailure) do
|
79
|
-
FastImage.resize("#{TestUrl}////%&redirect",
|
108
|
+
FastImage.resize("#{TestUrl}////%&redirect", 20, 20)
|
80
109
|
end
|
81
110
|
end
|
82
111
|
|
83
112
|
def test_should_raise_for_redirect
|
84
113
|
assert_raises(FastImage::ImageFetchFailure) do
|
85
|
-
FastImage.resize("#{TestUrl}/redirect",
|
114
|
+
FastImage.resize("#{TestUrl}/redirect", 20, 20)
|
86
115
|
end
|
87
116
|
end
|
88
117
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fastimage_resize
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 15
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
|
-
- 1
|
8
7
|
- 2
|
9
|
-
-
|
10
|
-
|
8
|
+
- 0
|
9
|
+
- 0
|
10
|
+
version: 2.0.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Stephen Sykes
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-
|
18
|
+
date: 2011-10-03 00:00:00 +03:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -42,12 +42,12 @@ dependencies:
|
|
42
42
|
requirements:
|
43
43
|
- - ">="
|
44
44
|
- !ruby/object:Gem::Version
|
45
|
-
hash:
|
45
|
+
hash: 13
|
46
46
|
segments:
|
47
47
|
- 1
|
48
48
|
- 2
|
49
|
-
-
|
50
|
-
version: 1.2.
|
49
|
+
- 9
|
50
|
+
version: 1.2.9
|
51
51
|
type: :runtime
|
52
52
|
version_requirements: *id002
|
53
53
|
description: FastImage Resize is an extremely light solution for resizing images in ruby by using libgd.
|