riiif 1.2.0 → 1.3.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/app/controllers/riiif/images_controller.rb +2 -2
- data/app/models/riiif/file.rb +7 -15
- data/app/services/riiif/imagemagick_command_factory.rb +52 -0
- data/lib/riiif/version.rb +1 -1
- data/spec/models/riiif/image_spec.rb +1 -1
- data/spec/services/riiif/imagemagick_command_factory_spec.rb +27 -0
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6b8dc5c1ffd5532b680b26ff6958a02261700d3e
|
4
|
+
data.tar.gz: 7719e41b21ee91d52eefe4cd5347fb87db25b47c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 453bd022c4fb48291f987625db7c22d6709a7997bb26d9123da975b6ab7537776d847a7d618369788e3e756e08770a99aa29496126540a75a9ed1516b0666814
|
7
|
+
data.tar.gz: 1b96e14965119ee2454f3a44a144b572643af01a00616eff0e5b76fd1a604b1b58ed6f2185d02c33ba811cd8975baa9c8f68ab9c09c2a4139fe4d8e520810342
|
@@ -23,7 +23,7 @@ module Riiif
|
|
23
23
|
data = image.render(image_request_params)
|
24
24
|
headers['Access-Control-Allow-Origin'] = '*'
|
25
25
|
# Set a Cache-Control header
|
26
|
-
expires_in cache_expires, public:
|
26
|
+
expires_in cache_expires, public: public_cache? if status == :ok
|
27
27
|
send_data data,
|
28
28
|
status: status,
|
29
29
|
type: Mime::Type.lookup_by_extension(params[:format]),
|
@@ -35,7 +35,7 @@ module Riiif
|
|
35
35
|
if authorization_service.can?(:info, image)
|
36
36
|
headers['Access-Control-Allow-Origin'] = '*'
|
37
37
|
# Set a Cache-Control header
|
38
|
-
expires_in cache_expires, public:
|
38
|
+
expires_in cache_expires, public: public_cache?
|
39
39
|
render json: image.info.to_h.merge(server_info), content_type: 'application/ld+json'
|
40
40
|
else
|
41
41
|
render json: { error: 'unauthorized' }, status: :unauthorized
|
data/app/models/riiif/file.rb
CHANGED
@@ -33,21 +33,7 @@ module Riiif
|
|
33
33
|
|
34
34
|
# @param [Transformation] transformation
|
35
35
|
def extract(transformation)
|
36
|
-
command =
|
37
|
-
command << " -crop #{transformation.crop}" if transformation.crop
|
38
|
-
command << " -resize #{transformation.size}" if transformation.size
|
39
|
-
if transformation.rotation
|
40
|
-
command << " -virtual-pixel white +distort srt #{transformation.rotation}"
|
41
|
-
end
|
42
|
-
|
43
|
-
case transformation.quality
|
44
|
-
when 'grey'
|
45
|
-
command << ' -colorspace Gray'
|
46
|
-
when 'bitonal'
|
47
|
-
command << ' -colorspace Gray'
|
48
|
-
command << ' -type Bilevel'
|
49
|
-
end
|
50
|
-
command << " #{path} #{transformation.format}:-"
|
36
|
+
command = command_factory.build(path, transformation)
|
51
37
|
execute(command)
|
52
38
|
end
|
53
39
|
|
@@ -57,5 +43,11 @@ module Riiif
|
|
57
43
|
|
58
44
|
delegate :execute, to: Riiif::CommandRunner
|
59
45
|
private :execute
|
46
|
+
|
47
|
+
private
|
48
|
+
|
49
|
+
def command_factory
|
50
|
+
ImagemagickCommandFactory
|
51
|
+
end
|
60
52
|
end
|
61
53
|
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
module Riiif
|
2
|
+
# Builds a command to run a transformation using Imagemagick
|
3
|
+
class ImagemagickCommandFactory
|
4
|
+
# A helper method to instantiate and invoke build
|
5
|
+
# @param [String] path the location of the file
|
6
|
+
# @param [Transformation] transformation
|
7
|
+
# @param [Integer] compression (85) the compression level to use (set 0 for no compression)
|
8
|
+
# @return [String] a command for running imagemagick to produce the requested output
|
9
|
+
def self.build(path, transformation, compression: 85)
|
10
|
+
new(path, transformation, compression: compression).build
|
11
|
+
end
|
12
|
+
|
13
|
+
# A helper method to instantiate and invoke build
|
14
|
+
# @param [String] path the location of the file
|
15
|
+
# @param [Transformation] transformation
|
16
|
+
# @param [Integer] compression the compression level to use (set 0 for no compression)
|
17
|
+
def initialize(path, transformation, compression:)
|
18
|
+
@path = path
|
19
|
+
@transformation = transformation
|
20
|
+
@compression = compression
|
21
|
+
end
|
22
|
+
|
23
|
+
attr_reader :path, :transformation, :compression
|
24
|
+
|
25
|
+
# @return [String] a command for running imagemagick to produce the requested output
|
26
|
+
def build
|
27
|
+
command = 'convert'
|
28
|
+
command << " -crop #{transformation.crop}" if transformation.crop
|
29
|
+
command << " -resize #{transformation.size}" if transformation.size
|
30
|
+
if transformation.rotation
|
31
|
+
command << " -virtual-pixel white +distort srt #{transformation.rotation}"
|
32
|
+
end
|
33
|
+
|
34
|
+
case transformation.quality
|
35
|
+
when 'grey'
|
36
|
+
command << ' -colorspace Gray'
|
37
|
+
when 'bitonal'
|
38
|
+
command << ' -colorspace Gray'
|
39
|
+
command << ' -type Bilevel'
|
40
|
+
end
|
41
|
+
command << " -quality #{compression}" if use_compression?
|
42
|
+
command << " #{path} #{transformation.format}:-"
|
43
|
+
command
|
44
|
+
end
|
45
|
+
|
46
|
+
private
|
47
|
+
|
48
|
+
def use_compression?
|
49
|
+
compression > 0 && transformation.format == 'jpg'
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
data/lib/riiif/version.rb
CHANGED
@@ -6,7 +6,7 @@ RSpec.describe Riiif::Image do
|
|
6
6
|
subject { described_class.new('world') }
|
7
7
|
describe 'happy path' do
|
8
8
|
before do
|
9
|
-
expect(subject.image).to receive(:execute).with("convert #{filename} jpg:-").and_return('imagedata')
|
9
|
+
expect(subject.image).to receive(:execute).with("convert -quality 85 #{filename} jpg:-").and_return('imagedata')
|
10
10
|
end
|
11
11
|
it 'renders' do
|
12
12
|
expect(subject.render('size' => 'full', format: 'jpg')).to eq 'imagedata'
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe Riiif::ImagemagickCommandFactory do
|
4
|
+
let(:path) { 'foo.tiff' }
|
5
|
+
|
6
|
+
describe '.build' do
|
7
|
+
subject { described_class.build(path, transformation) }
|
8
|
+
|
9
|
+
let(:transformation) do
|
10
|
+
Riiif::Transformation.new('region',
|
11
|
+
'size',
|
12
|
+
'quality',
|
13
|
+
'rotation',
|
14
|
+
format)
|
15
|
+
end
|
16
|
+
|
17
|
+
context "when it's a jpeg" do
|
18
|
+
let(:format) { 'jpg' }
|
19
|
+
it { is_expected.to match(/-quality 85/) }
|
20
|
+
end
|
21
|
+
|
22
|
+
context "when it's a tiff" do
|
23
|
+
let(:format) { 'tif' }
|
24
|
+
it { is_expected.not_to match(/-quality/) }
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: riiif
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Justin Coyne
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-04-
|
11
|
+
date: 2017-04-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: railties
|
@@ -150,6 +150,7 @@ files:
|
|
150
150
|
- app/models/riiif/image.rb
|
151
151
|
- app/services/riiif/command_runner.rb
|
152
152
|
- app/services/riiif/image_magick_info_extractor.rb
|
153
|
+
- app/services/riiif/imagemagick_command_factory.rb
|
153
154
|
- app/services/riiif/region/imagemagick/absolute_decoder.rb
|
154
155
|
- app/services/riiif/region/imagemagick/full_decoder.rb
|
155
156
|
- app/services/riiif/region/imagemagick/percentage_decoder.rb
|
@@ -179,6 +180,7 @@ files:
|
|
179
180
|
- spec/models/riiif/image_spec.rb
|
180
181
|
- spec/routing/redirect_spec.rb
|
181
182
|
- spec/routing/resize_routes_spec.rb
|
183
|
+
- spec/services/riiif/imagemagick_command_factory_spec.rb
|
182
184
|
- spec/spec_helper.rb
|
183
185
|
- spec/test_app_templates/Gemfile.extra
|
184
186
|
- spec/test_app_templates/lib/generators/test_app_generator.rb
|
@@ -214,6 +216,7 @@ test_files:
|
|
214
216
|
- spec/models/riiif/image_spec.rb
|
215
217
|
- spec/routing/redirect_spec.rb
|
216
218
|
- spec/routing/resize_routes_spec.rb
|
219
|
+
- spec/services/riiif/imagemagick_command_factory_spec.rb
|
217
220
|
- spec/spec_helper.rb
|
218
221
|
- spec/test_app_templates/Gemfile.extra
|
219
222
|
- spec/test_app_templates/lib/generators/test_app_generator.rb
|