libis-format 1.2.8 → 1.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +2 -0
- data/data/types.yml +1 -1
- data/lib/libis/format/command_line.rb +2 -3
- data/lib/libis/format/config.rb +18 -19
- data/lib/libis/format/converter/base.rb +9 -16
- data/lib/libis/format/converter/chain.rb +36 -28
- data/lib/libis/format/converter/email_converter.rb +5 -8
- data/lib/libis/format/converter/fop_pdf_converter.rb +4 -6
- data/lib/libis/format/converter/image_converter.rb +51 -58
- data/lib/libis/format/converter/jp2_converter.rb +33 -35
- data/lib/libis/format/converter/office_converter.rb +19 -23
- data/lib/libis/format/converter/pdf_converter.rb +22 -28
- data/lib/libis/format/converter/repository.rb +7 -13
- data/lib/libis/format/converter/spreadsheet_converter.rb +7 -11
- data/lib/libis/format/converter/video_converter.rb +41 -55
- data/lib/libis/format/converter/xslt_converter.rb +14 -13
- data/lib/libis/format/converter.rb +1 -1
- data/lib/libis/format/identifier.rb +41 -43
- data/lib/libis/format/tool/droid.rb +29 -30
- data/lib/libis/format/tool/ff_mpeg.rb +11 -13
- data/lib/libis/format/tool/fido.rb +1 -1
- data/lib/libis/format/tool/pdf_copy.rb +17 -18
- data/lib/libis/format/tool/pdf_merge.rb +17 -17
- data/lib/libis/format/tool/pdf_optimizer.rb +18 -20
- data/lib/libis/format/tool/spreadsheet_to_ods.rb +23 -20
- data/lib/libis/format/tool.rb +2 -2
- data/lib/libis/format/type_database.rb +51 -28
- data/lib/libis/format/type_database_impl.rb +57 -24
- data/lib/libis/format/version.rb +1 -1
- data/lib/libis/format.rb +3 -2
- data/lib/libis-format.rb +2 -0
- data/libis-format.gemspec +1 -1
- metadata +17 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b8282db4cf37eea292436474d401bcc2725c31eaa1eb882ea9475be14912f6c9
|
4
|
+
data.tar.gz: 6eaf1dfe05d24bd0df1ad20f61137a4007f02828b97138601c87afc5215d7454
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8a242dc0d21da39ec434a7e2f59b2d8ff3c57e427512909c792bce05de5a29a03fdc726484059f13dc0b931f4ec2be13e75dc06f0e06b8736d77c541fd6aeb7e
|
7
|
+
data.tar.gz: 34a6d942f8fc39392528d03e5d367d8d476c58da12424ba5a8a87b4cf749a85ca485dba6ee1741dd5b865a25aaa57d562c1b97d96f03af83a5485f4c142dcdeb
|
data/Gemfile
CHANGED
data/data/types.yml
CHANGED
@@ -377,7 +377,7 @@ PRESENTATION:
|
|
377
377
|
|
378
378
|
OO_IMPRESS:
|
379
379
|
NAME: OpenDocument Presentation (ODP)
|
380
|
-
|
380
|
+
PUID: fmt/138 fmt/292 fmt/293
|
381
381
|
MIME: application/vnd.oasis.opendocument.presentation application/vnd.oasis.opendocument.presentation-template
|
382
382
|
EXTENSIONS: odp otp
|
383
383
|
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'thor'
|
2
4
|
require 'tty-prompt'
|
3
5
|
require 'tty-config'
|
@@ -7,9 +9,7 @@ require 'libis/format/cli/format'
|
|
7
9
|
|
8
10
|
module Libis
|
9
11
|
module Format
|
10
|
-
|
11
12
|
class CommandLine < Thor
|
12
|
-
|
13
13
|
def self.exit_on_failure?
|
14
14
|
true
|
15
15
|
end
|
@@ -20,6 +20,5 @@ module Libis
|
|
20
20
|
desc 'format', 'perform format identification on a given file or directory'
|
21
21
|
subcommand 'format', Cli::Format
|
22
22
|
end
|
23
|
-
|
24
23
|
end
|
25
24
|
end
|
data/lib/libis/format/config.rb
CHANGED
@@ -1,10 +1,10 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require 'os'
|
3
4
|
require 'libis-tools'
|
4
5
|
|
5
6
|
module Libis
|
6
7
|
module Format
|
7
|
-
|
8
8
|
Config = ::Libis::Tools::Config
|
9
9
|
|
10
10
|
Config[:converter_chain_max_level] = 8
|
@@ -15,10 +15,10 @@ module Libis
|
|
15
15
|
Config[:ghostscript_cmd] = 'gs'
|
16
16
|
Config[:droid_cmd] = '/opt/droid/droid.sh'
|
17
17
|
Config[:droid_temp_path] = '/tmp'
|
18
|
-
Config[:fido_cmd] = '
|
18
|
+
Config[:fido_cmd] = 'fido'
|
19
19
|
Config[:fop_jar] = File.join(Libis::Format::TOOL_DIR, 'fop', 'build', 'fop.jar')
|
20
20
|
Config[:ffmpeg_cmd] = 'ffmpeg'
|
21
|
-
Config[:fido_formats] = [
|
21
|
+
Config[:fido_formats] = [File.join(Libis::Format::DATA_DIR, 'lias_formats.xml')]
|
22
22
|
Config[:pdf_tool] = File.join(Libis::Format::TOOL_DIR, 'PdfTool.jar')
|
23
23
|
Config[:preflight_jar] = File.join(Libis::Format::TOOL_DIR, 'pdfbox', 'preflight-app-2.0.13.jar')
|
24
24
|
Config[:wkhtmltopdf] = 'wkhtmltopdf'
|
@@ -27,21 +27,20 @@ module Libis
|
|
27
27
|
Config[:raw_audio_convert_cmd] = 'sox -V1 %s -e signed -b 16 -t wav %s rate %d channels %d'
|
28
28
|
Config[:watermark_font] = '/usr/share/fonts/truetype/liberation/LiberationSans-Regular.ttf'
|
29
29
|
Config[:timeouts] = {
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
30
|
+
droid: 20 * 60,
|
31
|
+
ffmpeg: 5 * 60,
|
32
|
+
fido: 20 * 60,
|
33
|
+
file_tool: 5 * 60,
|
34
|
+
fop: 5 * 60,
|
35
|
+
identification_tool: 5 * 60,
|
36
|
+
office_to_pdf: 5 * 60,
|
37
|
+
email2pdf: 5 * 60,
|
38
|
+
pdf_copy: 5 * 60,
|
39
|
+
pdf_merge: 5 * 60,
|
40
|
+
pdf_optimizer: 5 * 60,
|
41
|
+
pdf_split: 5 * 60,
|
42
|
+
pdf_to_pdfa: 5 * 60,
|
43
|
+
pdfa_validator: 5 * 60
|
44
44
|
}
|
45
|
-
|
46
45
|
end
|
47
46
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
3
|
### require 'tools/string'
|
4
4
|
require 'tmpdir'
|
@@ -11,7 +11,6 @@ require_relative 'repository'
|
|
11
11
|
module Libis
|
12
12
|
module Format
|
13
13
|
module Converter
|
14
|
-
|
15
14
|
class Base
|
16
15
|
include Libis::Tools::Logger
|
17
16
|
|
@@ -22,7 +21,7 @@ module Libis
|
|
22
21
|
@flags = {}
|
23
22
|
end
|
24
23
|
|
25
|
-
def convert(source,
|
24
|
+
def convert(source, _target, _format, opts = {})
|
26
25
|
unless File.exist? source
|
27
26
|
error "Cannot find file '#{source}'."
|
28
27
|
return nil
|
@@ -32,35 +31,33 @@ module Libis
|
|
32
31
|
end
|
33
32
|
|
34
33
|
def self.input_types
|
35
|
-
raise
|
34
|
+
raise 'Method #input_types needs to be overridden in converter'
|
36
35
|
end
|
37
36
|
|
38
37
|
def self.output_types(_format = nil)
|
39
|
-
raise
|
38
|
+
raise 'Method #output_types needs to be overridden in converter'
|
40
39
|
end
|
41
40
|
|
42
41
|
def using_temp(target, &block)
|
43
42
|
self.class.using_temp(target, &block)
|
44
43
|
end
|
45
44
|
|
46
|
-
def
|
45
|
+
def self.using_temp(target)
|
47
46
|
tempfile = Tools::TempFile.name("convert-#{File.basename(target, '.*').gsub(/\s/, '_')}", File.extname(target))
|
48
47
|
result = yield tempfile
|
49
48
|
return nil unless result
|
49
|
+
|
50
50
|
FileUtils.move result, target
|
51
51
|
target
|
52
52
|
end
|
53
53
|
|
54
|
-
def
|
55
|
-
|
54
|
+
def self.inherited(klass) # rubocop:disable Lint/MissingSuper
|
56
55
|
Repository.register klass
|
57
56
|
|
58
57
|
class << self
|
59
|
-
|
60
58
|
def conversions
|
61
|
-
input_types.
|
59
|
+
input_types.each_with_object({}) do |input_type, hash|
|
62
60
|
hash[input_type] = output_types
|
63
|
-
hash
|
64
61
|
end
|
65
62
|
end
|
66
63
|
|
@@ -83,7 +80,7 @@ module Libis
|
|
83
80
|
end
|
84
81
|
|
85
82
|
def conversion?(input_type, output_type)
|
86
|
-
conversions[input_type]
|
83
|
+
conversions[input_type]&.any? { |t| t == output_type }
|
87
84
|
end
|
88
85
|
|
89
86
|
def output_for(input_type)
|
@@ -93,13 +90,9 @@ module Libis
|
|
93
90
|
def extension?(extension)
|
94
91
|
!TypeDatabase.ext_types(extension).first.nil?
|
95
92
|
end
|
96
|
-
|
97
93
|
end
|
98
|
-
|
99
94
|
end
|
100
|
-
|
101
95
|
end
|
102
|
-
|
103
96
|
end
|
104
97
|
end
|
105
98
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'fileutils'
|
4
4
|
require 'deep_dive'
|
@@ -10,7 +10,6 @@ require 'libis/format/type_database'
|
|
10
10
|
module Libis
|
11
11
|
module Format
|
12
12
|
module Converter
|
13
|
-
|
14
13
|
class Chain
|
15
14
|
include ::Libis::Tools::Logger
|
16
15
|
include DeepDive
|
@@ -26,15 +25,16 @@ module Libis
|
|
26
25
|
# @return [Array[Hash]]
|
27
26
|
def append(converter)
|
28
27
|
return [] unless converter
|
28
|
+
|
29
29
|
valid_chain_nodes(converter).map do |node|
|
30
|
-
|
30
|
+
ddup.add_chain_node(node)
|
31
31
|
end.compact
|
32
32
|
end
|
33
33
|
|
34
34
|
def closed?
|
35
35
|
!@converter_chain.empty? &&
|
36
|
-
|
37
|
-
|
36
|
+
@converter_chain.first[:input].to_sym == @source_format &&
|
37
|
+
@converter_chain.last[:output].to_sym == @target_format
|
38
38
|
end
|
39
39
|
|
40
40
|
def valid?
|
@@ -49,19 +49,14 @@ module Libis
|
|
49
49
|
@converter_chain.size
|
50
50
|
end
|
51
51
|
|
52
|
-
|
52
|
+
alias length size
|
53
53
|
|
54
54
|
def to_s
|
55
|
-
|
56
|
-
|
57
|
-
"(#{node[:operations].each do |operation|
|
58
|
-
"#{operation[:method]}:#{operation[:argument]}"
|
59
|
-
end.join(',')})"}->-#{node[:output]}"
|
60
|
-
end.join('->-')}"
|
55
|
+
result = @source_format.to_s
|
56
|
+
result << @converter_chain.map { |node| node_to_s(node) }.join('->-')
|
61
57
|
end
|
62
58
|
|
63
59
|
def convert(src_file, target_file)
|
64
|
-
|
65
60
|
unless valid?
|
66
61
|
error 'Converter chain is not valid'
|
67
62
|
return nil
|
@@ -74,15 +69,13 @@ module Libis
|
|
74
69
|
|
75
70
|
# noinspection RubyParenthesesAroundConditionInspection
|
76
71
|
conversion_success = @converter_chain.each_with_index do |node, i|
|
77
|
-
|
78
72
|
target_type = node[:output]
|
79
73
|
converter_class = node[:converter]
|
80
74
|
converter = converter_class.new
|
81
75
|
|
82
|
-
|
83
|
-
node[:operations].each do |operation|
|
76
|
+
node[:operations]&.each do |operation|
|
84
77
|
converter.send operation[:method], operation[:argument]
|
85
|
-
end
|
78
|
+
end
|
86
79
|
|
87
80
|
target = target_file
|
88
81
|
|
@@ -103,7 +96,6 @@ module Libis
|
|
103
96
|
result[:commands] << r.merge(converter: converter_class.name)
|
104
97
|
|
105
98
|
:success
|
106
|
-
|
107
99
|
end
|
108
100
|
|
109
101
|
result[:files] = [src_file] + xtra_files
|
@@ -113,16 +105,20 @@ module Libis
|
|
113
105
|
end
|
114
106
|
|
115
107
|
conversion_success == :failed ? nil : result
|
116
|
-
|
117
108
|
end
|
118
109
|
|
119
110
|
def valid_chain_nodes(converter)
|
120
|
-
source_format =
|
111
|
+
source_format = begin
|
112
|
+
@converter_chain.last[:output]
|
113
|
+
rescue StandardError
|
114
|
+
@source_format
|
115
|
+
end
|
121
116
|
nodes = []
|
122
117
|
if converter.input_types.include? source_format
|
123
118
|
converter.output_types(source_format).each do |format|
|
124
|
-
node = {
|
119
|
+
node = { converter:, input: source_format, output: format }
|
125
120
|
next if node_exists?(node)
|
121
|
+
|
126
122
|
nodes << node
|
127
123
|
end
|
128
124
|
end
|
@@ -137,6 +133,7 @@ module Libis
|
|
137
133
|
return nil unless node[:output] && node[:converter].output_types(source_format).include?(node[:output])
|
138
134
|
return nil unless node[:converter].input_types.include? source_format
|
139
135
|
return nil if node_exists?(node)
|
136
|
+
|
140
137
|
@converter_chain << node
|
141
138
|
# debug "Chain: #{self}"
|
142
139
|
self
|
@@ -145,15 +142,16 @@ module Libis
|
|
145
142
|
def apply_operations
|
146
143
|
temp_chain = @converter_chain.reverse.ddup
|
147
144
|
applied = true
|
148
|
-
operations = @operations
|
145
|
+
operations = @operations&.ddup || {}
|
149
146
|
while (operation = operations.shift)
|
150
147
|
method = operation.first.to_s.to_sym
|
151
|
-
applied &&=
|
148
|
+
applied &&= temp_chain.each do |node|
|
152
149
|
next unless node[:converter].instance_methods.include?(method)
|
150
|
+
|
153
151
|
node[:operations] ||= []
|
154
|
-
node[:operations] << {
|
152
|
+
node[:operations] << { method:, argument: operation.last }
|
155
153
|
break :found
|
156
|
-
end
|
154
|
+
end == :found
|
157
155
|
end
|
158
156
|
if applied && operations.empty?
|
159
157
|
@converter_chain = temp_chain.reverse
|
@@ -163,17 +161,27 @@ module Libis
|
|
163
161
|
false
|
164
162
|
end
|
165
163
|
|
166
|
-
|
167
164
|
private
|
168
165
|
|
166
|
+
def node_to_s(node)
|
167
|
+
result = node[:converter].name.gsub(/^.*::/, '').to_s
|
168
|
+
unless node[:operations].empty?
|
169
|
+
result << '('
|
170
|
+
result << node[:operations].map do |operation|
|
171
|
+
"#{operation[:method]}:#{operation[:argument]}"
|
172
|
+
end.join(',')
|
173
|
+
result << ')'
|
174
|
+
end
|
175
|
+
result << '->-'
|
176
|
+
result << node[:output].to_s
|
177
|
+
end
|
178
|
+
|
169
179
|
def node_exists?(node)
|
170
180
|
@converter_chain.detect do |n|
|
171
181
|
n[:converter] == node[:converter] && n[:input] == node[:input] && n[:output] == node[:output]
|
172
182
|
end
|
173
183
|
end
|
174
|
-
|
175
184
|
end
|
176
|
-
|
177
185
|
end
|
178
186
|
end
|
179
187
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require_relative 'base'
|
4
4
|
|
@@ -9,20 +9,19 @@ require 'rexml/document'
|
|
9
9
|
module Libis
|
10
10
|
module Format
|
11
11
|
module Converter
|
12
|
-
|
13
12
|
class EmailConverter < Libis::Format::Converter::Base
|
14
|
-
|
15
13
|
def self.input_types
|
16
|
-
[
|
14
|
+
[:MSG]
|
17
15
|
end
|
18
16
|
|
19
17
|
def self.output_types(format = nil)
|
20
18
|
return [] unless input_types.include?(format)
|
21
|
-
|
19
|
+
|
20
|
+
[:PDF]
|
22
21
|
end
|
23
22
|
|
24
23
|
def email_convert(_)
|
25
|
-
#force usage of this converter
|
24
|
+
# force usage of this converter
|
26
25
|
end
|
27
26
|
|
28
27
|
def convert(source, target, format, opts = {})
|
@@ -30,9 +29,7 @@ module Libis
|
|
30
29
|
|
31
30
|
Format::Tool::MsgToPdf.run(source, target)
|
32
31
|
end
|
33
|
-
|
34
32
|
end
|
35
|
-
|
36
33
|
end
|
37
34
|
end
|
38
35
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'nokogiri'
|
2
4
|
|
3
5
|
require_relative 'base'
|
@@ -7,15 +9,14 @@ require 'libis/format/tool/fop_pdf'
|
|
7
9
|
module Libis
|
8
10
|
module Format
|
9
11
|
module Converter
|
10
|
-
|
11
12
|
class FopPdfConverter < Libis::Format::Converter::Base
|
12
|
-
|
13
13
|
def self.input_types
|
14
14
|
[:XML]
|
15
15
|
end
|
16
16
|
|
17
17
|
def self.output_types(format = nil)
|
18
|
-
return []
|
18
|
+
return [] if format && !input_types.include?(format)
|
19
|
+
|
19
20
|
[:PDF]
|
20
21
|
end
|
21
22
|
|
@@ -30,11 +31,8 @@ module Libis
|
|
30
31
|
FileUtils.mkpath(File.dirname(target))
|
31
32
|
|
32
33
|
Libis::Format::Tool::FopPdf.run(source, target)
|
33
|
-
|
34
34
|
end
|
35
|
-
|
36
35
|
end
|
37
|
-
|
38
36
|
end
|
39
37
|
end
|
40
38
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require_relative 'base'
|
4
4
|
require 'libis/format/identifier'
|
@@ -13,26 +13,26 @@ MiniMagick.configure do |config|
|
|
13
13
|
config.validate_on_create = false
|
14
14
|
config.validate_on_write = false
|
15
15
|
config.whiny = false
|
16
|
+
config.tmpdir = Libis::Format::Config[:tempdir] || Dir.tmpdir
|
16
17
|
end
|
17
18
|
|
18
19
|
module Libis
|
19
20
|
module Format
|
20
21
|
module Converter
|
21
|
-
|
22
22
|
# noinspection RubyTooManyInstanceVariablesInspection
|
23
23
|
class ImageConverter < Libis::Format::Converter::Base
|
24
|
-
|
25
24
|
def self.input_types
|
26
|
-
[
|
25
|
+
%i[TIFF JPG PNG BMP GIF PDF JP2]
|
27
26
|
end
|
28
27
|
|
29
28
|
def self.output_types(format = nil)
|
30
29
|
return [] unless input_types.include?(format)
|
31
|
-
|
30
|
+
|
31
|
+
%i[TIFF JPG PNG BMP GIF PDF JP2]
|
32
32
|
end
|
33
33
|
|
34
34
|
def self.multipage?(format)
|
35
|
-
[
|
35
|
+
%i[PDF TIFF GIF PBM PGM PPM].include?(format)
|
36
36
|
end
|
37
37
|
|
38
38
|
def initialize
|
@@ -41,15 +41,15 @@ module Libis
|
|
41
41
|
end
|
42
42
|
|
43
43
|
def image_convert(_)
|
44
|
-
#force usage of this converter
|
44
|
+
# force usage of this converter
|
45
45
|
end
|
46
46
|
|
47
|
-
def quiet(
|
48
|
-
@quiet = !!
|
47
|
+
def quiet(value)
|
48
|
+
@quiet = !!value
|
49
49
|
end
|
50
50
|
|
51
|
-
def page(
|
52
|
-
@page =
|
51
|
+
def page(number)
|
52
|
+
@page = number
|
53
53
|
end
|
54
54
|
|
55
55
|
def scale(percent)
|
@@ -122,33 +122,33 @@ module Libis
|
|
122
122
|
@wm_gap = ((options[:gap] || 0.2).to_f * 100).to_i
|
123
123
|
rotation = 360 - (options[:rotation] || 30).to_i
|
124
124
|
@wm_image = MiniMagick::Image.new(options[:file]) if options[:file]
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
# noinspection RubyResolve
|
147
|
-
unless @wm_image.valid?
|
148
|
-
error "Problem creating watermark image '#{image}'."
|
149
|
-
@wm_image = nil
|
150
|
-
end
|
125
|
+
return if @wm_image&.valid?
|
126
|
+
|
127
|
+
image = options[:file] || (Dir::Tmpname.create(%w[wm_image .png]) { |_| })
|
128
|
+
# noinspection RubyResolve
|
129
|
+
MiniMagick::Tool::Convert.new do |convert|
|
130
|
+
# noinspection RubyLiteralArrayInspection
|
131
|
+
convert.quiet
|
132
|
+
convert.background 'transparent'
|
133
|
+
convert.size('2000x2000')
|
134
|
+
convert.gravity 'Center'
|
135
|
+
convert.font('Helvetica').fill('black').pointsize(72) # .stroke('black').strokewidth(1)
|
136
|
+
convert << "label:#{text}"
|
137
|
+
convert.rotate rotation
|
138
|
+
convert.trim.repage.+ # rubocop:disable Lint/Void
|
139
|
+
convert << image
|
140
|
+
end
|
141
|
+
if options[:file]
|
142
|
+
@wm_image = MiniMagick::Image.new(image)
|
143
|
+
else
|
144
|
+
@wm_image = MiniMagick::Image.open(image)
|
145
|
+
File.delete(image)
|
151
146
|
end
|
147
|
+
# noinspection RubyResolve
|
148
|
+
return if @wm_image.valid?
|
149
|
+
|
150
|
+
error "Problem creating watermark image '#{image}'."
|
151
|
+
@wm_image = nil
|
152
152
|
end
|
153
153
|
|
154
154
|
def convert(source, target, format, opts = {})
|
@@ -161,34 +161,33 @@ module Libis
|
|
161
161
|
assemble_and_convert(source, target, format)
|
162
162
|
|
163
163
|
elsif File.directory?(source)
|
164
|
-
source_list = Dir[File.join(source, '**', '*')].reject {|p| File.directory? p}
|
164
|
+
source_list = Dir[File.join(source, '**', '*')].reject { |p| File.directory? p }
|
165
165
|
|
166
166
|
assemble_and_convert(source_list, target, format)
|
167
167
|
|
168
168
|
else
|
169
169
|
|
170
|
-
image = MiniMagick::Image.open(source) { |b| b.quiet }
|
170
|
+
image = MiniMagick::Image.open(source) { |b| b.quiet } # rubocop:disable Style/SymbolProc
|
171
171
|
|
172
172
|
if image.pages.size > 1
|
173
173
|
if @page
|
174
174
|
convert_image(image.pages[@page].path, target, format)
|
175
175
|
else
|
176
176
|
# noinspection RubyBlockToMethodReference
|
177
|
-
assemble_and_convert(image.pages.map
|
177
|
+
assemble_and_convert(image.pages.map(&:path), target, format)
|
178
178
|
end
|
179
179
|
else
|
180
180
|
convert_image(source, target, format)
|
181
181
|
end
|
182
182
|
end
|
183
|
-
|
184
|
-
{
|
183
|
+
|
184
|
+
{
|
185
185
|
files: [target],
|
186
186
|
converter: self.class.name
|
187
187
|
}
|
188
188
|
end
|
189
189
|
|
190
190
|
def assemble_and_convert(sources, target, format)
|
191
|
-
|
192
191
|
warn 'Received multiple images as input and single page format as target.' unless self.class.multipage?(format)
|
193
192
|
converted_pages = sources.inject([]) do |list, path|
|
194
193
|
# noinspection RubyArgCount
|
@@ -198,7 +197,7 @@ module Libis
|
|
198
197
|
end
|
199
198
|
MiniMagick::Tool::Convert.new do |b|
|
200
199
|
b.append unless self.class.multipage?(format)
|
201
|
-
converted_pages.each {|page| b << page.path}
|
200
|
+
converted_pages.each { |page| b << page.path }
|
202
201
|
b << target
|
203
202
|
end
|
204
203
|
converted_pages.each do |temp_file|
|
@@ -210,17 +209,16 @@ module Libis
|
|
210
209
|
protected
|
211
210
|
|
212
211
|
def convert_image(source, target, format)
|
213
|
-
|
214
212
|
image_info = nil
|
215
|
-
image_info = MiniMagick::Image::Info.new(source) {|b| b.quiet} if @wm_image
|
213
|
+
image_info = MiniMagick::Image::Info.new(source) { |b| b.quiet } if @wm_image # rubocop:disable Style/SymbolProc
|
216
214
|
|
217
215
|
MiniMagick::Tool::Convert.new do |convert|
|
218
216
|
convert.quiet if @quiet
|
219
217
|
if @wm_image
|
220
218
|
convert << @wm_image.path
|
221
|
-
convert.bordercolor('transparent').border("#{@wm_gap}%") if @wm_gap
|
219
|
+
convert.bordercolor('transparent').border("#{@wm_gap}%") if @wm_gap.positive?
|
222
220
|
convert.filter('Lagrange')
|
223
|
-
convert.resize("#{image_info['width'] / @wm_tiles}x#{image_info['height'] / @wm_tiles}") if @wm_tiles
|
221
|
+
convert.resize("#{image_info['width'] / @wm_tiles}x#{image_info['height'] / @wm_tiles}") if @wm_tiles.positive?
|
224
222
|
convert.resize("#{@wm_resize}%") if @wm_resize
|
225
223
|
convert.write('mpr:watermark').delete.+
|
226
224
|
end
|
@@ -229,7 +227,7 @@ module Libis
|
|
229
227
|
convert << source
|
230
228
|
convert.flatten if @options[:flatten].nil? && format == :JPG
|
231
229
|
if @wm_image
|
232
|
-
if @wm_tiles >= 0
|
230
|
+
if (@wm_tiles >= 0) && (@wm_tiles <= 1)
|
233
231
|
convert << 'mpr:watermark'
|
234
232
|
else
|
235
233
|
convert.stack do |stack|
|
@@ -242,15 +240,13 @@ module Libis
|
|
242
240
|
convert.compose(@wm_composition).gravity(@wm_gravity).define("compose:args=#{@wm_opacity}%").composite
|
243
241
|
end
|
244
242
|
|
245
|
-
@flags.each {|f, v| v.is_a?(TrueClass) ? convert.send(f).+ : convert.send(f)}
|
246
|
-
if @delete_date
|
247
|
-
convert << '+set' << 'modify-date' << '+set' << 'create-date'
|
248
|
-
end
|
243
|
+
@flags.each { |f, v| v.is_a?(TrueClass) ? convert.send(f).+ : convert.send(f) }
|
244
|
+
convert << '+set' << 'modify-date' << '+set' << 'create-date' if @delete_date
|
249
245
|
|
250
246
|
colorspace = @options.delete(:colorspace) || 'sRGB'
|
251
247
|
unless @options.empty?
|
252
248
|
convert.colorspace('RGB')
|
253
|
-
@options.each {|o, v| convert.send(o, v)}
|
249
|
+
@options.each { |o, v| convert.send(o, v) }
|
254
250
|
end
|
255
251
|
convert.colorspace(colorspace)
|
256
252
|
convert.profile @profile if @profile
|
@@ -262,11 +258,8 @@ module Libis
|
|
262
258
|
end
|
263
259
|
|
264
260
|
target
|
265
|
-
|
266
261
|
end
|
267
|
-
|
268
262
|
end
|
269
|
-
|
270
263
|
end
|
271
264
|
end
|
272
|
-
end
|
265
|
+
end
|