libis-format 1.0.7 → 2.0.4
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/.gitignore +2 -0
- data/.travis.yml +32 -24
- data/README.md +2 -2
- data/base/Dockerfile +5 -3
- data/base/rework_path +5 -10
- data/bin/{droid → droid_tool} +0 -0
- data/bin/{fido → fido_tool} +0 -0
- data/lib/libis/format.rb +12 -3
- data/lib/libis/format/cli/convert.rb +4 -4
- data/lib/libis/format/config.rb +16 -12
- data/lib/libis/format/converter/audio_converter.rb +2 -36
- data/lib/libis/format/converter/base.rb +22 -8
- data/lib/libis/format/converter/chain.rb +3 -3
- data/lib/libis/format/converter/image_assembler.rb +82 -0
- data/lib/libis/format/converter/image_converter.rb +20 -138
- data/lib/libis/format/converter/image_splitter.rb +84 -0
- data/lib/libis/format/converter/image_watermarker.rb +261 -0
- data/lib/libis/format/converter/jp2_converter.rb +1 -1
- data/lib/libis/format/converter/office_converter.rb +2 -2
- data/lib/libis/format/converter/pdf_assembler.rb +66 -0
- data/lib/libis/format/converter/pdf_converter.rb +6 -132
- data/lib/libis/format/converter/pdf_metadata.rb +82 -0
- data/lib/libis/format/converter/pdf_optimizer.rb +67 -0
- data/lib/libis/format/converter/pdf_protecter.rb +147 -0
- data/lib/libis/format/converter/pdf_selecter.rb +83 -0
- data/lib/libis/format/converter/pdf_splitter.rb +70 -0
- data/lib/libis/format/converter/pdf_watermarker_header.rb +71 -0
- data/lib/libis/format/converter/pdf_watermarker_image.rb +76 -0
- data/lib/libis/format/converter/pdf_watermarker_text.rb +93 -0
- data/lib/libis/format/converter/spreadsheet_converter.rb +2 -2
- data/lib/libis/format/converter/video_converter.rb +1 -1
- data/lib/libis/format/identifier.rb +3 -3
- data/lib/libis/format/info.rb +27 -0
- data/lib/libis/format/library.rb +147 -0
- data/lib/libis/format/tool.rb +4 -1
- data/lib/libis/format/tool/extension_identification.rb +4 -4
- data/lib/libis/format/tool/identification_tool.rb +6 -6
- data/lib/libis/format/tool/pdf_merge.rb +3 -3
- data/lib/libis/format/tool/{pdf_copy.rb → pdf_metadata.rb} +5 -5
- data/lib/libis/format/tool/pdf_protect.rb +47 -0
- data/lib/libis/format/tool/pdf_select.rb +47 -0
- data/lib/libis/format/tool/pdf_split.rb +4 -4
- data/lib/libis/format/tool/pdf_watermark.rb +47 -0
- data/lib/libis/format/tool/spreadsheet_to_ods.rb +1 -0
- data/lib/libis/format/version.rb +1 -1
- data/lib/libis/format/yaml_loader.rb +71 -0
- data/libis-format.gemspec +3 -2
- data/tools/PdfTool.jar +0 -0
- data/tools/bcpkix-jdk15on-167.jar +0 -0
- data/tools/bcprov-jdk15on-167.jar +0 -0
- data/tools/fop/fop.bat +75 -75
- data/tools/fop/fop.cmd +31 -31
- data/tools/fop/fop.js +341 -341
- data/tools/fop/lib/avalon-framework.NOTICE.TXT +11 -11
- data/tools/fop/lib/xml-apis.LICENSE-SAX.html +17 -17
- data/tools/fop/lib/xml-apis.LICENSE.DOM-documentation.html +74 -74
- data/tools/fop/lib/xml-apis.LICENSE.DOM-software.html +66 -66
- metadata +32 -19
- data/bin/pdf_copy +0 -13
- data/lib/libis/format/type_database.rb +0 -133
- data/lib/libis/format/type_database_impl.rb +0 -120
- data/tools/bcpkix-jdk15on-1.49.jar +0 -0
- data/tools/bcprov-jdk15on-1.49.jar +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 43d209bde1a85973e528730bb3ec4c9cffc58db02f916936fa2144d4e91b81f7
|
4
|
+
data.tar.gz: 04315d80c7e20b6302f9d6d10906f4ec7d5b6046a47902fbeff95ec97bf7732a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d581e3ac51fc290ba57e27d2bf6bfe5dcfa8f269a8dbdfa656954bff2af7efd8d963177ec1cb309db481bd7b84603df20e8b34bb1800f7c88d93e91e31722532
|
7
|
+
data.tar.gz: 867208ce1766cb4bdec0efc648c7b5a1e1dd9883ffd5818f82324ea3a783b21e50cb81fafdbc04bad1c1da75adb75503c63d9be3936baeeac436a5a92ac9a791
|
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
@@ -1,41 +1,45 @@
|
|
1
|
+
dist: bionic
|
1
2
|
language: ruby
|
2
|
-
sudo: false
|
3
|
-
dist: trusty
|
4
3
|
cache: bundler
|
4
|
+
sudo: false
|
5
5
|
rvm:
|
6
|
-
- 2.
|
7
|
-
- 2.
|
8
|
-
- 2.
|
9
|
-
- 2.
|
6
|
+
- 2.3
|
7
|
+
- 2.4
|
8
|
+
- 2.5
|
9
|
+
- 2.6
|
10
10
|
- ruby-head
|
11
|
-
- jruby-9.
|
12
|
-
- jruby-9.
|
11
|
+
- jruby-9.1
|
12
|
+
- jruby-9.2
|
13
13
|
- jruby-head
|
14
14
|
jdk:
|
15
|
-
-
|
16
|
-
-
|
15
|
+
- openjdk10
|
16
|
+
- openjdk11
|
17
17
|
matrix:
|
18
18
|
exclude:
|
19
|
-
- rvm: 2.
|
20
|
-
jdk:
|
21
|
-
- rvm: 2.
|
22
|
-
jdk:
|
23
|
-
- rvm: 2.
|
24
|
-
jdk:
|
25
|
-
- rvm: 2.
|
26
|
-
jdk:
|
19
|
+
- rvm: 2.3
|
20
|
+
jdk: openjdk10
|
21
|
+
- rvm: 2.4
|
22
|
+
jdk: openjdk10
|
23
|
+
- rvm: 2.5
|
24
|
+
jdk: openjdk10
|
25
|
+
- rvm: 2.6
|
26
|
+
jdk: openjdk10
|
27
27
|
- rvm: ruby-head
|
28
|
-
jdk:
|
28
|
+
jdk: openjdk10
|
29
29
|
allow_failures:
|
30
30
|
- rvm: ruby-head
|
31
31
|
- rvm: jruby-head
|
32
32
|
branches:
|
33
33
|
only:
|
34
|
-
|
34
|
+
- master
|
35
|
+
- v2
|
35
36
|
before_install:
|
36
|
-
-
|
37
|
+
- gem update --system
|
38
|
+
- gem --version
|
39
|
+
- sudo add-apt-repository ppa:mc3man/bionic-media -y
|
37
40
|
- sudo apt-get update -y -q
|
38
|
-
- sudo apt-get install
|
41
|
+
- sudo apt-get install
|
42
|
+
- sudo apt-get install -y -q ffmpeg ubuntu-restricted-extras
|
39
43
|
- sudo pip install --upgrade pip
|
40
44
|
- sudo pip install --upgrade --ignore-installed opf-fido six
|
41
45
|
- sudo wget -O droid.zip -q http://www.nationalarchives.gov.uk/documents/information-management/droid-binary-6.4-bin.zip
|
@@ -43,8 +47,12 @@ before_install:
|
|
43
47
|
- sudo unzip droid.zip -d /opt/droid
|
44
48
|
- sudo chmod 755 /opt/droid/droid.sh
|
45
49
|
- sudo locale-gen "en_US.UTF-8"
|
46
|
-
- sudo
|
47
|
-
-
|
50
|
+
- echo 'Europe/Brussels' | sudo tee /etc/timezone
|
51
|
+
- export TZ=Europe/Brussels
|
52
|
+
- sudo dpkg-reconfigure --frontend noninteractive tzdata
|
53
|
+
- date
|
54
|
+
before_script:
|
55
|
+
- export TZ=Europe/Brussels
|
48
56
|
env:
|
49
57
|
- LC_ALL=en_US.UTF-8
|
50
58
|
- LANG=en_US.UTF-8
|
data/README.md
CHANGED
@@ -26,9 +26,9 @@ Or install it yourself as:
|
|
26
26
|
|
27
27
|
## Usage
|
28
28
|
|
29
|
-
### ::Libis::Format::
|
29
|
+
### ::Libis::Format::Library
|
30
30
|
|
31
|
-
The
|
31
|
+
The format database is the core of the format services. It stores information about all the known formats.
|
32
32
|
|
33
33
|
### ::Libis::Format::Identifier
|
34
34
|
|
data/base/Dockerfile
CHANGED
@@ -27,7 +27,9 @@ RUN wget -q -O fop.tar.gz "http://www.apache.org/dyn/closer.cgi?filename=/xmlgra
|
|
27
27
|
&& rm fop.tar.gz
|
28
28
|
|
29
29
|
RUN echo "8\n9\n" | apt-get install tzdata
|
30
|
-
|
31
|
-
ADD ./
|
32
|
-
ADD ./
|
30
|
+
RUN mkdir -p /teneo/format/spec
|
31
|
+
ADD ./tools /teneo/format/tools
|
32
|
+
ADD ./data /teneo/format/data
|
33
|
+
ADD ./spec/data /teneo/format/spec/data
|
34
|
+
ADD ./base/rework_path /teneo/format/rework_path
|
33
35
|
CMD /bin/bash
|
data/base/rework_path
CHANGED
@@ -1,25 +1,20 @@
|
|
1
1
|
#!/bin/bash
|
2
2
|
|
3
|
-
#file=${1/$SRC_PATH/$TGT_PATH}
|
4
|
-
#echo "$1 -> $file"
|
5
|
-
|
6
3
|
CMD=$1
|
7
4
|
shift
|
8
5
|
|
9
6
|
readarray -d ',' -t mapping <<< "$VOLUME_MAPPING"
|
10
7
|
|
11
8
|
args=("$@")
|
12
|
-
echo "args: ${args[@]}"
|
13
|
-
#args="${args[@]/$SRC_PATH/$TGT_PATH}"
|
14
|
-
#args="${args[@]/$SRC_TMP/$TGT_TMP}"
|
9
|
+
#echo "args: ${args[@]}"
|
15
10
|
for map in "${mapping[@]}"
|
16
11
|
do
|
17
12
|
map="${map//[$'\t\r\n ']}"
|
18
13
|
readarray -d '=' -t m <<< "$map"
|
19
14
|
src="${m[0]//[$'\t\r\n ']}"
|
20
15
|
tgt="${m[1]//[$'\t\r\n ']}"
|
21
|
-
echo "$src -> $tgt"
|
22
|
-
args="${args[@]/$src/$tgt}"
|
23
|
-
echo "args: ${args[@]}"
|
16
|
+
# echo "$src -> $tgt"
|
17
|
+
args=("${args[@]/$src/$tgt}")
|
18
|
+
# echo "args: ${args[@]}"
|
24
19
|
done
|
25
|
-
|
20
|
+
${CMD} "${args[@]}"
|
data/bin/{droid → droid_tool}
RENAMED
File without changes
|
data/bin/{fido → fido_tool}
RENAMED
File without changes
|
data/lib/libis/format.rb
CHANGED
@@ -3,8 +3,11 @@ require 'libis/format/version'
|
|
3
3
|
module Libis
|
4
4
|
module Format
|
5
5
|
autoload :Config, 'libis/format/config'
|
6
|
-
|
7
|
-
autoload :
|
6
|
+
|
7
|
+
autoload :Info, 'libis/format/info'
|
8
|
+
autoload :Library, 'libis/format/library'
|
9
|
+
autoload :YamlLoader, 'libis/format/yaml_loader'
|
10
|
+
|
8
11
|
autoload :Identifier, 'libis/format/identifier'
|
9
12
|
|
10
13
|
autoload :Tool, 'libis/format/tool'
|
@@ -15,4 +18,10 @@ module Libis
|
|
15
18
|
TOOL_DIR = File.join(ROOT_DIR, 'tools')
|
16
19
|
|
17
20
|
end
|
18
|
-
end
|
21
|
+
end
|
22
|
+
|
23
|
+
class Object
|
24
|
+
def blank?
|
25
|
+
respond_to?(:empty?) ? !!empty? : !self
|
26
|
+
end unless defined? :blank?
|
27
|
+
end
|
@@ -67,7 +67,7 @@ module Libis
|
|
67
67
|
arguments that any of the targetted converters support.
|
68
68
|
|
69
69
|
The source file's format will be identified by the Libis::Format::Identifier and the target file's format
|
70
|
-
will be derived from the file's extension. The Libis::Format::
|
70
|
+
will be derived from the file's extension. The Libis::Format::Library is used to relate extensions
|
71
71
|
with formats.
|
72
72
|
|
73
73
|
DESC
|
@@ -89,7 +89,7 @@ module Libis
|
|
89
89
|
A source file name and target file name should be supplied. The source file should exist and be readable.
|
90
90
|
The target file should be writable, but should not exist.
|
91
91
|
|
92
|
-
The target file's format will be derived from the file's extension. The Libis::Format::
|
92
|
+
The target file's format will be derived from the file's extension. The Libis::Format::Library is used
|
93
93
|
to relate extensions with formats.
|
94
94
|
|
95
95
|
DESC
|
@@ -265,11 +265,11 @@ module Libis
|
|
265
265
|
end
|
266
266
|
|
267
267
|
def extname(format)
|
268
|
-
Libis::Format::
|
268
|
+
Libis::Format::Library.get_field(format, :extensions)
|
269
269
|
end
|
270
270
|
|
271
271
|
def get_format(file_name)
|
272
|
-
Libis::Format::
|
272
|
+
Libis::Format::Library.get_field_by(:extension, File.extname(file_name), :format)
|
273
273
|
end
|
274
274
|
|
275
275
|
def format_identifier(file)
|
data/lib/libis/format/config.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
require 'os'
|
3
|
+
require 'libis-tools'
|
3
4
|
|
4
5
|
module Libis
|
5
6
|
module Format
|
@@ -23,23 +24,26 @@ module Libis
|
|
23
24
|
Config[:preflight_jar] = File.join(Libis::Format::TOOL_DIR, 'pdfbox', 'preflight-app-2.0.13.jar')
|
24
25
|
# noinspection RubyStringKeysInHashInspection
|
25
26
|
Config[:xml_validations] = [['archive/ead', File.join(Libis::Format::DATA_DIR, 'ead.xsd')]]
|
26
|
-
Config[:
|
27
|
+
Config[:format_library_implementation] = 'Libis::Format::YamlLoader.instance'
|
28
|
+
Config[:format_library_database] = File.join(Libis::Format::DATA_DIR, 'types.yml')
|
27
29
|
Config[:raw_audio_convert_cmd] = 'sox -V1 %s -e signed -b 16 -t wav %s rate %d channels %d'
|
28
30
|
Config[:watermark_font] = '/usr/share/fonts/truetype/liberation/LiberationSans-Regular.ttf'
|
29
31
|
Config[:timeouts] = {
|
30
32
|
droid: 20 * 60,
|
31
|
-
ffmpeg:
|
33
|
+
ffmpeg: 500 * 60,
|
32
34
|
fido: 20 * 60,
|
33
|
-
file_tool:
|
34
|
-
fop:
|
35
|
-
identification_tool:
|
36
|
-
office_to_pdf:
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
35
|
+
file_tool: 20 * 60,
|
36
|
+
fop: 50 * 60,
|
37
|
+
identification_tool: 50 * 60,
|
38
|
+
office_to_pdf: 50 * 60,
|
39
|
+
pdf_select: 50 * 60,
|
40
|
+
pdf_copy: 50 * 60,
|
41
|
+
pdf_merge: 50 * 60,
|
42
|
+
pdf_optimizer: 50 * 60,
|
43
|
+
pdf_split: 50 * 60,
|
44
|
+
pdf_watermark: 50 * 60,
|
45
|
+
pdf_to_pdfa: 50 * 60,
|
46
|
+
pdfa_validator: 50 * 60,
|
43
47
|
}
|
44
48
|
|
45
49
|
end
|
@@ -15,7 +15,7 @@ module Libis
|
|
15
15
|
end
|
16
16
|
|
17
17
|
def self.output_types(format = nil)
|
18
|
-
return [] unless input_types.include?(format)
|
18
|
+
return [] unless format.nil? || input_types.include?(format)
|
19
19
|
[:MP3, :FLAC, :AC3, :AAC, :WMA, :ALAC, :WAV, :AIFF, :AMR, :AU, :M4A]
|
20
20
|
end
|
21
21
|
|
@@ -69,47 +69,13 @@ module Libis
|
|
69
69
|
(@options[:preset] ||= {})[stream] = name
|
70
70
|
end
|
71
71
|
|
72
|
-
# def encoder(value)
|
73
|
-
# @options[:encoder] = value
|
74
|
-
# end
|
75
|
-
#
|
76
|
-
# def encoder_options(value)
|
77
|
-
# @options[:encoder_options] = value
|
78
|
-
# end
|
79
|
-
|
80
72
|
def convert(source, target, _format, opts = {})
|
81
73
|
super
|
82
74
|
|
83
75
|
FileUtils.mkpath(File.dirname(target))
|
84
76
|
|
85
|
-
|
86
|
-
|
87
|
-
assemble_and_convert(source, target)
|
88
|
-
|
89
|
-
elsif File.directory?(source)
|
90
|
-
|
91
|
-
sources = Dir[File.join(source, '**', '*')].reject {|p| File.directory? p}
|
92
|
-
assemble_and_convert(sources, target)
|
77
|
+
convert_file(source, target)
|
93
78
|
|
94
|
-
else
|
95
|
-
|
96
|
-
convert_file(source, target)
|
97
|
-
|
98
|
-
end
|
99
|
-
|
100
|
-
target
|
101
|
-
|
102
|
-
end
|
103
|
-
|
104
|
-
def assemble_and_convert(sources, target)
|
105
|
-
Tempfile.create(%w(list .txt)) do |f|
|
106
|
-
sources.each {|src| f.puts src}
|
107
|
-
opts[:global] ||= []
|
108
|
-
opts[:global] += %w(-f concat)
|
109
|
-
f.close
|
110
|
-
target = convert_file(f.to_path, target)
|
111
|
-
end
|
112
|
-
target
|
113
79
|
end
|
114
80
|
|
115
81
|
def self.sounds_like(file1, file2, threshold, rate, channels)
|
@@ -4,7 +4,8 @@
|
|
4
4
|
require 'tmpdir'
|
5
5
|
require 'libis/tools/logger'
|
6
6
|
require 'libis/tools/temp_file'
|
7
|
-
require 'libis/
|
7
|
+
require 'libis/tools/extend/string'
|
8
|
+
require 'libis/format/library'
|
8
9
|
|
9
10
|
require_relative 'repository'
|
10
11
|
|
@@ -22,10 +23,23 @@ module Libis
|
|
22
23
|
@flags = {}
|
23
24
|
end
|
24
25
|
|
26
|
+
def self.category
|
27
|
+
:converter
|
28
|
+
end
|
29
|
+
|
30
|
+
def check_file_exist(file)
|
31
|
+
unless File.exist? file
|
32
|
+
error "Cannot find file '#{file}'."
|
33
|
+
return false
|
34
|
+
end
|
35
|
+
true
|
36
|
+
end
|
37
|
+
|
25
38
|
def convert(source, target, format, opts = {})
|
26
|
-
|
27
|
-
|
28
|
-
|
39
|
+
if source.is_a?(Array)
|
40
|
+
return nil unless source.map { |f| check_file_exist(f) }.reduce(:&)
|
41
|
+
else
|
42
|
+
return nil unless check_file_exist(source)
|
29
43
|
end
|
30
44
|
@options.merge!(opts[:options]) if opts[:options]
|
31
45
|
@flags.merge!(opts[:flags]) if opts[:flags]
|
@@ -51,7 +65,7 @@ module Libis
|
|
51
65
|
target
|
52
66
|
end
|
53
67
|
|
54
|
-
def Base.inherited(
|
68
|
+
def Base.inherited(klass)
|
55
69
|
|
56
70
|
Repository.register klass
|
57
71
|
|
@@ -73,12 +87,12 @@ module Libis
|
|
73
87
|
end
|
74
88
|
|
75
89
|
def input_mimetype?(mimetype)
|
76
|
-
type_id =
|
90
|
+
type_id = Libis::Format::Library.get_field_by(:mimetype, mimetype, :format)
|
77
91
|
input_type? type_id
|
78
92
|
end
|
79
93
|
|
80
94
|
def output_mimetype?(mimetype)
|
81
|
-
type_id =
|
95
|
+
type_id = Libis::Format::Library.get_field_by(:mimetype, mimetype, :format)
|
82
96
|
output_type? type_id
|
83
97
|
end
|
84
98
|
|
@@ -91,7 +105,7 @@ module Libis
|
|
91
105
|
end
|
92
106
|
|
93
107
|
def extension?(extension)
|
94
|
-
!
|
108
|
+
!Libis::Format::Library.get_field_by(:extension, extension, :format).nil?
|
95
109
|
end
|
96
110
|
|
97
111
|
end
|
@@ -5,7 +5,7 @@ require 'deep_dive'
|
|
5
5
|
|
6
6
|
require 'libis/tools/logger'
|
7
7
|
require 'libis/tools/extend/hash'
|
8
|
-
require 'libis/format/
|
8
|
+
require 'libis/format/library'
|
9
9
|
|
10
10
|
module Libis
|
11
11
|
module Format
|
@@ -83,8 +83,8 @@ module Libis
|
|
83
83
|
target = target_file
|
84
84
|
|
85
85
|
if i < size - 1
|
86
|
-
target += ".temp.#{
|
87
|
-
target += ".#{
|
86
|
+
target += ".temp.#{Libis::Format::Library.get_field(target_type, :extensions).first}"
|
87
|
+
target += ".#{Libis::Format::Library.get_field(target_type, :extensions).first}" while File.exist? target
|
88
88
|
temp_files << target
|
89
89
|
end
|
90
90
|
|
@@ -0,0 +1,82 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require_relative 'base'
|
4
|
+
require 'libis/format/identifier'
|
5
|
+
|
6
|
+
require 'mini_magick'
|
7
|
+
|
8
|
+
MiniMagick.logger.level = ::Logger::UNKNOWN
|
9
|
+
|
10
|
+
MiniMagick.configure do |config|
|
11
|
+
# config.cli = :graphicsmagick
|
12
|
+
config.validate_on_create = false
|
13
|
+
config.validate_on_write = false
|
14
|
+
config.whiny = false
|
15
|
+
end
|
16
|
+
|
17
|
+
module Libis
|
18
|
+
module Format
|
19
|
+
module Converter
|
20
|
+
|
21
|
+
# noinspection RubyTooManyInstanceVariablesInspection,DuplicatedCode
|
22
|
+
class ImageAssembler < Libis::Format::Converter::Base
|
23
|
+
|
24
|
+
def self.input_types
|
25
|
+
[:TIFF, :JPG, :PNG, :BMP, :GIF, :PDF, :JP2]
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.output_types(format = nil)
|
29
|
+
return [] unless input_types.include?(format) if format
|
30
|
+
[:PDF, :TIFF, :GIF, :PBM, :PGM, :PPM]
|
31
|
+
end
|
32
|
+
|
33
|
+
def self.category
|
34
|
+
:assembler
|
35
|
+
end
|
36
|
+
|
37
|
+
def image_assemble(_)
|
38
|
+
#force usage of this converter
|
39
|
+
end
|
40
|
+
|
41
|
+
def quiet(v)
|
42
|
+
@quiet = !!v
|
43
|
+
end
|
44
|
+
|
45
|
+
def convert(source, target, format, opts = {})
|
46
|
+
super
|
47
|
+
|
48
|
+
FileUtils.mkpath(File.dirname(target))
|
49
|
+
|
50
|
+
if source.is_a? Array
|
51
|
+
assemble(source, target, format)
|
52
|
+
elsif File.directory?(source)
|
53
|
+
source_list = Dir[File.join(source, '**', '*')].reject {|p| File.directory? p}
|
54
|
+
assemble(source_list, target, format)
|
55
|
+
else
|
56
|
+
image = MiniMagick::Image.open(source) {|b| b.quiet}
|
57
|
+
if image.pages.size > 1
|
58
|
+
assemble(image.pages.map {|page| page.path}, target, format)
|
59
|
+
else
|
60
|
+
assemble([source], target, format)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
target
|
65
|
+
|
66
|
+
end
|
67
|
+
|
68
|
+
private
|
69
|
+
|
70
|
+
def assemble(sources, target, format)
|
71
|
+
MiniMagick::Tool::Convert.new do |b|
|
72
|
+
sources.each {|source| b << source}
|
73
|
+
convert.format(format)
|
74
|
+
b << target
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
end
|
79
|
+
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|