libis-format 0.9.41 → 0.9.44

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.
Files changed (52) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +365 -0
  3. data/bin/droid +1 -1
  4. data/bin/fido +1 -1
  5. data/bin/pdf_copy +1 -1
  6. data/lib/libis/format/config.rb +1 -0
  7. data/lib/libis/format/converter/audio_converter.rb +1 -1
  8. data/lib/libis/format/converter/base.rb +2 -1
  9. data/lib/libis/format/converter/office_converter.rb +2 -2
  10. data/lib/libis/format/converter/pdf_converter.rb +6 -6
  11. data/lib/libis/format/converter/video_converter.rb +96 -2
  12. data/lib/libis/format/identifier.rb +12 -12
  13. data/lib/libis/format/tool/droid.rb +108 -0
  14. data/lib/libis/format/tool/extension_identification.rb +58 -0
  15. data/lib/libis/format/tool/ffmpeg.rb +43 -0
  16. data/lib/libis/format/tool/fido.rb +91 -0
  17. data/lib/libis/format/tool/file_tool.rb +78 -0
  18. data/lib/libis/format/tool/identification_tool.rb +175 -0
  19. data/lib/libis/format/tool/office_to_pdf.rb +54 -0
  20. data/lib/libis/format/tool/pdf_copy.rb +42 -0
  21. data/lib/libis/format/tool/pdf_merge.rb +43 -0
  22. data/lib/libis/format/tool/pdf_optimizer.rb +38 -0
  23. data/lib/libis/format/tool/pdf_split.rb +41 -0
  24. data/lib/libis/format/tool/pdf_to_pdfa.rb +78 -0
  25. data/lib/libis/format/tool/pdfa_validator.rb +63 -0
  26. data/lib/libis/format/tool.rb +23 -0
  27. data/lib/libis/format/version.rb +1 -1
  28. data/lib/libis/format.rb +1 -15
  29. data/libis-format.gemspec +1 -2
  30. data/spec/converter_audio_spec.rb +66 -0
  31. data/spec/converter_image_spec.rb +166 -0
  32. data/spec/converter_office_spec.rb +84 -0
  33. data/spec/converter_pdf_spec.rb +30 -0
  34. data/spec/converter_repository_spec.rb +91 -0
  35. data/spec/converter_video_spec.rb +97 -0
  36. data/spec/data/video/copyright.png +0 -0
  37. data/spec/identifier_spec.rb +3 -15
  38. metadata +32 -33
  39. data/lib/libis/format/droid.rb +0 -106
  40. data/lib/libis/format/extension_identification.rb +0 -55
  41. data/lib/libis/format/ffmpeg.rb +0 -41
  42. data/lib/libis/format/fido.rb +0 -89
  43. data/lib/libis/format/file_tool.rb +0 -76
  44. data/lib/libis/format/identification_tool.rb +0 -174
  45. data/lib/libis/format/office_to_pdf.rb +0 -52
  46. data/lib/libis/format/pdf_copy.rb +0 -40
  47. data/lib/libis/format/pdf_merge.rb +0 -41
  48. data/lib/libis/format/pdf_optimizer.rb +0 -36
  49. data/lib/libis/format/pdf_split.rb +0 -39
  50. data/lib/libis/format/pdf_to_pdfa.rb +0 -74
  51. data/lib/libis/format/pdfa_validator.rb +0 -61
  52. data/spec/converter_spec.rb +0 -433
