iptc 0.0.5 → 0.0.7
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.
- data/README.md +3 -1
- data/lib/iptc/jpeg/image.rb +1 -1
- data/lib/iptc/jpeg/marker.rb +3 -3
- data/lib/iptc/jpeg/marker_headers.rb +2 -0
- data/lib/iptc/jpeg/markers.rb +67 -28
- data/lib/iptc/multiple_hash.rb +3 -0
- data/lib/iptc/version.rb +1 -1
- metadata +21 -43
data/README.md
CHANGED
@@ -8,4 +8,6 @@ Read IPTC::JPEG::Image for more information.
|
|
8
8
|
The IPTC library parses the APP13 JPEG Tag and generates a hash of properties for a given file.
|
9
9
|
|
10
10
|
Original code from http://raa.ruby-lang.org/project/jpeg-jfif-iptc/
|
11
|
-
Gemified, reorganized and modified in 2010 by Jens Kraemer.
|
11
|
+
Gemified, reorganized and modified in 2010 by Jens Kraemer.
|
12
|
+
|
13
|
+
Ownership retaken from Github in 2011 by Pierre Baillet.
|
data/lib/iptc/jpeg/image.rb
CHANGED
@@ -31,7 +31,7 @@ module IPTC
|
|
31
31
|
def initialize data_name, content, quick=true
|
32
32
|
@logger = Logger.new(STDOUT)
|
33
33
|
@logger.datetime_format = "%H:%M:%S"
|
34
|
-
@logger.level =
|
34
|
+
@logger.level = $DEBUG?(Logger::DEBUG):(Logger::INFO)
|
35
35
|
|
36
36
|
@data_name = data_name
|
37
37
|
@content = content
|
data/lib/iptc/jpeg/marker.rb
CHANGED
@@ -12,9 +12,9 @@ module IPTC
|
|
12
12
|
|
13
13
|
# The NewMarker constructor method.
|
14
14
|
# Inspect the object space in order to find something usable later
|
15
|
-
def Marker.NewMarker(type,data, logger)
|
15
|
+
def Marker.NewMarker(type, data, logger)
|
16
16
|
marker_class = "#{type}Marker"
|
17
|
-
if JPEG::Markers.constants.include?(marker_class.
|
17
|
+
if JPEG::Markers.constants.include?(marker_class.to_sym)
|
18
18
|
return JPEG::Markers.const_get(marker_class).new(type, data)
|
19
19
|
else
|
20
20
|
if !@@missing.include?(type)
|
@@ -39,7 +39,7 @@ module IPTC
|
|
39
39
|
end
|
40
40
|
end
|
41
41
|
|
42
|
-
def initialize(type,data)
|
42
|
+
def initialize(type, data)
|
43
43
|
@logger = Logger.new(STDOUT)
|
44
44
|
@logger.datetime_format = "%H:%M:%S"
|
45
45
|
@logger.level = $DEBUG?(Logger::DEBUG):(Logger::INFO)
|
data/lib/iptc/jpeg/markers.rb
CHANGED
@@ -43,7 +43,7 @@ module IPTC
|
|
43
43
|
# See also the IPTC::MarkerNomenclature.
|
44
44
|
class APP13Marker < Marker
|
45
45
|
def initialize(type, data)
|
46
|
-
@header = "Photoshop 3.0\
|
46
|
+
@header = "Photoshop 3.0\000"
|
47
47
|
|
48
48
|
super(type, data)
|
49
49
|
@prefix = "iptc"
|
@@ -53,46 +53,85 @@ module IPTC
|
|
53
53
|
return read(@header.length)==@header
|
54
54
|
end
|
55
55
|
|
56
|
+
SHORT = 1
|
57
|
+
WORD = 2
|
58
|
+
LONG = 4
|
59
|
+
|
60
|
+
def word
|
61
|
+
read(WORD).unpack("n")[0]
|
62
|
+
end
|
63
|
+
def long
|
64
|
+
read(LONG).unpack("N")[0]
|
65
|
+
end
|
66
|
+
|
56
67
|
def parse
|
57
68
|
l "APP13 marker parsed"
|
58
|
-
@markers = Array.new
|
69
|
+
@markers = Array.new
|
70
|
+
|
71
|
+
# http://www.fileformat.info/format/psd/egff.htm
|
72
|
+
# this one is much up to date.
|
59
73
|
|
74
|
+
while @content.pos < @content.length - 1
|
75
|
+
l @content.pos
|
76
|
+
l @content.length
|
60
77
|
|
61
|
-
|
62
|
-
|
63
|
-
|
78
|
+
eight_bim = read(LONG)
|
79
|
+
l eight_bim
|
80
|
+
raise "Not a 8BIM packet(#{eight_bim.inspect} #{read(10)}" if eight_bim != "8BIM"
|
81
|
+
@bim_type = word()
|
64
82
|
|
65
|
-
|
83
|
+
# Read name length and normalize to even number of bytes
|
84
|
+
# Weird, always read 4 bytes
|
85
|
+
padding = read(4)
|
86
|
+
bim_size = word()
|
66
87
|
|
67
|
-
|
88
|
+
# http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/Photoshop.html
|
89
|
+
case @bim_type
|
68
90
|
|
69
|
-
|
91
|
+
when 0x0404 # IPTC
|
92
|
+
content = StringIO.new(read(bim_size))
|
70
93
|
|
71
|
-
# http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/IPTC.html
|
72
|
-
case header
|
73
|
-
when "\x1c\x01"
|
74
|
-
# skip the envelope
|
75
94
|
while !content.eof?
|
76
|
-
|
77
|
-
|
78
|
-
|
95
|
+
|
96
|
+
header = content.read(2).unpack("n")[0]
|
97
|
+
|
98
|
+
# http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/IPTC.html
|
99
|
+
case header
|
100
|
+
when 0x1C01
|
101
|
+
# skip the envelope
|
102
|
+
while !content.eof?
|
103
|
+
if content.read(1) == "\x1c"
|
104
|
+
content.pos = content.pos - 1
|
105
|
+
break
|
106
|
+
end
|
107
|
+
end
|
108
|
+
when 0x1C02
|
109
|
+
|
110
|
+
type = content.read(1).unpack('c')[0]
|
111
|
+
size = content.read(2)
|
112
|
+
value = content.read(size.unpack('n')[0])
|
113
|
+
|
114
|
+
l "Found marker #{type}"
|
115
|
+
marker = IPTC::Marker.new(type, value)
|
116
|
+
@values[@prefix+"/"+IPTC::MarkerNomenclature.markers(type.to_i).name] ||= []
|
117
|
+
@values[@prefix+"/"+IPTC::MarkerNomenclature.markers(type.to_i).name] << value
|
118
|
+
@markers << marker
|
119
|
+
|
120
|
+
else
|
121
|
+
# raise InvalidBlockException.new("Invalid BIM segment #{header.inspect} in marker\n#{@original_content.inspect}")
|
79
122
|
end
|
80
123
|
end
|
81
|
-
when
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
marker = IPTC::Marker.new(type, value)
|
89
|
-
@values[@prefix+"/"+IPTC::MarkerNomenclature.markers(type.to_i).name] ||= []
|
90
|
-
@values[@prefix+"/"+IPTC::MarkerNomenclature.markers(type.to_i).name] << value
|
91
|
-
@markers << marker
|
92
|
-
|
124
|
+
when 0x03ED
|
125
|
+
hRes = long()
|
126
|
+
hResUnit = word()
|
127
|
+
widthUnit = word()
|
128
|
+
vRes = long()
|
129
|
+
vResUnit = word()
|
130
|
+
heightUnit = word()
|
93
131
|
else
|
94
|
-
|
132
|
+
read(bim_size)
|
95
133
|
end
|
134
|
+
read(1) if bim_size%2 == 1
|
96
135
|
end
|
97
136
|
return @values
|
98
137
|
end
|
data/lib/iptc/multiple_hash.rb
CHANGED
data/lib/iptc/version.rb
CHANGED
metadata
CHANGED
@@ -1,35 +1,26 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: iptc
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.7
|
5
5
|
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 0
|
9
|
-
- 5
|
10
|
-
version: 0.0.5
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- Pierre Baillet
|
14
9
|
- Jens Kraemer
|
10
|
+
- Tristan Bartement
|
15
11
|
autorequire:
|
16
12
|
bindir: bin
|
17
13
|
cert_chain: []
|
18
|
-
|
19
|
-
date: 2012-01-09 00:00:00 +01:00
|
20
|
-
default_executable:
|
14
|
+
date: 2013-02-27 00:00:00.000000000 Z
|
21
15
|
dependencies: []
|
22
|
-
|
23
|
-
|
24
|
-
email:
|
16
|
+
description: Original code from http://raa.ruby-lang.org/project/jpeg-jfif-iptc/,
|
17
|
+
gemified and updated by Jens Kraemer, Futher fixes by Pierre Baillet
|
18
|
+
email:
|
25
19
|
- pierre@baillet.name
|
26
20
|
executables: []
|
27
|
-
|
28
21
|
extensions: []
|
29
|
-
|
30
22
|
extra_rdoc_files: []
|
31
|
-
|
32
|
-
files:
|
23
|
+
files:
|
33
24
|
- lib/iptc/jpeg/image.rb
|
34
25
|
- lib/iptc/jpeg/marker.rb
|
35
26
|
- lib/iptc/jpeg/marker_headers.rb
|
@@ -42,41 +33,28 @@ files:
|
|
42
33
|
- lib/iptc.rb
|
43
34
|
- LICENSE
|
44
35
|
- README.md
|
45
|
-
has_rdoc: true
|
46
36
|
homepage: http://github.com/octplane/ruby-iptc
|
47
37
|
licenses: []
|
48
|
-
|
49
38
|
post_install_message:
|
50
39
|
rdoc_options: []
|
51
|
-
|
52
|
-
require_paths:
|
40
|
+
require_paths:
|
53
41
|
- lib
|
54
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
42
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
55
43
|
none: false
|
56
|
-
requirements:
|
57
|
-
- -
|
58
|
-
- !ruby/object:Gem::Version
|
59
|
-
|
60
|
-
|
61
|
-
- 0
|
62
|
-
version: "0"
|
63
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ! '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
64
49
|
none: false
|
65
|
-
requirements:
|
66
|
-
- -
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
hash: 23
|
69
|
-
segments:
|
70
|
-
- 1
|
71
|
-
- 3
|
72
|
-
- 6
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
73
53
|
version: 1.3.6
|
74
54
|
requirements: []
|
75
|
-
|
76
55
|
rubyforge_project: ruby-iptc
|
77
|
-
rubygems_version: 1.
|
56
|
+
rubygems_version: 1.8.23
|
78
57
|
signing_key:
|
79
58
|
specification_version: 3
|
80
59
|
summary: Pure ruby IPTC metadata reader
|
81
60
|
test_files: []
|
82
|
-
|