multi_exiftool 0.18.0 → 0.19.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f5e0da6a6777fec53fcab69c4b0820b6c4ed0de051f52f6954c0b4ed77aed3d3
4
- data.tar.gz: 1f5990491326fd50822a5b53ff0fd7e772e5ee778a870a789baaf9d714b15246
3
+ metadata.gz: c0c11e4d78ddfece60352716273188dbdb365174be7215d2df1136de2a938ab1
4
+ data.tar.gz: 8258baf1ae7de0dc1c2d9b633e51f06b7b5e07417713cbcbbdba99960c591027
5
5
  SHA512:
6
- metadata.gz: d0eb9046eaeed06017ce13fce678d00243ffb79c17cc4592b3ad4d41e79ec38e903e09432a9857db79c27e61ac34aa1c45086d9f3b6b09db3b15b72015be2d87
7
- data.tar.gz: faf64b4908f2ed242d32e3d80920628b10a3618c021a643be158d80463f79561c0d0a798ef3eb356ec44ba47384d5bb3976b1b3e0f4b36c8d0dd8fa379590e31
6
+ metadata.gz: 82db0ba81f5259a4aa7f16edaac6a7cc25eefc8779f512edcdacff51fc503e8a08548be381e0c2643ebfe3357f15eda569945129d70aae81c1539ddb88ca7fbc
7
+ data.tar.gz: 1155c81594420037d1e12c3086346d47ccba93fc0a3d5be0f264f1855ecc48441d2a54aee9d166735f6517e1da8b049ccb6c6f83c6e6fd4e36621972df0fee6a
data/Changelog CHANGED
@@ -1,3 +1,10 @@
1
+ 0.19.0
2
+ Maintenance release: Upgrade to rim 3.0 for development and minimize gem file
3
+ size.
4
+
5
+ 0.18.1
6
+ Fix a bug with large output which causes the hanging when reading data.
7
+
1
8
  0.18.0
2
9
  Adapt handling of errors. Only lines in STDERR which starts with "Error:" or
3
10
  "Warning:" are now interpreted as error messages. Therefore ExifTool 11.10 is
data/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License
2
2
 
