image_proc 1.0.2 → 1.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +4 -0
- data/lib/image_proc.rb +20 -7
- data/test/test_image_proc.rb +3 -1
- metadata +1 -1
data/History.txt
CHANGED
data/lib/image_proc.rb
CHANGED
@@ -9,7 +9,7 @@ require 'open3'
|
|
9
9
|
# The whole idea is: a backend does not have to support cropping (we don't do it), it has only to be able to resize,
|
10
10
|
# and a backend should have 2 public methods. That's the game.
|
11
11
|
class ImageProc
|
12
|
-
VERSION = '1.0.
|
12
|
+
VERSION = '1.0.3'
|
13
13
|
|
14
14
|
class Error < RuntimeError; end
|
15
15
|
class MissingInput < Error; end
|
@@ -18,6 +18,7 @@ class ImageProc
|
|
18
18
|
class NoOverwrites < Error; end
|
19
19
|
class FormatUnsupported < Error; end
|
20
20
|
class InvalidOptions < Error; end
|
21
|
+
class MissingOutput < Error; end
|
21
22
|
|
22
23
|
HARMLESS = []
|
23
24
|
class << self
|
@@ -61,18 +62,27 @@ class ImageProc
|
|
61
62
|
end
|
62
63
|
end
|
63
64
|
|
64
|
-
|
65
|
+
def resize_with_geom_string(from_path, to_path, str) #:nodoc:
|
66
|
+
w, h = opts.scan(/^\d+x\d+$/).to_a.flatten
|
67
|
+
resize(from_path, to_path, :width => w, :height => h)
|
68
|
+
result_w, result_h = get_bounds(to_path)
|
69
|
+
[to_path, result_w, result_h]
|
70
|
+
end
|
71
|
+
|
72
|
+
# Resizes with specific options passed as a hash.
|
73
|
+
# It returns the destination path to the resized image. If you need to know the resulting size
|
74
|
+
# of the image just call a ImageProc.get_bounds on the result path
|
75
|
+
#
|
65
76
|
# ImageProc.resize "/tmp/foo.jpg", "bla.jpg", :width => 120, :height => 30
|
66
77
|
def resize(from_path, to_path, opts = {})
|
67
78
|
if opts.is_a?(String)
|
68
79
|
STDERR.puts "String argument to resize() is really deprecated"
|
69
|
-
|
70
|
-
return resize(from_path, to_path, :width => w, :height => h)
|
80
|
+
resize_with_geom_string(from_path, to_path, opts)
|
71
81
|
end
|
72
82
|
|
73
83
|
remove_nil_values!(opts)
|
84
|
+
|
74
85
|
raise InvalidOptions, "The only allowed options are :width, :height and :fill" if (opts.keys - [:width, :height, :fill]).any?
|
75
|
-
raise InvalidOptions, "Pass width, height or both" unless (opts.keys & [:width, :height]).any?
|
76
86
|
|
77
87
|
if opts[:width] && opts[:height] && opts[:fill]
|
78
88
|
resize_fit_fill(from_path, to_path, opts[:width], opts[:height])
|
@@ -83,9 +93,11 @@ class ImageProc
|
|
83
93
|
elsif opts[:height]
|
84
94
|
resize_fit_height(from_path, to_path, opts[:height])
|
85
95
|
else
|
86
|
-
raise "
|
96
|
+
raise InvalidOptions, "Pass width, height or both"
|
87
97
|
end
|
88
|
-
to_path
|
98
|
+
raise MissingOutput unless File.exist?(to_path)
|
99
|
+
|
100
|
+
return to_path
|
89
101
|
end
|
90
102
|
|
91
103
|
# Resize an image fitting the biggest side of it to the side of a square. A must for thumbs.
|
@@ -297,6 +309,7 @@ ImageProc.keep_quiet do
|
|
297
309
|
# -Z pixelsWH --resampleHeightWidthMax pixelsWH
|
298
310
|
FORMAT_MAP = { ".tif" => "tiff", ".png" => "png", ".tif" => "tiff", ".gif" => "gif" }
|
299
311
|
HARMLESS = [/XRefStm encountered but/, /CGColor/]
|
312
|
+
|
300
313
|
def process_exact
|
301
314
|
fmt = detect_source_format
|
302
315
|
wrap_stderr("sips -s format #{fmt} --resampleHeightWidth #{@target_h} #{@target_w} #{@source} --out '#{@dest}'")
|
data/test/test_image_proc.rb
CHANGED
@@ -20,7 +20,8 @@ class TestQuickProcessWithOptions < Test::Unit::TestCase
|
|
20
20
|
opts = {:height=>75, :fill=>true}
|
21
21
|
begin
|
22
22
|
assert_nothing_raised do
|
23
|
-
path
|
23
|
+
path = ImageProc.resize(source, dest, opts)
|
24
|
+
assert_equal dest, path
|
24
25
|
end
|
25
26
|
ensure
|
26
27
|
File.unlink(dest) rescue nil
|
@@ -50,6 +51,7 @@ class TestQuickProcessWithOptions < Test::Unit::TestCase
|
|
50
51
|
begin
|
51
52
|
assert_nothing_raised do
|
52
53
|
path = ImageProc.resize(source, dest, opts)
|
54
|
+
assert_equal dest, path
|
53
55
|
end
|
54
56
|
ensure
|
55
57
|
File.unlink(dest) rescue nil
|