@@ -0,0 +1,42 @@
1
+ require 'os'
2
+
3
+ require 'libis/tools/extend/string'
4
+ require 'libis/tools/logger'
5
+ require 'libis/tools/command'
6
+
7
+ require 'libis/format/config'
8
+
9
+ module Libis
10
+ module Format
11
+ module Tool
12
+
13
+ class PdfCopy
14
+ include ::Libis::Tools::Logger
15
+
16
+ def self.run(source, target, options = [])
17
+ self.new.run source, target, options
18
+ end
19
+
20
+ def run(source, target, options = [])
21
+ tool_dir = File.absolute_path(File.join(File.dirname(__FILE__), '..', '..', '..', 'tools'))
22
+ jar_file = File.join(tool_dir, 'PdfTool.jar')
23
+
24
+ if OS.java?
25
+ # TODO: import library and execute in current VM. For now do exactly as in MRI.
26
+ end
27
+
28
+ Libis::Tools::Command.run(
29
+ Libis::Format::Config[:java_path],
30
+ '-cp', jar_file,
31
+ 'CopyPdf',
32
+ '--file_input', source,
33
+ '--file_output', target,
34
+ *options
35
+ )
36
+
37
+ end
38
+ end
39
+
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,43 @@
1
+ require 'os'
2
+
3
+ require 'libis/tools/extend/string'
4
+ require 'libis/tools/logger'
5
+ require 'libis/tools/command'
6
+
7
+ require 'libis/format/config'
8
+
9
+ module Libis
10
+ module Format
11
+ module Tool
12
+
13
+ class PdfMerge
14
+ include ::Libis::Tools::Logger
15
+
16
+ def self.run(source, target, options = [])
17
+ self.new.run source, target, options
18
+ end
19
+
20
+ def run(source, target, options = [])
21
+ tool_dir = File.absolute_path(File.join(File.dirname(__FILE__), '..', '..', '..', 'tools'))
22
+ jar_file = File.join(tool_dir, 'PdfTool.jar')
23
+ source = [source] unless source.is_a?(Array)
24
+
25
+ if OS.java?
26
+ # TODO: import library and execute in current VM. For now do exactly as in MRI.
27
+ end
28
+
29
+ Libis::Tools::Command.run(
30
+ Libis::Format::Config[:java_path],
31
+ '-cp', jar_file,
32
+ 'MergePdf',
33
+ '--file_output', target,
34
+ *options,
35
+ *source,
36
+ )
37
+
38
+ end
39
+ end
40
+
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,38 @@
1
+ require 'os'
2
+
3
+ require 'libis/tools/extend/string'
4
+ require 'libis/tools/logger'
5
+ require 'libis/tools/command'
6
+
7
+ require 'libis/format/config'
8
+
9
+ module Libis
10
+ module Format
11
+ module Tool
12
+
13
+ class PdfOptimizer
14
+ include ::Libis::Tools::Logger
15
+
16
+ def self.run(source, target, quality)
17
+ self.new.run source, target, quality
18
+ end
19
+
20
+ def run(source, target, quality)
21
+
22
+ Libis::Tools::Command.run(
23
+ 'gs',
24
+ '-sDEVICE=pdfwrite',
25
+ '-dCompatibilityLevel=1.4',
26
+ "-dPDFSETTINGS=/#{quality}",
27
+ '-dNOPAUSE',
28
+ '-dBATCH',
29
+ "-sOutputFile=#{target}",
30
+ "#{source}"
31
+ )
32
+
33
+ end
34
+ end
35
+
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,41 @@
1
+ require 'os'
2
+
3
+ require 'libis/tools/extend/string'
4
+ require 'libis/tools/logger'
5
+ require 'libis/tools/command'
6
+
7
+ require 'libis/format/config'
8
+
9
+ module Libis
10
+ module Format
11
+ module Tool
12
+
13
+ class PdfSplit
14
+ include ::Libis::Tools::Logger
15
+
16
+ def self.run(source, target, options = [])
17
+ self.new.run source, target, options
18
+ end
19
+
20
+ def run(source, target, options = [])
21
+ tool_dir = File.absolute_path(File.join(File.dirname(__FILE__), '..', '..', '..', 'tools'))
22
+ jar_file = File.join(tool_dir, 'PdfTool.jar')
23
+ if OS.java?
24
+ # TODO: import library and execute in current VM. For now do exactly as in MRI.
25
+ end
26
+
27
+ Libis::Tools::Command.run(
28
+ Libis::Format::Config[:java_path],
29
+ '-cp', jar_file,
30
+ 'SplitPdf',
31
+ '--file_input', source,
32
+ '--file_output', target,
33
+ *options
34
+ )
35
+
36
+ end
37
+ end
38
+
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,78 @@
1
+ require 'tempfile'
2
+ require 'csv'
3
+ require 'fileutils'
4
+
5
+ require 'libis/tools/extend/string'
6
+ require 'libis/tools/logger'
7
+ require 'libis/tools/command'
8
+ require 'libis/tools/temp_file'
9
+
10
+ require 'libis/format'
11
+
12
+ module Libis
13
+ module Format
14
+ module Tool
15
+
16
+ class PdfToPdfa
17
+ include ::Libis::Tools::Logger
18
+
19
+ def self.run(source, target = nil, options = {})
20
+ self.new.run source, target, options
21
+ end
22
+
23
+ def run(source, target = nil, options = nil)
24
+
25
+ tmp_target = Tools::TempFile.name(File.basename(source, '.*'), '.pdf')
26
+ target ||= tmp_target
27
+
28
+ icc_info = icc_options(options[:colorspace])
29
+
30
+ icc_file = Tools::TempFile.name(icc_info[:icc_name], '.icc')
31
+ FileUtils.cp(File.join(Libis::Format::DATA_DIR, "#{icc_info[:icc_name]}.icc"), icc_file)
32
+
33
+ def_filename = Tools::TempFile.name('PDFA_def', '.ps')
34
+ File.open(def_filename, 'w') do |f|
35
+ f.puts File.read(File.join(Libis::Format::DATA_DIR, 'PDFA_def.ps')).
36
+ gsub('[** Fill in ICC profile location **]', icc_file).
37
+ gsub('[** Fill in ICC reference name **]', icc_info[:icc_ref])
38
+ end
39
+
40
+ result = Libis::Tools::Command.run(
41
+ Libis::Format::Config[:ghostscript_path],
42
+ '-dBATCH', '-dNOPAUSE', '-dNOOUTERSAVE',
43
+ '-sColorConversionStrategy=/UseDeviceIndependentColor',
44
+ "-sProcessColorModel=#{icc_info[:device]}",
45
+ '-sDEVICE=pdfwrite', '-dPDFA', '-dPDFACompatibilityPolicy=1',
46
+ "-sOutputICCProfile=#{icc_file}",
47
+ '-o', File.absolute_path(target),
48
+ def_filename,
49
+ source
50
+ )
51
+
52
+ FileUtils.rm [icc_file, def_filename].compact, force: true
53
+
54
+ unless Format::Tool::PdfaValidator.run(target)
55
+ result[:status] = -999
56
+ result[:err] << 'Failed to validate generated PDF/A file.'
57
+ end
58
+
59
+ result
60
+ end
61
+
62
+
63
+ private
64
+
65
+ def icc_options(colorspace)
66
+ case colorspace.to_s.downcase
67
+ when 'cmyk'
68
+ {icc_name: 'ISOcoated_v2_eci', icc_ref: 'FOGRA39L', device: 'DeviceCMYK'}
69
+ else
70
+ {icc_name: 'eciRGB_v2', icc_ref: 'sRGB', device: 'DeviceRGB'}
71
+ end
72
+ end
73
+
74
+ end
75
+
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,63 @@
1
+ require 'fileutils'
2
+
3
+ require 'libis/tools/extend/string'
4
+ require 'libis/tools/logger'
5
+ require 'libis/tools/command'
6
+
7
+ require 'libis/format/config'
8
+
9
+ module Libis
10
+ module Format
11
+ module Tool
12
+
13
+ class PdfaValidator
14
+ include ::Libis::Tools::Logger
15
+
16
+ def self.run(source)
17
+ self.new.run source
18
+ end
19
+
20
+ def run(source)
21
+
22
+ src_file = File.absolute_path(source)
23
+
24
+ if (pdfa = Libis::Format::Config[:pdfa_path])
25
+ # Keep it clean: tool generates fontconfig/ cache dir in current working dir
26
+ previous_wd = Dir.getwd
27
+ Dir.chdir(Dir.tmpdir)
28
+
29
+ result = Libis::Tools::Command.run(
30
+ pdfa,
31
+ '--noxml',
32
+ '--level', 'B',
33
+ '--verb', '0',
34
+ src_file
35
+ )
36
+
37
+ Dir.chdir(previous_wd)
38
+
39
+ unless result[:out].any? {|line| line =~ /^VLD-\[PASS\]/}
40
+ warn "Validator failed to validate the PDF file '%s' against PDF/A-1B constraints:\n%s", source,
41
+ result[:out].join("\n")
42
+ return false
43
+ end
44
+ else
45
+ jar = File.join(Libis::Format::ROOT_DIR, 'tools', 'pdfbox', 'preflight-app-1.8.10.jar')
46
+ result = Libis::Tools::Command.run(
47
+ Libis::Format::Config[:java_path],
48
+ '-jar', jar,
49
+ src_file
50
+ )
51
+ unless result[:status] == 0
52
+ warn "Validator failed to validate the PDF file '%s' against PDF/A-1B constraints:\n%s", source,
53
+ result[:out].join("\n")
54
+ return false
55
+ end
56
+ end
57
+ true
58
+ end
59
+ end
60
+
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,23 @@
1
+ # code utf-8
2
+
3
+ module Libis
4
+ module Format
5
+ module Tool
6
+
7
+ autoload :Droid, 'libis/format/tool/droid'
8
+ autoload :ExtensionIdentification, 'libis/format/tool/extension_identification'
9
+ autoload :Fido, 'libis/format/tool/fido'
10
+ autoload :FileTool, 'libis/format/tool/file_tool'
11
+
12
+ autoload :OfficeToPdf, 'libis/format/tool/office_to_pdf'
13
+ autoload :FFMpeg, 'libis/format/tool/ffmpeg'
14
+ autoload :PdfCopy, 'libis/format/tool/pdf_copy'
15
+ autoload :PdfMerge, 'libis/format/tool/pdf_merge'
16
+ autoload :PdfOptimizer, 'libis/format/tool/pdf_optimizer'
17
+ autoload :PdfSplit, 'libis/format/tool/pdf_split'
18
+ autoload :PdfToPdfa, 'libis/format/tool/pdf_to_pdfa'
19
+ autoload :PdfaValidator, 'libis/format/tool/pdfa_validator'
20
+
21
+ end
22
+ end
23
+ end
@@ -1,5 +1,5 @@
1
1
  module Libis