3
- Copyright (c) 2009-2019 Jan Friedrich
3
+ Copyright (c) 2009-2012, 2014-2020, 2022-2024 Jan Friedrich
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
@@ -0,0 +1,13 @@
1
+ require 'multi_exiftool'
2
+
3
+ if ARGV.empty?
4
+ $stderr.puts 'No filenames given.'
5
+ exit -1
6
+ end
7
+
8
+ reader = MultiExiftool::Reader.new
9
+ reader.filenames = ARGV
10
+ results = reader.read
11
+ results.each do |values|
12
+ puts "#{values.file_name}: #{values.comment}"
13
+ end
@@ -0,0 +1,19 @@
1
+ require 'multi_exiftool'
2
+
3
+ if ARGV.empty?
4
+ $stderr.puts 'No filenames given.'
5
+ exit -1
6
+ end
7
+
8
+ puts 'Please enter a comment for the given files:'
9
+ comment = $stdin.gets.chomp
10
+
11
+ writer = MultiExiftool::Writer.new
12
+ writer.filenames = ARGV
13
+ writer.overwrite_original = true
14
+ writer.values = {comment: comment}
15
+ if writer.write
16
+ puts 'ok'
17
+ else
18
+ puts writer.errors.join
19
+ end
@@ -0,0 +1,28 @@
1
+ require 'multi_exiftool'
2
+
3
+ if ARGV.empty?
4
+ $stderr.puts 'No filenames given.'
5
+ exit -1
6
+ end
7
+
8
+ reader = MultiExiftool::Reader.new
9
+ reader.filenames = ARGV
10
+ reader.group = 0
11
+ results = reader.read
12
+ results.each do |values|
13
+ # direct access
14
+ puts values.file.filename
15
+ # access via block without parameter
16
+ values.iptc do
17
+ self.keywords do
18
+ puts " Keywords (IPCT): #{Array(self).join(', ')}"
19
+ end
20
+ end
21
+ # access via block with parameter
22
+ values.xmp do |xmp|
23
+ xmp.keywords do |kw|
24
+ puts " Keywords (XMP): #{Array(kw).join(', ')}"
25
+ end
26
+ end
27
+ end
28
+
@@ -0,0 +1,33 @@
1
+ require 'multi_exiftool'
2
+ require 'yaml'
3
+
4
+ if ARGV.empty?
5
+ $stderr.puts 'No filenames given.'
6
+ exit -1
7
+ end
8
+
9
+ puts 'Please enter a description for the given files:'
10
+ description = $stdin.gets.chomp
11
+
12
+ puts 'Please enter a caption for the given files:'
13
+ caption = $stdin.gets.chomp
14
+
15
+ writer = MultiExiftool::Writer.new
16
+ writer.filenames = ARGV
17
+
18
+ # specifying group by prefix
19
+ writer.values = {'exif:imagedescription' => description, 'xmp:description' => description}
20
+
21
+ # specifying group hierarchical
22
+ writer.values.merge! YAML.load <<-END
23
+ iptc:
24
+ caption-abstract: #{caption}
25
+ xmp:
26
+ caption: #{caption}
27
+ END
28
+
29
+ if writer.write
30
+ puts 'ok'
31
+ else
32
+ puts writer.errors.join
33
+ end
@@ -0,0 +1,35 @@
1
+ require 'multi_exiftool'
2
+
3
+ if ARGV.empty?
4
+ $stderr.puts 'No filenames given.'
5
+ exit -1
6
+ end
7
+
8
+ # Reading only the tags Orientation and Rotation using the -n option of exiftool
9
+ results, errors = MultiExiftool.read(ARGV, tags: %w[orientation rotation], numerical: true)
10
+
11
+ unless errors.empty?
12
+ $stderr.puts reader.errors
13
+ exit 1
14
+ end
15
+
16
+ # Ensuring that for all files with EXIF rotation value of 76 the EXIF value orientation is 6
17
+ # and for EXIF rotation value 82 the EXIF orientation value is 8
18
+
19
+ # Determine the filenames
20
+ update_orientation_to_6 = results.select {|r| r.rotation == 76 && r.orientation != 6}.map {|r| r.sourcefile}
21
+ update_orientation_to_8 = results.select {|r| r.rotation == 82 && r.orientation != 8}.map {|r| r.sourcefile}
22
+
23
+ # Update
24
+ errors = []
25
+ unless update_orientation_to_6.empty?
26
+ errors += MultiExiftool.write(update_orientation_to_6, {orientation: 6}, numerical: true, overwrite_original: true)
27
+ end
28
+ unless update_orientation_to_8.empty?
29
+ errors += MultiExiftool.write(update_orientation_to_8, {orientation: 8}, numerical: true, overwrite_original: true)
30
+ end
31
+
32
+ unless errors.empty?
33
+ $stderr.puts reader.errors
34
+ exit 1
35
+ end
@@ -69,8 +69,8 @@ module MultiExiftool
69
69
  end
70
70
 
71
71
  def parse_results
72
- parse_errors
73
72
  stdout = @stdout.read
73
+ parse_errors
74
74
  json = JSON.parse(stdout)
75
75
  json.map {|values| Values.new(values)}
76
76
  rescue JSON::ParserError
@@ -8,7 +8,7 @@ require_relative 'multi_exiftool/batch'
8
8
 
9
9
  module MultiExiftool
10
10
 
11
- VERSION = '0.18.0'
11
+ VERSION = '0.19.0'
12
12
 
13
13
  @exiftool_command = 'exiftool'
14
14
 
metadata CHANGED
@@ -1,14 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: multi_exiftool
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.18.0
4
+ version: 0.19.0
5
5
  platform: ruby
6
+ original_platform: ''
6
7
  authors:
7
8
  - Jan Friedrich
8
9
  bindir: bin
9
10
  cert_chain: []
