vips-process 0.0.1 → 0.1.0
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 +4 -4
- data/Gemfile.lock +1 -1
- data/README.md +51 -0
- data/lib/vips-process.rb +43 -4
- data/lib/vips-process/gaussian-blur.rb +1 -1
- data/lib/vips-process/resize.rb +12 -1
- data/lib/vips-process/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8138e1fa1e52d3b4e2b8dcc77678c1b5e98b3d24
|
4
|
+
data.tar.gz: ea0d7a7528ffffd0d2ee2f873c1e95eeac1c89d8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9b1747770629763e8dfefb56b4f8306c1e1913586d83c6a5531f020910583f3e41342d5d1cf10ee60dce9ba894226e71ba417e652702edb5a5b669195e8dd4c6
|
7
|
+
data.tar.gz: 782ad36bcd197d06e71be2c2b4d911db552abef3fc0d54406df762baae44fdf70ab8f3111208848504c0763fb0a14592cf581f2c1f7036107566a72dbf997ed8
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -74,6 +74,57 @@ class MyImage < Vips::Process::Base
|
|
74
74
|
end
|
75
75
|
```
|
76
76
|
|
77
|
+
### Working with versions
|
78
|
+
|
79
|
+
Version dependencies are recursive. I.e., if you have:
|
80
|
+
|
81
|
+
```
|
82
|
+
class MyImage < Vips::Process::Base
|
83
|
+
# ...
|
84
|
+
|
85
|
+
version(:a) { ... }
|
86
|
+
version(:b, [:a])
|
87
|
+
version(:c, [:b])
|
88
|
+
|
89
|
+
# ...
|
90
|
+
end
|
91
|
+
```
|
92
|
+
Calling `image.c_version` will actually call `image.b_version` which will in turn call
|
93
|
+
`image.a_version` and then run version `b`'s code.
|
94
|
+
|
95
|
+
|
96
|
+
`MyImage.versions` will return an array with the list of versions your image supports.
|
97
|
+
|
98
|
+
|
99
|
+
Calling `image.versions!` will process all versions at once and will return an array with tuples
|
100
|
+
like `[version_name, output_path]`. E.g. with the image class above:
|
101
|
+
|
102
|
+
```
|
103
|
+
image = MyImage.new('/path/to/src.jpg')
|
104
|
+
image.versions! #=> [[:a, '/path/to/src-a.jpg'], [:b, '/path/to/src-b.jpg'], [:c, '/path/to/src-c.jpg']]
|
105
|
+
```
|
106
|
+
|
107
|
+
`versions!` takes one optional argument: the `base` destination. This could be either a directory
|
108
|
+
or a filename.
|
109
|
+
|
110
|
+
If you use a directory, all new files will be written to that directory
|
111
|
+
(which will be created recursively if it doesn't exist) with the version's name followed by the `src`
|
112
|
+
file extension. E.g.:
|
113
|
+
```
|
114
|
+
image = MyImage.new('/path/to/src.jpg')
|
115
|
+
image.versions!('/path/to/dir/') #=> [[:a, '/path/to/dir/a.jpg'], [:b, '/path/to/dir/b.jpg'], [:c, '/path/to/dir/c.jpg']]
|
116
|
+
```
|
117
|
+
|
118
|
+
If you use a filename, all new files will be written next to that file prepending the version's name
|
119
|
+
and using its extension. E.g.:
|
120
|
+
|
121
|
+
```
|
122
|
+
image = MyImage.new('/path/to/src.jpg')
|
123
|
+
image.versions!('/path/to/dst.jpeg') #=> [[:a, '/path/to/dst-a.jpeg'], [:b, '/path/to/dest-b.jpeg'], [:c, '/path/to/dest-c.jpg']]
|
124
|
+
```
|
125
|
+
|
126
|
+
By default we use the `src`'s filename.
|
127
|
+
|
77
128
|
## Supported processes
|
78
129
|
|
79
130
|
All examples live in the [/examples](https://github.com/dariocravero/vips-process/tree/master/examples)
|
data/lib/vips-process.rb
CHANGED
@@ -55,6 +55,22 @@ module Vips
|
|
55
55
|
self
|
56
56
|
end
|
57
57
|
|
58
|
+
##
|
59
|
+
# Process all versions using and output them in a directory
|
60
|
+
#
|
61
|
+
# @param base String the base filename/path where the versions will be saved
|
62
|
+
def versions!(base=@dst)
|
63
|
+
base_dir, base_ext, base_filename = File.file?(base) ?
|
64
|
+
[File.dirname(base), File.extname(base), "#{File.basename(base, File.extname(base))}-"] :
|
65
|
+
[base, File.extname(@src), nil]
|
66
|
+
|
67
|
+
FileUtils.mkdir_p base_dir unless File.directory?(base_dir) && File.exist?(base_dir)
|
68
|
+
|
69
|
+
self.class.versions.map do |name|
|
70
|
+
[name, send("#{name}_version", File.join(base_dir, "#{base_filename}#{name}#{base_ext}"))]
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
58
74
|
private def reset!
|
59
75
|
@_on_process = []
|
60
76
|
@_format_opts = nil
|
@@ -80,6 +96,11 @@ module Vips
|
|
80
96
|
##
|
81
97
|
# Define a version
|
82
98
|
#
|
99
|
+
# A version will then take optional arguments: `new_dst` which sets the output for
|
100
|
+
# the version (and reverts back to the previous dt) and `should_process` which tells
|
101
|
+
# whether we should process the version after running its code or not - comes in handy to
|
102
|
+
# stack them up.
|
103
|
+
#
|
83
104
|
# @param name String the version's name
|
84
105
|
# @param deps [] the version's dependencies, it's a list of version names
|
85
106
|
# @param &block block if you send a block to it
|
@@ -89,13 +110,31 @@ module Vips
|
|
89
110
|
@@_versions ||= {}
|
90
111
|
@@_versions[name] = {deps: deps, block: block}
|
91
112
|
|
92
|
-
define_method "#{name}_version" do |new_dst=nil|
|
93
|
-
|
94
|
-
|
113
|
+
define_method "#{name}_version" do |new_dst=nil, should_process=true|
|
114
|
+
# Make sure we have a reference to the old version if it's being changed
|
115
|
+
if new_dst
|
116
|
+
old_dst = @dst
|
117
|
+
@dst = new_dst
|
118
|
+
end
|
119
|
+
|
120
|
+
# Recursively call dependencies but don't process them yet
|
121
|
+
@@_versions[name][:deps].each { |dep| send "#{dep}_version", new_dst, false }
|
122
|
+
|
123
|
+
# Run the version's block
|
95
124
|
instance_eval &@@_versions[name][:block]
|
96
|
-
|
125
|
+
|
126
|
+
# Process if we were explicitly told to do so
|
127
|
+
version_dst = process! if should_process
|
128
|
+
|
129
|
+
# Revert to the old destination if we changed it during the version
|
130
|
+
@dst = old_dst if old_dst
|
131
|
+
|
132
|
+
version_dst
|
97
133
|
end
|
98
134
|
end
|
135
|
+
|
136
|
+
# Get all the version keys
|
137
|
+
def versions; @@_versions.keys; end
|
99
138
|
end
|
100
139
|
end
|
101
140
|
end
|
@@ -12,7 +12,7 @@ module Vips
|
|
12
12
|
##
|
13
13
|
# Apply gaussian blur to an image.
|
14
14
|
#
|
15
|
-
# @param sigma
|
15
|
+
# @param sigma Float roughly the radius
|
16
16
|
# @param min_ampl Float minimium amplitude we consider, it sets how far out the mask goes
|
17
17
|
def gaussian_blur(sigma, min_ampl=0.2)
|
18
18
|
manipulate! do |image|
|
data/lib/vips-process/resize.rb
CHANGED
@@ -65,6 +65,17 @@ module Vips
|
|
65
65
|
self
|
66
66
|
end
|
67
67
|
|
68
|
+
##
|
69
|
+
# Resize the image to a certain width. It will keep its height in relation.
|
70
|
+
#
|
71
|
+
# @param width Integer the width to scale the image to
|
72
|
+
def resize_to_width(width)
|
73
|
+
manipulate! do |image|
|
74
|
+
resize_image image, width, image.y_size
|
75
|
+
end
|
76
|
+
self
|
77
|
+
end
|
78
|
+
|
68
79
|
private def resize_image(image, width, height, min_or_max = :min)
|
69
80
|
ratio = get_ratio image, width, height, min_or_max
|
70
81
|
return image if ratio == 1
|
@@ -83,7 +94,7 @@ module Vips
|
|
83
94
|
image
|
84
95
|
end
|
85
96
|
|
86
|
-
private def get_ratio(image, width,height, min_or_max = :min)
|
97
|
+
private def get_ratio(image, width, height, min_or_max = :min)
|
87
98
|
width_ratio = width.to_f / image.x_size
|
88
99
|
height_ratio = height.to_f / image.y_size
|
89
100
|
[width_ratio, height_ratio].send min_or_max
|
data/lib/vips-process/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vips-process
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Darío Javier Cravero
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-09-
|
11
|
+
date: 2014-09-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ruby-vips
|