has_image 0.1.2 → 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +5 -0
- data/lib/has_image/processor.rb +3 -8
- data/lib/has_image/storage.rb +3 -24
- data/test/processor_test.rb +0 -4
- data/test/storage_test.rb +0 -7
- metadata +2 -2
data/CHANGELOG
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
2008-07-29 Norman Clarke <norman@randomba.org>
|
2
|
+
|
3
|
+
* Reverted thumbnail sorting feature - it's fast but makes terrible quality
|
4
|
+
thumbnails. It's just not worth it.
|
5
|
+
|
1
6
|
2008-07-28 Norman Clarke <norman@randomba.org>
|
2
7
|
|
3
8
|
* Added sorted thumbnail processing. This improves thumbnail generation
|
data/lib/has_image/processor.rb
CHANGED
@@ -9,13 +9,6 @@ module HasImage
|
|
9
9
|
|
10
10
|
class << self
|
11
11
|
|
12
|
-
# Given a geometry string, return the maxium possible output dimensions.
|
13
|
-
# For example:
|
14
|
-
# area("50x50>") == 2500
|
15
|
-
def area(dimensions)
|
16
|
-
dimensions.split("x")[0].to_i * dimensions.split("x")[1].to_i
|
17
|
-
end
|
18
|
-
|
19
12
|
# "The form of an {extended geometry
|
20
13
|
# string}[http://www.imagemagick.org/script/command-line-options.php?#resize] is
|
21
14
|
# <width>x<height>{+-}<xoffset>{+-}<yoffset>{%}{!}{<}{>}"
|
@@ -45,7 +38,9 @@ module HasImage
|
|
45
38
|
# format if necessary. The size should be a valid ImageMagick {geometry
|
46
39
|
# string}[http://www.imagemagick.org/script/command-line-options.php#resize].
|
47
40
|
def resize(file, size)
|
48
|
-
|
41
|
+
unless Processor.geometry_string_valid?(size)
|
42
|
+
raise InvalidGeometryError.new('"%s" is not a valid ImageMagick geometry string' % size)
|
43
|
+
end
|
49
44
|
silence_stderr do
|
50
45
|
path = file.respond_to?(:path) ? file.path : file
|
51
46
|
file.close if file.respond_to?(:close) && !file.closed?
|
data/lib/has_image/storage.rb
CHANGED
@@ -105,26 +105,6 @@ module HasImage
|
|
105
105
|
options[:convert_to].to_s.downcase.gsub("jpeg", "jpg")
|
106
106
|
end
|
107
107
|
|
108
|
-
# Returns the options[:thumbnails] hash, coverted to an array and sorted
|
109
|
-
# by thumbnail area, highest to lowest. For example:
|
110
|
-
#
|
111
|
-
# options[:thumbnails] == {:a => "20x20", :b => "2x2", :c => "100x100"}
|
112
|
-
# sorted_thumbnails == [[:c, "100x100"], [:a, "20x20"], [:b, "2x2"]]
|
113
|
-
#
|
114
|
-
# This is done to speed up processing images with several thumbnails. Rather
|
115
|
-
# than create the thumbnail starting from the highest quality version each
|
116
|
-
# time, the next biggest thumbnail is used as the base image for its
|
117
|
-
# immediately smaller variant. For example, given an image with 3 thumbnails
|
118
|
-
# HasImage will use the 800x800 as the basis of the 500x500, and then the
|
119
|
-
# 500x500 as the basis of the 200x200, etc. My benchmarks showed that this
|
120
|
-
# will speed up processing by up to around 25% for a 4.5 meg JPEG with 5
|
121
|
-
# thumbnails.
|
122
|
-
def sorted_thumbnails
|
123
|
-
options[:thumbnails].to_a.sort do |b,a|
|
124
|
-
Processor.area(a[1]) <=> Processor.area(b[1])
|
125
|
-
end
|
126
|
-
end
|
127
|
-
|
128
108
|
private
|
129
109
|
|
130
110
|
# File name, plus thumbnail suffix, plus extension. For example:
|
@@ -161,10 +141,9 @@ module HasImage
|
|
161
141
|
def install_thumbnails(id, name)
|
162
142
|
FileUtils.mkdir_p path_for(id)
|
163
143
|
path = File.join(path_for(id), file_name_for(name))
|
164
|
-
|
165
|
-
thumb = processor.resize(path,
|
166
|
-
|
167
|
-
thumb.write(path)
|
144
|
+
options[:thumbnails].each do |thumb_name, size|
|
145
|
+
thumb = processor.resize(path, size)
|
146
|
+
thumb.write(File.join(path_for(id), file_name_for(name, thumb_name)))
|
168
147
|
thumb.tempfile.close!
|
169
148
|
end
|
170
149
|
end
|
data/test/processor_test.rb
CHANGED
@@ -13,10 +13,6 @@ class StorageTest < Test::Unit::TestCase
|
|
13
13
|
return @temp_file
|
14
14
|
end
|
15
15
|
|
16
|
-
def test_area
|
17
|
-
assert_equal 2500, HasImage::Processor.area("50x50>")
|
18
|
-
end
|
19
|
-
|
20
16
|
def test_detect_valid_image
|
21
17
|
assert HasImage::Processor.valid?(File.dirname(__FILE__) + "/../test_rails/fixtures/image.jpg")
|
22
18
|
end
|
data/test/storage_test.rb
CHANGED
@@ -16,13 +16,6 @@ class StorageTest < Test::Unit::TestCase
|
|
16
16
|
)
|
17
17
|
end
|
18
18
|
|
19
|
-
def test_sorted_thumbnails
|
20
|
-
thumbs = {:a => "20x20", :b => "2x2", :c => "100x100"}
|
21
|
-
sorted = [[:c, "100x100"], [:a, "20x20"], [:b, "2x2"]]
|
22
|
-
@storage = HasImage::Storage.new(default_options.merge(:thumbnails => thumbs))
|
23
|
-
assert_equal sorted, @storage.send(:sorted_thumbnails)
|
24
|
-
end
|
25
|
-
|
26
19
|
def test_partitioned_path
|
27
20
|
assert_equal(["0001", "2345"], HasImage::Storage.partitioned_path("12345"))
|
28
21
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: has_image
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Norman Clarke
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-07-
|
12
|
+
date: 2008-07-29 00:00:00 -03:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|