10
- date: 2024-04-04 00:00:00.000000000 Z
11
+ date: 2024-11-23 00:00:00.000000000 Z
11
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: contest
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0.1'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '0.1'
27
+ - !ruby/object:Gem::Dependency
28
+ name: fileutils
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 1.7.3
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: 1.7.3
12
41
  - !ruby/object:Gem::Dependency
13
42
  name: rake
14
43
  requirement: !ruby/object:Gem::Requirement
@@ -24,33 +53,33 @@ dependencies:
24
53
  - !ruby/object:Gem::Version
25
54
  version: '0'
26
55
  - !ruby/object:Gem::Dependency
27
- name: rim
56
+ name: regtest
28
57
  requirement: !ruby/object:Gem::Requirement
29
58
  requirements:
30
59
  - - "~>"
31
60
  - !ruby/object:Gem::Version
32
- version: '2.17'
61
+ version: '2'
33
62
  type: :development
34
63
  prerelease: false
35
64
  version_requirements: !ruby/object:Gem::Requirement
36
65
  requirements:
37
66
  - - "~>"
38
67
  - !ruby/object:Gem::Version
39
- version: '2.17'
68
+ version: '2'
40
69
  - !ruby/object:Gem::Dependency
41
- name: contest
70
+ name: rim
42
71
  requirement: !ruby/object:Gem::Requirement
43
72
  requirements:
44
73
  - - "~>"
45
74
  - !ruby/object:Gem::Version
46
- version: '0.1'
75
+ version: '3.0'
47
76
  type: :development
48
77
  prerelease: false
49
78
  version_requirements: !ruby/object:Gem::Requirement
50
79
  requirements:
51
80
  - - "~>"
52
81
  - !ruby/object:Gem::Version
53
- version: '0.1'
82
+ version: '3.0'
54
83
  - !ruby/object:Gem::Dependency
55
84
  name: test-unit
56
85
  requirement: !ruby/object:Gem::Requirement
@@ -65,20 +94,6 @@ dependencies:
65
94
  - - ">="
66
95
  - !ruby/object:Gem::Version
67
96
  version: '0'
