dragonfly_libvips 2.1.3 → 2.2.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 +5 -5
- data/CHANGELOG.md +7 -0
- data/README.md +19 -8
- data/dragonfly_libvips.gemspec +3 -3
- data/lib/dragonfly_libvips.rb +23 -0
- data/lib/dragonfly_libvips/analysers/image_properties.rb +10 -6
- data/lib/dragonfly_libvips/plugin.rb +14 -33
- data/lib/dragonfly_libvips/processors/encode.rb +25 -5
- data/lib/dragonfly_libvips/processors/extract_area.rb +39 -0
- data/lib/dragonfly_libvips/processors/rotate.rb +12 -11
- data/lib/dragonfly_libvips/processors/thumb.rb +30 -24
- data/lib/dragonfly_libvips/version.rb +1 -1
- data/samples/{landscape_beach.png → landscape_sample.png} +0 -0
- data/samples/sample.gif +0 -0
- data/samples/sample.jpg +0 -0
- data/samples/{memo.pdf → sample.pdf} +0 -0
- data/samples/{beach.png → sample.png} +0 -0
- data/samples/sample.svg +4 -0
- data/samples/sample.tif +0 -0
- data/samples/{cmyk.jpg → sample_cmyk.jpg} +0 -0
- metadata +26 -21
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 5550340dee7a433f18f190dce904f2fe02caa339677626503f05d408f9e21cd5
|
4
|
+
data.tar.gz: 2b1055e2d247034322a5a6113a7af655d7762e83f4fb22525c26578db14c65a7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6dd9e3e8cba7f60fd0eb3ee480f6362f88d1e3270d93ed2503b6ae69a4cb954a4f7994dd9fe1d7c24a7b0266361ea1c930bb2d22fa94ccf5f095b2ef2aabc897
|
7
|
+
data.tar.gz: c56578890115a8c235458b7893bcc07757c0c5422d1b73d006904032924b6fa2f450f8c2644038ac023742430ca37b9452271d405437113bfe8c96bece9ce55c
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,12 @@
|
|
1
1
|
# CHANGELOG
|
2
2
|
|
3
|
+
## 2.2.0
|
4
|
+
|
5
|
+
* add `SUPPORTED_FORMATS` and `SUPPORTED_OUTPUT_FORMATS` and raise errors when formats are not matching
|
6
|
+
* add more thorough tests for supported formats
|
7
|
+
* skip unnecessary conversion from-to same format
|
8
|
+
* add `extract_area` processor
|
9
|
+
|
3
10
|
## 2.1.3
|
4
11
|
|
5
12
|
* make sure the downcase analyser survives nil
|
data/README.md
CHANGED
@@ -46,9 +46,18 @@ Dragonfly.app.configure do
|
|
46
46
|
end
|
47
47
|
```
|
48
48
|
|
49
|
-
|
49
|
+
## Supported Formats
|
50
50
|
|
51
|
-
|
51
|
+
List of supported formats (based on your build and version of the `libvips` library) is available as:
|
52
|
+
|
53
|
+
```ruby
|
54
|
+
DragonflyLibvips::SUPPORTED_FORMATS # => ["csv", "dz", "gif", …]
|
55
|
+
DragonflyLibvips::SUPPORTED_OUTPUT_FORMATS # => ["csv", "dz", "gif", …]
|
56
|
+
```
|
57
|
+
|
58
|
+
## Processors
|
59
|
+
|
60
|
+
### Thumb
|
52
61
|
|
53
62
|
Create a thumbnail by resizing/cropping
|
54
63
|
|
@@ -66,7 +75,7 @@ Below are some examples of geometry strings for `thumb`:
|
|
66
75
|
'400x300>' # resize only if the image is larger than this
|
67
76
|
```
|
68
77
|
|
69
|
-
|
78
|
+
### Encode
|
70
79
|
|
71
80
|
Change the encoding with
|
72
81
|
|
@@ -74,13 +83,15 @@ Change the encoding with
|
|
74
83
|
image.encode('jpg')
|
75
84
|
```
|
76
85
|
|
77
|
-
|
86
|
+
### Extract Area
|
87
|
+
|
88
|
+
Extract an area from an image.
|
78
89
|
|
79
90
|
```ruby
|
80
|
-
image.
|
91
|
+
image.extract_area(x, y, width, height)
|
81
92
|
```
|
82
93
|
|
83
|
-
|
94
|
+
### Rotate
|
84
95
|
|
85
96
|
Rotate a number of degrees with
|
86
97
|
|
@@ -88,7 +99,7 @@ Rotate a number of degrees with
|
|
88
99
|
image.rotate(90)
|
89
100
|
```
|
90
101
|
|
91
|
-
|
102
|
+
### Options
|
92
103
|
|
93
104
|
All processors support `input_options` and `output_options` for passing additional options to vips. For example:
|
94
105
|
|
@@ -104,7 +115,7 @@ input_options: { access: :sequential }
|
|
104
115
|
output_options: { profile: … } # embeds 'sRGB_v4_ICC_preference.icc' profile included with this gem
|
105
116
|
```
|
106
117
|
|
107
|
-
|
118
|
+
## Analysers
|
108
119
|
|
109
120
|
The following methods are provided
|
110
121
|
|
data/dragonfly_libvips.gemspec
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
|
2
|
-
lib = File.expand_path('
|
1
|
+
|
2
|
+
lib = File.expand_path('lib', __dir__)
|
3
3
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
4
|
require 'dragonfly_libvips/version'
|
5
5
|
|
@@ -20,11 +20,11 @@ Gem::Specification.new do |spec|
|
|
20
20
|
|
21
21
|
spec.add_dependency 'dragonfly', '~> 1.0'
|
22
22
|
spec.add_dependency 'ruby-vips', '~> 2.0', '>= 2.0.6'
|
23
|
-
spec.add_dependency 'activesupport', '>= 4.0'
|
24
23
|
|
25
24
|
spec.add_development_dependency 'bundler', '~> 1.12'
|
26
25
|
spec.add_development_dependency 'guard'
|
27
26
|
spec.add_development_dependency 'guard-minitest'
|
28
27
|
spec.add_development_dependency 'minitest', '~> 5.0'
|
28
|
+
spec.add_development_dependency 'minitest-reporters'
|
29
29
|
spec.add_development_dependency 'rake', '~> 10.0'
|
30
30
|
end
|
data/lib/dragonfly_libvips.rb
CHANGED
@@ -5,6 +5,29 @@ require 'dragonfly_libvips/version'
|
|
5
5
|
require 'vips'
|
6
6
|
|
7
7
|
module DragonflyLibvips
|
8
|
+
class UnsupportedFormat < RuntimeError; end
|
9
|
+
class UnsupportedOutputormat < RuntimeError; end
|
10
|
+
|
8
11
|
CMYK_PROFILE_PATH = File.expand_path('../vendor/cmyk.icm', __dir__)
|
9
12
|
EPROFILE_PATH = File.expand_path('../vendor/sRGB_v4_ICC_preference.icc', __dir__)
|
13
|
+
|
14
|
+
SUPPORTED_FORMATS = begin
|
15
|
+
output = `vips -l | grep -i ForeignLoad`
|
16
|
+
output.scan(/\.(\w{1,4})/).flatten.sort.uniq
|
17
|
+
end
|
18
|
+
|
19
|
+
SUPPORTED_OUTPUT_FORMATS = begin
|
20
|
+
output = `vips -l | grep -i ForeignSave`
|
21
|
+
output.scan(/\.(\w{1,4})/).flatten.sort.uniq
|
22
|
+
end - %w[
|
23
|
+
csv
|
24
|
+
mat
|
25
|
+
pbm
|
26
|
+
pfm
|
27
|
+
pgm
|
28
|
+
ppm
|
29
|
+
v
|
30
|
+
vips
|
31
|
+
webp
|
32
|
+
]
|
10
33
|
end
|
@@ -6,18 +6,22 @@ module DragonflyLibvips
|
|
6
6
|
DPI = 300
|
7
7
|
|
8
8
|
def call(content)
|
9
|
+
return {} unless SUPPORTED_FORMATS.include?(content.ext)
|
10
|
+
|
9
11
|
input_options = {}
|
10
|
-
input_options[
|
11
|
-
input_options[
|
12
|
-
input_options[
|
12
|
+
input_options['access'] = 'sequential'
|
13
|
+
input_options['autorotate'] = true if content.mime_type == 'image/jpeg'
|
14
|
+
input_options['dpi'] = DPI if content.mime_type == 'application/pdf'
|
13
15
|
|
14
16
|
img = ::Vips::Image.new_from_file(content.path, input_options)
|
15
17
|
|
16
|
-
width
|
17
|
-
|
18
|
+
width = img.width
|
19
|
+
height = img.height
|
20
|
+
xres = img.xres
|
21
|
+
yres = img.yres
|
18
22
|
|
19
23
|
{
|
20
|
-
'format' => content.ext.
|
24
|
+
'format' => content.ext.to_s,
|
21
25
|
'width' => width,
|
22
26
|
'height' => height,
|
23
27
|
'xres' => xres,
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'dragonfly_libvips/analysers/image_properties'
|
2
2
|
require 'dragonfly_libvips/processors/encode'
|
3
|
+
require 'dragonfly_libvips/processors/extract_area'
|
3
4
|
require 'dragonfly_libvips/processors/rotate'
|
4
5
|
require 'dragonfly_libvips/processors/thumb'
|
5
6
|
|
@@ -9,43 +10,22 @@ module DragonflyLibvips
|
|
9
10
|
# Analysers
|
10
11
|
app.add_analyser :image_properties, DragonflyLibvips::Analysers::ImageProperties.new
|
11
12
|
|
12
|
-
|
13
|
-
|
13
|
+
%w[ width
|
14
|
+
height
|
15
|
+
xres
|
16
|
+
yres
|
17
|
+
format
|
18
|
+
].each do |name|
|
19
|
+
app.add_analyser(name) { |c| c.analyse(:image_properties)[name] }
|
14
20
|
end
|
15
21
|
|
16
|
-
app.add_analyser
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
app.add_analyser :xres do |content|
|
21
|
-
content.analyse(:image_properties)['xres']
|
22
|
-
end
|
23
|
-
|
24
|
-
app.add_analyser :yres do |content|
|
25
|
-
content.analyse(:image_properties)['yres']
|
26
|
-
end
|
27
|
-
|
28
|
-
app.add_analyser :format do |content|
|
29
|
-
content.analyse(:image_properties)['format']
|
30
|
-
end
|
31
|
-
|
32
|
-
app.add_analyser :aspect_ratio do |content|
|
33
|
-
attrs = content.analyse(:image_properties)
|
34
|
-
attrs['width'].to_f / attrs['height']
|
35
|
-
end
|
36
|
-
|
37
|
-
app.add_analyser :portrait do |content|
|
38
|
-
attrs = content.analyse(:image_properties)
|
39
|
-
attrs['width'] <= attrs['height']
|
40
|
-
end
|
41
|
-
|
42
|
-
app.add_analyser :landscape do |content|
|
43
|
-
!content.analyse(:portrait)
|
44
|
-
end
|
22
|
+
app.add_analyser(:aspect_ratio) { |c| c.analyse(:width).to_f / c.analyse(:height).to_f }
|
23
|
+
app.add_analyser(:portrait) { |c| c.analyse(:aspect_ratio) < 1.0 }
|
24
|
+
app.add_analyser(:landscape) { |c| !c.analyse(:portrait) }
|
45
25
|
|
46
|
-
app.add_analyser
|
26
|
+
app.add_analyser(:image) do |c|
|
47
27
|
begin
|
48
|
-
|
28
|
+
c.analyse(:image_properties).key?('format')
|
49
29
|
rescue ::Vips::Error
|
50
30
|
false
|
51
31
|
end
|
@@ -58,6 +38,7 @@ module DragonflyLibvips
|
|
58
38
|
|
59
39
|
# Processors
|
60
40
|
app.add_processor :encode, Processors::Encode.new
|
41
|
+
app.add_processor :extract_area, Processors::ExtractArea.new
|
61
42
|
app.add_processor :thumb, Processors::Thumb.new
|
62
43
|
app.add_processor :rotate, Processors::Rotate.new
|
63
44
|
end
|
@@ -1,10 +1,24 @@
|
|
1
|
-
require 'active_support/core_ext/hash'
|
2
|
-
|
3
1
|
module DragonflyLibvips
|
4
2
|
module Processors
|
5
3
|
class Encode
|
4
|
+
FORMATS_WITHOUT_PROFILE_SUPPORT = %w[dz webp hdr]
|
5
|
+
|
6
6
|
def call(content, format, options = {})
|
7
|
-
|
7
|
+
raise UnsupportedFormat unless SUPPORTED_FORMATS.include?(content.ext)
|
8
|
+
|
9
|
+
format = format.to_s
|
10
|
+
format = 'tif' if format == 'tiff'
|
11
|
+
format = 'jpg' if format == 'jpeg'
|
12
|
+
|
13
|
+
raise UnsupportedOutputFormat unless SUPPORTED_OUTPUT_FORMATS.include?(format)
|
14
|
+
|
15
|
+
if content.mime_type == Rack::Mime.mime_type(".#{format}")
|
16
|
+
content.ext ||= format
|
17
|
+
content.meta['format'] = format
|
18
|
+
return
|
19
|
+
end
|
20
|
+
|
21
|
+
options = options.each_with_object({}) { |(k, v), memo| memo[k.to_s] = v } # stringify keys
|
8
22
|
|
9
23
|
input_options = options.fetch('input_options', {})
|
10
24
|
output_options = options.fetch('output_options', {})
|
@@ -13,12 +27,18 @@ module DragonflyLibvips
|
|
13
27
|
if content.mime_type == 'image/jpeg'
|
14
28
|
input_options['autorotate'] = true unless input_options.has_key?('autorotate')
|
15
29
|
end
|
16
|
-
|
30
|
+
|
31
|
+
output_options['profile'] ||= EPROFILE_PATH
|
32
|
+
output_options.delete('profile') if FORMATS_WITHOUT_PROFILE_SUPPORT.include?(format)
|
17
33
|
|
18
34
|
require 'vips'
|
19
35
|
img = ::Vips::Image.new_from_file(content.path, input_options)
|
20
36
|
|
21
|
-
content.update(
|
37
|
+
content.update(
|
38
|
+
img.write_to_buffer(".#{format}", output_options),
|
39
|
+
'name' => "temp.#{format}",
|
40
|
+
'format' => format
|
41
|
+
)
|
22
42
|
content.ext = format
|
23
43
|
end
|
24
44
|
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module DragonflyLibvips
|
2
|
+
module Processors
|
3
|
+
class ExtractArea
|
4
|
+
def call(content, x, y, width, height, options = {})
|
5
|
+
raise UnsupportedFormat unless SUPPORTED_FORMATS.include?(content.ext)
|
6
|
+
|
7
|
+
options = options.each_with_object({}) { |(k, v), memo| memo[k.to_s] = v } # stringify keys
|
8
|
+
format = options.fetch('format', content.ext)
|
9
|
+
|
10
|
+
input_options = options.fetch('input_options', {})
|
11
|
+
output_options = options.fetch('output_options', {})
|
12
|
+
|
13
|
+
# input_options['access'] ||= 'sequential'
|
14
|
+
if content.mime_type == 'image/jpeg'
|
15
|
+
input_options['autorotate'] = true unless input_options.has_key?('autorotate')
|
16
|
+
end
|
17
|
+
output_options['profile'] ||= EPROFILE_PATH
|
18
|
+
|
19
|
+
require 'vips'
|
20
|
+
img = ::Vips::Image.new_from_file(content.path, input_options)
|
21
|
+
|
22
|
+
img = img.extract_area(x, y, width, height)
|
23
|
+
|
24
|
+
content.update(
|
25
|
+
img.write_to_buffer(".#{format}", output_options),
|
26
|
+
'name' => "temp.#{format}",
|
27
|
+
'format' => format
|
28
|
+
)
|
29
|
+
content.ext = format
|
30
|
+
end
|
31
|
+
|
32
|
+
def update_url(url_attributes, _, _, _, _, options = {})
|
33
|
+
options = options.each_with_object({}) { |(k, v), memo| memo[k.to_s] = v } # stringify keys
|
34
|
+
return unless format = options.fetch('format', nil)
|
35
|
+
url_attributes.ext = format
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -1,37 +1,38 @@
|
|
1
|
-
require 'active_support/core_ext/hash'
|
2
|
-
|
3
1
|
module DragonflyLibvips
|
4
2
|
module Processors
|
5
3
|
class Rotate
|
6
4
|
def call(content, rotate, options = {})
|
7
|
-
|
5
|
+
raise UnsupportedFormat unless SUPPORTED_FORMATS.include?(content.ext)
|
8
6
|
|
7
|
+
options = options.each_with_object({}) { |(k, v), memo| memo[k.to_s] = v } # stringify keys
|
9
8
|
format = options.fetch('format', content.ext)
|
10
9
|
|
11
10
|
input_options = options.fetch('input_options', {})
|
12
11
|
output_options = options.fetch('output_options', {})
|
13
12
|
|
14
|
-
input_options['access'] ||= 'sequential'
|
13
|
+
# input_options['access'] ||= 'sequential'
|
15
14
|
if content.mime_type == 'image/jpeg'
|
16
15
|
input_options['autorotate'] = true unless input_options.has_key?('autorotate')
|
17
16
|
end
|
18
|
-
output_options['profile'] ||=
|
17
|
+
output_options['profile'] ||= EPROFILE_PATH
|
19
18
|
|
20
19
|
require 'vips'
|
21
20
|
img = ::Vips::Image.new_from_file(content.path, input_options)
|
22
21
|
|
23
22
|
img = img.rot("d#{rotate}")
|
24
23
|
|
25
|
-
content.update(
|
24
|
+
content.update(
|
25
|
+
img.write_to_buffer(".#{format}", output_options),
|
26
|
+
'name' => "temp.#{format}",
|
27
|
+
'format' => format
|
28
|
+
)
|
26
29
|
content.ext = format
|
27
30
|
end
|
28
31
|
|
29
32
|
def update_url(url_attributes, _, options = {})
|
30
|
-
options = options.
|
31
|
-
|
32
|
-
|
33
|
-
url_attributes.ext = format
|
34
|
-
end
|
33
|
+
options = options.each_with_object({}) { |(k, v), memo| memo[k.to_s] = v } # stringify keys
|
34
|
+
return unless format = options.fetch('format', nil)
|
35
|
+
url_attributes.ext = format
|
35
36
|
end
|
36
37
|
end
|
37
38
|
end
|
@@ -1,4 +1,3 @@
|
|
1
|
-
require 'active_support/core_ext/hash'
|
2
1
|
require 'dragonfly_libvips/dimensions'
|
3
2
|
require 'vips'
|
4
3
|
|
@@ -10,56 +9,63 @@ module DragonflyLibvips
|
|
10
9
|
DPI = 300
|
11
10
|
|
12
11
|
def call(content, geometry, options = {})
|
13
|
-
|
12
|
+
raise UnsupportedFormat unless SUPPORTED_FORMATS.include?(content.ext)
|
13
|
+
|
14
|
+
options = options.each_with_object({}) { |(k, v), memo| memo[k.to_s] = v } # stringify keys
|
14
15
|
|
15
16
|
filename = content.path
|
16
|
-
format = options.fetch(
|
17
|
+
format = options.fetch('format', content.ext).to_s
|
17
18
|
|
18
|
-
input_options = options.fetch(
|
19
|
-
input_options[
|
20
|
-
input_options[
|
19
|
+
input_options = options.fetch('input_options', {})
|
20
|
+
input_options['access'] = input_options.fetch('access', 'sequential')
|
21
|
+
input_options['autorotate'] = input_options.fetch('autorotate', true) if content.mime_type == 'image/jpeg'
|
21
22
|
|
22
23
|
if content.mime_type == 'application/pdf'
|
23
|
-
input_options[
|
24
|
-
input_options[
|
24
|
+
input_options['dpi'] = input_options.fetch('dpi', DPI) if content.mime_type == 'application/pdf'
|
25
|
+
input_options['page'] = input_options.fetch('page', 0) if content.mime_type == 'application/pdf'
|
25
26
|
else
|
26
|
-
input_options.delete(
|
27
|
-
input_options.delete(
|
27
|
+
input_options.delete('page')
|
28
|
+
input_options.delete('dpi')
|
28
29
|
end
|
29
30
|
|
30
|
-
output_options = options.fetch(
|
31
|
-
output_options[
|
31
|
+
output_options = options.fetch('output_options', {})
|
32
|
+
output_options['profile'] = input_options.fetch('profile', EPROFILE_PATH)
|
32
33
|
|
34
|
+
input_options = input_options.each_with_object({}) { |(k, v), memo| memo[k.to_sym] = v } # symbolize
|
33
35
|
img = ::Vips::Image.new_from_file(filename, input_options)
|
34
36
|
|
35
37
|
dimensions = case geometry
|
36
|
-
when RESIZE_GEOMETRY then
|
38
|
+
when RESIZE_GEOMETRY then Dimensions.call(geometry, img.width, img.height)
|
37
39
|
else raise ArgumentError, "Didn't recognise the geometry string: #{geometry}"
|
38
40
|
end
|
39
41
|
|
40
|
-
thumbnail_options = options.fetch(
|
41
|
-
thumbnail_options[
|
42
|
-
thumbnail_options[
|
43
|
-
thumbnail_options[
|
44
|
-
thumbnail_options[
|
42
|
+
thumbnail_options = options.fetch('thumbnail_options', {})
|
43
|
+
thumbnail_options['auto_rotate'] = input_options.fetch('autorotate', true) if content.mime_type == 'image/jpeg'
|
44
|
+
thumbnail_options['height'] = thumbnail_options.fetch('height', dimensions.height.ceil)
|
45
|
+
thumbnail_options['import_profile'] = CMYK_PROFILE_PATH if img.get('interpretation') == :cmyk
|
46
|
+
thumbnail_options['size'] ||= case geometry
|
45
47
|
when />\z/ then :down # do_not_resize_if_image_smaller_than_requested
|
46
48
|
when /<\z/ then :up # do_not_resize_if_image_larger_than_requested
|
47
49
|
else :both
|
48
50
|
end
|
49
51
|
|
50
52
|
filename += "[page=#{input_options[:page]}]" if content.mime_type == 'application/pdf'
|
53
|
+
|
54
|
+
thumbnail_options = thumbnail_options.each_with_object({}) { |(k, v), memo| memo[k.to_sym] = v } # symbolize
|
51
55
|
thumb = ::Vips::Image.thumbnail(filename, dimensions.width.ceil, thumbnail_options)
|
52
56
|
|
53
|
-
content.update(
|
57
|
+
content.update(
|
58
|
+
thumb.write_to_buffer(".#{format}", output_options),
|
59
|
+
'name' => "temp.#{format}",
|
60
|
+
'format' => format
|
61
|
+
)
|
54
62
|
content.ext = format
|
55
63
|
end
|
56
64
|
|
57
65
|
def update_url(url_attributes, _, options = {})
|
58
|
-
options = options.
|
59
|
-
|
60
|
-
|
61
|
-
url_attributes.ext = format
|
62
|
-
end
|
66
|
+
options = options.each_with_object({}) { |(k, v), memo| memo[k.to_s] = v } # stringify keys
|
67
|
+
return unless format = options.fetch('format', nil)
|
68
|
+
url_attributes.ext = format
|
63
69
|
end
|
64
70
|
end
|
65
71
|
end
|
File without changes
|
data/samples/sample.gif
ADDED
Binary file
|
data/samples/sample.jpg
ADDED
Binary file
|
File without changes
|
File without changes
|
data/samples/sample.svg
ADDED
data/samples/sample.tif
ADDED
Binary file
|
File without changes
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dragonfly_libvips
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tomas Celizna
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-07-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: dragonfly
|
@@ -44,20 +44,6 @@ dependencies:
|
|
44
44
|
- - ">="
|
45
45
|
- !ruby/object:Gem::Version
|
46
46
|
version: 2.0.6
|
47
|
-
- !ruby/object:Gem::Dependency
|
48
|
-
name: activesupport
|
49
|
-
requirement: !ruby/object:Gem::Requirement
|
50
|
-
requirements:
|
51
|
-
- - ">="
|
52
|
-
- !ruby/object:Gem::Version
|
53
|
-
version: '4.0'
|
54
|
-
type: :runtime
|
55
|
-
prerelease: false
|
56
|
-
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
requirements:
|
58
|
-
- - ">="
|
59
|
-
- !ruby/object:Gem::Version
|
60
|
-
version: '4.0'
|
61
47
|
- !ruby/object:Gem::Dependency
|
62
48
|
name: bundler
|
63
49
|
requirement: !ruby/object:Gem::Requirement
|
@@ -114,6 +100,20 @@ dependencies:
|
|
114
100
|
- - "~>"
|
115
101
|
- !ruby/object:Gem::Version
|
116
102
|
version: '5.0'
|
103
|
+
- !ruby/object:Gem::Dependency
|
104
|
+
name: minitest-reporters
|
105
|
+
requirement: !ruby/object:Gem::Requirement
|
106
|
+
requirements:
|
107
|
+
- - ">="
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
110
|
+
type: :development
|
111
|
+
prerelease: false
|
112
|
+
version_requirements: !ruby/object:Gem::Requirement
|
113
|
+
requirements:
|
114
|
+
- - ">="
|
115
|
+
- !ruby/object:Gem::Version
|
116
|
+
version: '0'
|
117
117
|
- !ruby/object:Gem::Dependency
|
118
118
|
name: rake
|
119
119
|
requirement: !ruby/object:Gem::Requirement
|
@@ -151,13 +151,18 @@ files:
|
|
151
151
|
- lib/dragonfly_libvips/dimensions.rb
|
152
152
|
- lib/dragonfly_libvips/plugin.rb
|
153
153
|
- lib/dragonfly_libvips/processors/encode.rb
|
154
|
+
- lib/dragonfly_libvips/processors/extract_area.rb
|
154
155
|
- lib/dragonfly_libvips/processors/rotate.rb
|
155
156
|
- lib/dragonfly_libvips/processors/thumb.rb
|
156
157
|
- lib/dragonfly_libvips/version.rb
|
157
|
-
- samples/
|
158
|
-
- samples/
|
159
|
-
- samples/
|
160
|
-
- samples/
|
158
|
+
- samples/landscape_sample.png
|
159
|
+
- samples/sample.gif
|
160
|
+
- samples/sample.jpg
|
161
|
+
- samples/sample.pdf
|
162
|
+
- samples/sample.png
|
163
|
+
- samples/sample.svg
|
164
|
+
- samples/sample.tif
|
165
|
+
- samples/sample_cmyk.jpg
|
161
166
|
- samples/white pixel.png
|
162
167
|
- vendor/cmyk.icm
|
163
168
|
- vendor/sRGB_v4_ICC_preference.icc
|
@@ -181,7 +186,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
181
186
|
version: '0'
|
182
187
|
requirements: []
|
183
188
|
rubyforge_project:
|
184
|
-
rubygems_version: 2.
|
189
|
+
rubygems_version: 2.7.6
|
185
190
|
signing_key:
|
186
191
|
specification_version: 4
|
187
192
|
summary: Dragonfly analysers and processors for libvips image processing library.
|