2
2
  module Format
3
- VERSION = '0.9.41'
3
+ VERSION = '0.9.44'
4
4
  end
5
5
  end
data/lib/libis/format.rb CHANGED
@@ -5,22 +5,8 @@ module Libis
5
5
  autoload :Config, 'libis/format/config'
6
6
  autoload :TypeDatabase, 'libis/format/type_database'
7
7
  autoload :Identifier, 'libis/format/identifier'
8
- autoload :Identifier, 'libis/format/identifier'
9
-
10
- autoload :FileTool, 'libis/format/file_tool'
11
- autoload :Fido, 'libis/format/fido'
12
- autoload :Droid, 'libis/format/droid'
13
- autoload :ExtensionIdentification, 'libis/format/extension_identification'
14
-
15
- autoload :OfficeToPdf, 'libis/format/office_to_pdf'
16
- autoload :PdfCopy, 'libis/format/pdf_copy'
17
- autoload :PdfMerge, 'libis/format/pdf_merge'
18
- autoload :PdfOptimizer, 'libis/format/pdf_optimizer'
19
- autoload :PdfSplit, 'libis/format/pdf_split'
20
- autoload :PdfToPdfa, 'libis/format/pdf_to_pdfa'
21
- autoload :PdfaValidator, 'libis/format/pdfa_validator'
22
- autoload :FFMpeg, 'libis/format/ffmpeg'
23
8
 