68
- - !ruby/object:Gem::Dependency
69
- name: regtest
70
- requirement: !ruby/object:Gem::Requirement
71
- requirements:
72
- - - "~>"
73
- - !ruby/object:Gem::Version
74
- version: '2'
75
- type: :development
76
- prerelease: false
77
- version_requirements: !ruby/object:Gem::Requirement
78
- requirements:
79
- - - "~>"
80
- - !ruby/object:Gem::Version
81
- version: '2'
82
97
  description: This library is a wrapper for the ExifTool command-line application (https://exiftool.org)
83
98
  written by Phil Harvey. It is designed for dealing with multiple files at once by
84
99
  creating commands to call exiftool with various arguments, call it and parsing the
@@ -88,46 +103,31 @@ executables: []
88
103
  extensions: []
89
104
  extra_rdoc_files: []
90
105
  files:
91
- - "./.aspell.pws"
92
106
  - Changelog
93
- - Gemfile
94
107
  - LICENSE
95
108
  - README.md
96
- - Rakefile
109
+ - examples/01_simple_reading.rb
110
+ - examples/02_simple_writing.rb
111
+ - examples/03_reading_using_groups.rb
112
+ - examples/04_writing_using_groups.rb
113
+ - examples/05_functional_api.rb
97
114
  - lib/multi_exiftool.rb
98
115
  - lib/multi_exiftool/batch.rb
99
116
  - lib/multi_exiftool/executable.rb
100
117
  - lib/multi_exiftool/reader.rb
101
118
  - lib/multi_exiftool/values.rb
102
119
  - lib/multi_exiftool/writer.rb
103
- - multi_exiftool.gemspec
104
- - regtest/read_all_tags.rb
105
- - regtest/read_all_tags.yml
106
- - regtest/test.jpg
107
- - test/data/a.jpg
108
- - test/data/b.jpg
109
- - test/data/c.jpg
110
- - test/data/example.config
111
- - test/helper.rb
112
- - test/test_batch.rb
113
- - test/test_executable.rb
114
- - test/test_exiftool_stuff.rb
115
- - test/test_functional_api.rb
116
- - test/test_reader.rb
117
- - test/test_values.rb
118
- - test/test_values_using_groups.rb
119
- - test/test_writer.rb
120
- - test/test_writer_groups.rb
121
120
  homepage: https://github.com/janfri/multi_exiftool
122
121
  licenses:
123
122
  - MIT
124
123
  metadata: {}
125
- post_install_message: "\n+-----------------------------------------------------------------------+\n|
126
- Please ensure you have installed exiftool version 11.10 or higher and |\n| it's
127
- found in your PATH (Try \"exiftool -ver\" on your commandline). |\n| For more
128
- details see |\n| https://exiftool.org/install.html
129
- \ |\n+-----------------------------------------------------------------------+\n
130
- \ "
124
+ post_install_message: |
125
+ +-----------------------------------------------------------------------+
126
+ | Please ensure you have installed exiftool version 11.10 or higher and |
127
+ | it's found in your PATH (Try "exiftool -ver" on your commandline). |
128
+ | For more details see |
129
+ | https://exiftool.org/install.html |
130
+ +-----------------------------------------------------------------------+
131
131
  rdoc_options: []
132
132
  require_paths:
133
133
  - lib
data/.aspell.pws DELETED
@@ -1,35 +0,0 @@
1
- personal_ws-1.1 en 34
2
- Coenen
3
- ExifTool
4
- Friedrich
5
- Gemfile
6
- Gitorious
7
- MERCHANTABILITY
8
- MultiExiftool
9
- MyConversion
10
- NONINFRINGEMENT
11
- PartOfSet
12
- README
13
- SemVer
14
- SemVerTag
15
- api
16
- config
17
- dir
18
- exiftool
19
- filenames
20
- gemspec
21
- gittycat
22
- gmail
23
- janfri
24
- jpg
25
- multi
26
- ok
27
- prepend
28
- refactoring
29
- stderr
30
- stdin
31
- sublicense
32
- szTheory
33
- timestamps
34
- tmpdir
35
- utc
data/Gemfile DELETED
@@ -1,3 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- gemspec
data/Rakefile DELETED
@@ -1,31 +0,0 @@
1
- # encoding: utf-8
2
- # frozen_string_literal: true
3
-
4
- require_relative 'lib/multi_exiftool'
5
- require 'rim/tire'
6
- require 'rim/version'
7
- require 'rim/regtest'
8
-
9
- Rim.setup do |p|
10
- p.name = 'multi_exiftool'
11
- p.version = MultiExiftool::VERSION
12
- p.authors = 'Jan Friedrich'
13
- p.email = 'janfri26@gmail.com'
14
- p.summary = 'This library is a wrapper for the ExifTool command-line application (https://exiftool.org).'
15
- p.description = 'This library is a wrapper for the ExifTool command-line application (https://exiftool.org) written by Phil Harvey. It is designed for dealing with multiple files at once by creating commands to call exiftool with various arguments, call it and parsing the results.'
16
- p.ruby_version = '>=1.9.1'
17
- p.license = 'MIT'
18
- p.homepage = 'https://github.com/janfri/multi_exiftool'
19
- p.install_message = %q{
20
- +-----------------------------------------------------------------------+
21
- | Please ensure you have installed exiftool version 11.10 or higher and |
22
- | it's found in your PATH (Try "exiftool -ver" on your commandline). |
23
- | For more details see |
24
- | https://exiftool.org/install.html |
25
- +-----------------------------------------------------------------------+
26
- }
27
- p.development_dependencies << %w(contest ~>0.1)
28
- p.development_dependencies << 'test-unit'
29
- p.requirements << 'exiftool, version 11.10 or higher'
30
- p.test_warning = false
31
- end
@@ -1,34 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
- # stub: multi_exiftool 0.18.0 ruby lib
3
- #
4
- # This file is automatically generated by rim.
5
- # PLEASE DO NOT EDIT IT DIRECTLY!
6
- # Change the values in Rim.setup in Rakefile instead.
7
-
8
- Gem::Specification.new do |s|
9
- s.name = "multi_exiftool"
10
- s.version = "0.18.0"
11
-
12
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
13
- s.require_paths = ["lib"]
14
- s.authors = ["Jan Friedrich"]
15
- s.date = "2024-04-04"
16
- s.description = "This library is a wrapper for the ExifTool command-line application (https://exiftool.org) written by Phil Harvey. It is designed for dealing with multiple files at once by creating commands to call exiftool with various arguments, call it and parsing the results."
17
- s.email = "janfri26@gmail.com"
18
- s.files = ["./.aspell.pws", "Changelog", "Gemfile", "LICENSE", "README.md", "Rakefile", "lib/multi_exiftool", "lib/multi_exiftool.rb", "lib/multi_exiftool/batch.rb", "lib/multi_exiftool/executable.rb", "lib/multi_exiftool/reader.rb", "lib/multi_exiftool/values.rb", "lib/multi_exiftool/writer.rb", "multi_exiftool.gemspec", "regtest/read_all_tags.rb", "regtest/read_all_tags.yml", "regtest/test.jpg", "test/data", "test/data/a.jpg", "test/data/b.jpg", "test/data/c.jpg", "test/data/example.config", "test/helper.rb", "test/test_batch.rb", "test/test_executable.rb", "test/test_exiftool_stuff.rb", "test/test_functional_api.rb", "test/test_reader.rb", "test/test_values.rb", "test/test_values_using_groups.rb", "test/test_writer.rb", "test/test_writer_groups.rb"]
19
- s.homepage = "https://github.com/janfri/multi_exiftool"
20
- s.licenses = ["MIT"]
21
- s.post_install_message = "\n+-----------------------------------------------------------------------+\n| Please ensure you have installed exiftool version 11.10 or higher and |\n| it's found in your PATH (Try \"exiftool -ver\" on your commandline). |\n| For more details see |\n| https://exiftool.org/install.html |\n+-----------------------------------------------------------------------+\n "
22
- s.required_ruby_version = Gem::Requirement.new(">= 1.9.1")
23
- s.requirements = ["exiftool, version 11.10 or higher"]
24
- s.rubygems_version = "3.6.0.dev"
25
- s.summary = "This library is a wrapper for the ExifTool command-line application (https://exiftool.org)."
26
-
27
- s.specification_version = 4
28
-
29
- s.add_development_dependency(%q<rake>, [">= 0"])
30
- s.add_development_dependency(%q<rim>, ["~> 2.17"])
31
- s.add_development_dependency(%q<contest>, ["~> 0.1"])
32
- s.add_development_dependency(%q<test-unit>, [">= 0"])
33
- s.add_development_dependency(%q<regtest>, ["~> 2"])
34
- end
@@ -1,6 +0,0 @@
1
- require 'regtest'
2
- require 'multi_exiftool'
3
-
4
- Regtest.sample 'read all tags' do
5
- MultiExiftool.read('regtest/test.jpg', tags: %w(-filemodifydate -fileaccessdate -fileinodechangedate -filepermissions))
6
- end
@@ -1,112 +0,0 @@
1
- ---
2
- sample: read all tags
3
- result:
4
- - - !ruby/object:MultiExiftool::Values
5
- values:
6
- sourcefile: regtest/test.jpg
7
- exiftoolversion: 12.26
8
- filename: test.jpg
9
- directory: regtest
10
- filesize: 43 KiB
11
- filetype: JPEG
12
- filetypeextension: jpg
13
- mimetype: image/jpeg
14
- jfifversion: 1.01
15
- exifbyteorder: Big-endian (Motorola, MM)
16
- imagedescription: KONICA MINOLTA DIGITAL CAMERA
17
- make: KONICA MINOLTA
18
- model: DYNAX 7D
19
- orientation: Horizontal (normal)
20
- xresolution: 72
21
- yresolution: 72
22
- resolutionunit: inches
23
- software: DYNAX 7D v1.10
24
- modifydate: 2005:09:13 20:08:50
25
- ycbcrpositioning: Centered
26
- exposuretime: 1/60
27
- fnumber: 9.5
28
- exposureprogram: Program AE
29
- iso: 400
30
- exifversion: '0221'
31
- datetimeoriginal: 2005:09:13 20:08:50
32
- createdate: 2005:09:13 20:08:50
33
- componentsconfiguration: Y, Cb, Cr, -
34
- brightnessvalue: 4.5
35
- exposurecompensation: -1
36
- maxaperturevalue: 4.5
37
- meteringmode: Multi-segment
38
- lightsource: Unknown
39
- flash: Off, Did not fire
40
- focallength: 75.0 mm
41
- subjectarea: 1504 1000 256 304
42
- makernoteversion: MLT0
43
- minoltaimagesize: Large
44
- whitebalance: Auto
45
- focusmode: AF-A
46
- afpoints: Center
47
- flashmode: Normal
48
- isosetting: 400
49
- freememorycardimages: 202
50
- hueadjustment: 0
51
- rotation: Horizontal (normal)
52
- imagenumber: 6
53
- noisereduction: Unknown (2)
54
- imagenumber2: 50
55
- zonematchingon: 'Off'
56
- compressedimagesize: 1598477
57
- previewimagestart: 39146
58
- previewimagelength: 0
59
- scenemode: Standard
60
- colormode: Natural sRGB
61
- minoltaquality: Fine
62
- flashexposurecomp: 0
63
- teleconverter: None
64
- imagestabilization: 'On'
65
- zonematching: ISO Setting Used
66
- colortemperature: 0
67
- lenstype: Minolta AF 28-135mm F4-4.5 or Other Lens
68
- usercomment: ''
69
- flashpixversion: '0100'
70
- colorspace: sRGB
71
- exifimagewidth: 3008
72
- exifimageheight: 2000
73
- customrendered: Normal
74
- exposuremode: Auto
75
- digitalzoomratio: 0
76
- focallengthin35mmformat: 112 mm
77
- scenecapturetype: Standard
78
- gaincontrol: Low gain up
79
- contrast: Normal
80
- saturation: Normal
81
- sharpness: Normal
82
- printimversion: '0300'
83
- compression: JPEG (old-style)
84
- thumbnailoffset: 39268
85
- thumbnaillength: 1820
86
- currentiptcdigest: e5ef1faceaa3d410961c63ab090136c7
87
- applicationrecordversion: 4
88
- supplementalcategories: Natur
89
- keywords:
90
- - Orange
91
- - Rot
92
- xmptoolkit: Image::ExifTool 9.45
93
- title: Abenddämmerung
94
- imagewidth: 1
95
- imageheight: 1
96
- encodingprocess: Baseline DCT, Huffman coding
97
- bitspersample: 8
98
- colorcomponents: 3
99
- ycbcrsubsampling: YCbCr4:2:0 (2 2)
100
- aperture: 9.5
101
- imagesize: 1x1
102
- lensid: Tokina AT-X 242 AF 24-200mm F3.5-5.6
103
- megapixels: 1.0e-06
104
- scalefactor35efl: 1.5
105
- shutterspeed: 1/60
106
- thumbnailimage: "(Binary data 1820 bytes, use -b option to extract)"
107
- circleofconfusion: 0.020 mm
108
- fov: 18.3 deg
109
- focallength35efl: '75.0 mm (35 mm equivalent: 112.0 mm)'
110
- hyperfocaldistance: 29.43 m
111
- lightvalue: 10.4
112
- - []
data/regtest/test.jpg DELETED
Binary file
data/test/data/a.jpg DELETED
Binary file
data/test/data/b.jpg DELETED
Binary file
data/test/data/c.jpg DELETED
Binary file