9
+ autoload :Tool, 'libis/format/tool'
24
10
  autoload :Converter, 'libis/format/converter'
25
11
 
26
12
  ROOT_DIR = File.absolute_path(File.join(File.dirname(__FILE__), '..', '..'))
data/libis-format.gemspec CHANGED
@@ -25,10 +25,9 @@ Gem::Specification.new do |spec|
25
25
  spec.add_development_dependency 'bundler', '~> 1.6'
26
26
  spec.add_development_dependency 'rake', '~> 10.3'
27
27
  spec.add_development_dependency 'rspec', '~> 3.1'
28
- spec.add_development_dependency 'simplecov', '~> 0.9'
29
28
  spec.add_development_dependency 'awesome_print'
30
29
 
31
- spec.add_runtime_dependency 'libis-tools', '~> 0.9.52'
30
+ spec.add_runtime_dependency 'libis-tools', '~> 0.9.57'
32
31
  spec.add_runtime_dependency 'os', '= 0.9.6'
33
32
  spec.add_runtime_dependency 'mini_magick', '~> 4.3'
34
33
  spec.add_runtime_dependency 'deep_dive', '~> 0.3'
@@ -0,0 +1,66 @@
1
+ # encoding: utf-8
2
+ require 'spec_helper'
3
+
4
+ require 'libis/format/converter/audio_converter'
5
+
6
+ describe 'Converters' do
7
+
8
+ let(:repository) {Libis::Format::Converter::Repository}
9
+ let(:file_dir) {File.dirname(__FILE__)}
10
+
11
+ before(:all) {
12
+ Libis::Tools::Config.logger.level = 'off'
13
+ }
14
+
15
+ context 'Audio Converter' do
16
+
17
+ let(:converter) {Libis::Format::Converter::AudioConverter.new}
18
+ extensions = %w'aac aiff au flac m4a mka mp3 ra voc wav wma'
19
+ confidence = {
20
+ aac: 0.86,
21
+ aiff: 0.99,
22
+ au: 0.99,
23
+ flac: 0.99,
24
+ m4a: 0.93,
25
+ mka: 0.94,
26
+ mp3: 0.95,
27
+ ra: 0.92,
28
+ voc: 0.99,
29
+ wav: 0.99,
30
+ wma: 0.9
31
+ }
32
+ targets = %w'mp3 flac wav'
33
+ sources = %w'carlin_disappointed greensleeves king_nonviolence top_gun_secret'
34
+ quality = {
35
+ carlin_disappointed: 1.0,
36
+ greensleeves: 0.95,
37
+ king_nonviolence: 1.0,
38
+ top_gun_secret: 0.95
39
+ }
40
+
41
+ let(:data_dir) {File.join(file_dir, 'data', 'audio')}
42
+
43
+ context 'converts' do
44
+ sources.each do |source|
45
+ extensions.each do |ext|
46
+ next unless (File.exists?(File.join(File.dirname(__FILE__), 'data', 'audio', "#{source}.#{ext}")))
47
+ (targets - [ext]).each do |tgt|
48
+ it "#{source} #{ext} to #{tgt}" do
49
+ src_file = File.join(data_dir, "#{source}.#{ext}")
50
+ ref_file = File.join(data_dir, "#{source}.#{tgt}")
51
+ tgt_file = File.join('', 'tmp', "test.#{source}.#{ext}.#{tgt}")
52
+ FileUtils.remove tgt_file, force: true
53
+ FileUtils.mkdir_p File.dirname(tgt_file)
54
+ result = converter.convert(src_file, tgt_file, tgt.upcase.to_sym)
55
+ expect(result).to eq tgt_file
56
+ expect(result).to sound_like ref_file, confidence[ext.to_sym] * quality[source.to_sym], 11025, 1
57
+ FileUtils.remove tgt_file, force: true
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
63
+
64
+ end
65
+
66
+ end
@@ -0,0 +1,166 @@
1
+ # encoding: utf-8
2
+ require 'spec_helper'
3
+
4
+ require 'libis/format/converter/image_converter'
5
+ require 'libis/format/converter/jp2_converter'
6
+
7
+ describe 'Converters' do
8
+
9
+ let(:repository) {Libis::Format::Converter::Repository}
10
+ let(:file_dir) {File.dirname(__FILE__)}
11
+
12
+ before(:all) {
13
+ Libis::Tools::Config.logger.level = 'off'
14
+ }
15
+
16
+ context 'Image Converter' do
17
+
18
+ let(:converter) {Libis::Format::Converter::ImageConverter.new}
19
+ let(:diff_file) {File.join('', 'tmp', 'diff.jpg')}
20
+
21
+ it 'converts TIFF to JPEG' do
22
+ src_file = File.join(file_dir, 'data', 'test.tif')
23
+ ref_file = File.join(file_dir, 'data', 'test.jpg')
24
+ tgt_file = File.join('', 'tmp', 'test.jpg')
25
+ FileUtils.mkdir_p File.dirname(tgt_file)
26
+ converter.delete_date
27
+ result = converter.convert(src_file, tgt_file, :JPG)
28
+ expect(result).to eq tgt_file
29
+ compare = MiniMagick::Tool::Compare.new
30
+ compare << ref_file << tgt_file
31
+ compare.metric << 'MAE'
32
+ compare.fuzz << '1%'
33
+ compare << diff_file
34
+ compare.call {|_, _, status| expect(status).to be 0}
35
+ FileUtils.rm tgt_file, force: true
36
+ FileUtils.rm diff_file, force: true
37
+ end
38
+
39
+ it 'converts TIFF to PNG' do
40
+ src_file = File.join(file_dir, 'data', 'test.tif')
41
+ ref_file = File.join(file_dir, 'data', 'test.png')
42
+ tgt_file = File.join('', 'tmp', 'test.png')
43
+ FileUtils.mkdir_p File.dirname(tgt_file)
44
+ converter.delete_date
45
+ converter.page(0)
46
+ result = converter.convert(src_file, tgt_file, :PNG)
47
+ expect(result).to eq tgt_file
48
+ compare = MiniMagick::Tool::Compare.new
49
+ compare << ref_file << tgt_file
50
+ compare.metric << 'MAE'
51
+ compare << diff_file
52
+ compare.call {|_, _, status| expect(status).to be 0}
53
+ FileUtils.rm tgt_file, force: true
54
+ FileUtils.rm diff_file, force: true
55
+ end
56
+
57
+ it 'converts PDF to TIFF' do
58
+ src_file = File.join(file_dir, 'data', 'test.pdf')
59
+ ref_file = File.join(file_dir, 'data', 'test.pdf.tif')
60
+ tgt_file = File.join('', 'tmp', 'test.pdf.tif')
61
+ FileUtils.mkdir_p File.dirname(tgt_file)
62
+ converter.delete_date
63
+ result = converter.convert(src_file, tgt_file, :TIFF)
64
+ expect(result).to eq tgt_file
65
+ compare = MiniMagick::Tool::Compare.new
66
+ compare << ref_file << tgt_file
67
+ compare.metric << 'AE'
68
+ compare.fuzz << '100%'
69
+ compare << diff_file
70
+ compare.call {|_, _, status| expect(status).to be 0}
71
+ FileUtils.rm tgt_file, force: true
72
+ FileUtils.rm diff_file, force: true
73
+ end
74
+
75
+ it 'converts TIFF to PNG with many options' do
76
+ src_file = File.join(file_dir, 'data', 'test.tif')
77
+ ref_file = File.join(file_dir, 'data', 'test-options.png')
78
+ tgt_file = File.join('', 'tmp', 'test-options.png')
79
+ FileUtils.mkdir_p File.dirname(tgt_file)
80
+ converter.watermark(text: 'RSPEC', size: 5, opacity: 0.1, rotation: 15, gap: 0.5, composition: 'modulate')
81
+ converter.delete_date
82
+ result = converter.convert(src_file, tgt_file, :PNG, options: {scale: '150%'})
83
+ expect(result).to eq tgt_file
84
+ compare = MiniMagick::Tool::Compare.new
85
+ compare << ref_file << tgt_file
86
+ compare.metric << 'AE'
87
+ compare.fuzz << '100%'
88
+ compare << diff_file
89
+ compare.call do |_stdin, _stdout, status|
90
+ expect(status).to be 0
91
+ end
92
+ FileUtils.rm tgt_file, force: true
93
+ FileUtils.rm diff_file, force: true
94
+ end
95
+
96
+ it 'converts only first page of multipage TIFF to JP2' do
97
+ src_file = File.join(file_dir, 'data', 'multipage.tif')
98
+ ref_file = File.join(file_dir, 'data', 'multipage.tif.jp2')
99
+ tgt_file = File.join('', 'tmp', 'test.jp2')
100
+ FileUtils.mkdir_p File.dirname(tgt_file)
101
+ converter.delete_date
102
+ converter.quiet(true)
103
+ converter.page(0)
104
+ result = converter.convert(src_file, tgt_file, :JP2)
105
+ expect(result).to eq tgt_file
106
+ expect(File.exist?(tgt_file)).to be_truthy
107
+ compare = MiniMagick::Tool::Compare.new
108
+ compare << ref_file << tgt_file
109
+ compare.metric << 'MAE'
110
+ compare.fuzz << '10%'
111
+ compare << diff_file
112
+ compare.call {|_, _, status| expect(status).to be 0}
113
+ FileUtils.rm tgt_file, force: true
114
+ FileUtils.rm diff_file, force: true
115
+ end
116
+
117
+ it 'converts TIFF to JP2' do
118
+ src_file = File.join(file_dir, 'data', 'test.tif')
119
+ tgt_file = File.join('', 'tmp', 'test.jp2')
120
+ FileUtils.mkdir_p File.dirname(tgt_file)
121
+ converter.delete_date
122
+ result = converter.convert(src_file, tgt_file, :JP2)
123
+ expect(result).to eq tgt_file
124
+ expect(File.exist?(tgt_file)).to be_truthy
125
+ FileUtils.rm tgt_file, force: true
126
+ end
127
+
128
+
129
+ end
130
+
131
+ context 'JP2 Converter', if: File.exists?(Libis::Format::Config[:j2kdriver]) do
132
+
133
+ let(:converter) {Libis::Format::Converter::Jp2Converter.new}
134
+ let(:diff_file) {File.join('', 'tmp', 'diff.jpg')}
135
+
136
+ it 'converts TIFF to JP2' do
137
+ src_file = File.join(file_dir, 'data', 'test.tif')
138
+ tgt_file = File.join('', 'tmp', 'test.jp2')
139
+ FileUtils.mkdir_p File.dirname(tgt_file)
140
+ result = converter.convert(src_file, tgt_file, :JP2)
141
+ expect(result).to eq tgt_file
142
+ expect(File.exist?(tgt_file)).to be_truthy
143
+ FileUtils.rm tgt_file, force: true
144
+ end
145
+
146
+ it 'converts only first page of multipage TIFF to JP2' do
147
+ src_file = File.join(file_dir, 'data', 'multipage.tif')
148
+ ref_file = File.join(file_dir, 'data', 'multipage.tif.jp2')
149
+ tgt_file = File.join('', 'tmp', 'test.jp2')
150
+ FileUtils.mkdir_p File.dirname(tgt_file)
151
+ result = converter.convert(src_file, tgt_file, :JP2)
152
+ expect(result).to eq tgt_file
153
+ expect(File.exist?(tgt_file)).to be_truthy
154
+ compare = MiniMagick::Tool::Compare.new
155
+ compare << ref_file << tgt_file
156
+ compare.metric << 'MAE'
157
+ compare.fuzz << '10%'
158
+ compare << diff_file
159
+ compare.call {|_, _, status| expect(status).to be 0}
160
+ FileUtils.rm tgt_file, force: true
161
+ FileUtils.rm diff_file, force: true
162
+ end
163
+
164
+ end
165
+
166
+ end