image_voodoo 0.8.8 → 0.8.9
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/.rubocop.yml +115 -0
- data/.travis.yml +7 -0
- data/Rakefile +2 -2
- data/bin/image_voodoo +71 -84
- data/image_voodoo.gemspec +6 -5
- data/lib/image_science.rb +1 -1
- data/lib/image_voodoo.rb +41 -93
- data/lib/image_voodoo/awt.rb +156 -153
- data/lib/image_voodoo/awt/core_ext/buffered_image.rb +13 -0
- data/lib/image_voodoo/awt/core_ext/graphics2d.rb +17 -0
- data/lib/image_voodoo/awt/shapes.rb +39 -3
- data/lib/image_voodoo/gae.rb +10 -6
- data/lib/image_voodoo/metadata.rb +115 -89
- data/lib/image_voodoo/needs_head.rb +1 -0
- data/lib/image_voodoo/version.rb +1 -1
- data/samples/bench.rb +29 -36
- data/samples/file_view.rb +2 -1
- data/samples/{in-memory.rb → in_memory.rb} +0 -0
- data/test/test_image_science.rb +32 -74
- data/test/test_image_voodoo.rb +82 -0
- data/test/test_metadata.rb +23 -16
- data/test/test_shapes.rb +21 -0
- data/tools/gen.rb +31 -27
- metadata +15 -8
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'java'
|
2
|
+
|
3
|
+
# Hide in ImageVoodoo so awt.rb can see this and we will not polute global
|
4
|
+
class ImageVoodoo
|
5
|
+
java_import java.awt.Graphics2D
|
6
|
+
|
7
|
+
# Re-open to add convenience methods.
|
8
|
+
class Graphics2D
|
9
|
+
def jtranslate(x, y)
|
10
|
+
java_send :translate, [::Java.int, ::Java.int], x, y
|
11
|
+
end
|
12
|
+
|
13
|
+
def draw_this_image(image)
|
14
|
+
draw_image image, 0, 0, nil
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -1,5 +1,42 @@
|
|
1
1
|
class ImageVoodoo
|
2
|
+
# (Experimental) An attempt at some primitive drawing in images.
|
2
3
|
module Shapes
|
4
|
+
# FIXME: if image has alpha values the border shows through since it is
|
5
|
+
# a solid fill.
|
6
|
+
##
|
7
|
+
# *AWT* (experimental) Add a border to the image and yield/return a new
|
8
|
+
# image. The following options are supported:
|
9
|
+
# - width: How thick is the border (default: 3)
|
10
|
+
# - color: Which color is the border (in rrggbb hex value)
|
11
|
+
# - style: etched, raised, plain (default: plain)
|
12
|
+
#
|
13
|
+
def add_border(options = {})
|
14
|
+
border_width = options[:width].to_i || 2
|
15
|
+
new_width, new_height = width + 2*border_width, height + 2*border_width
|
16
|
+
target = paint(BufferedImage.new(new_width, new_height, color_type)) do |g|
|
17
|
+
paint_border(g, new_width, new_height, options[:color])
|
18
|
+
g.draw_image(@src, nil, border_width, border_width)
|
19
|
+
end
|
20
|
+
block_given? ? yield(target) : target
|
21
|
+
end
|
22
|
+
|
23
|
+
def paint_border(g, new_width, new_height, options)
|
24
|
+
g.color = hex_to_color(options[:color])
|
25
|
+
fill_method, *args = border_style(options)
|
26
|
+
g.send fill_method, 0, 0, new_width, new_height, *args
|
27
|
+
end
|
28
|
+
|
29
|
+
def border_style(options)
|
30
|
+
case (options[:style] || "").to_s
|
31
|
+
when "raised" then
|
32
|
+
[:fill3DRect, true]
|
33
|
+
when "etched" then
|
34
|
+
[:fill3DRect, false]
|
35
|
+
else
|
36
|
+
[:fill_rect]
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
3
40
|
##
|
4
41
|
# *AWT* Draw a square
|
5
42
|
#
|
@@ -18,14 +55,14 @@ class ImageVoodoo
|
|
18
55
|
# *AWT* Draw a rounded square
|
19
56
|
#
|
20
57
|
def square_rounded(x, y, dim, rgb, arc_width=0, fill=true)
|
21
|
-
rect_rounded(x,y, dim, dim, rgb, arc_width, arc_width, fill)
|
58
|
+
rect_rounded(x, y, dim, dim, rgb, arc_width, arc_width, fill)
|
22
59
|
end
|
23
60
|
|
24
61
|
##
|
25
62
|
# *AWT* Draw a rounded rectangle
|
26
63
|
#
|
27
64
|
def rect_rounded(x, y, width, height, rgb, arc_width=0, arc_height=0, fill=true)
|
28
|
-
as_color(
|
65
|
+
as_color(hex_to_color(rgb)) do |g|
|
29
66
|
if fill
|
30
67
|
g.fill_round_rect x, y, width, height, arc_width, arc_height
|
31
68
|
else
|
@@ -44,4 +81,3 @@ class ImageVoodoo
|
|
44
81
|
end
|
45
82
|
end
|
46
83
|
end
|
47
|
-
|
data/lib/image_voodoo/gae.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# Google App Engine implementation (does this work?)
|
1
2
|
class ImageVoodoo
|
2
3
|
java_import com.google.appengine.api.images.Image
|
3
4
|
java_import com.google.appengine.api.images.ImagesService
|
@@ -20,12 +21,20 @@ class ImageVoodoo
|
|
20
21
|
# Implementations of standard features
|
21
22
|
#++
|
22
23
|
|
24
|
+
class << self
|
25
|
+
private
|
26
|
+
|
27
|
+
def with_bytes_impl(bytes)
|
28
|
+
image = ImageServicesFactory.make_image(bytes)
|
29
|
+
ImageVoodoo.new bytes, image, image.format.to_s.upcase
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
23
33
|
private
|
24
34
|
|
25
35
|
def flip_horizontally_impl
|
26
36
|
transform(ImagesServiceFactory.make_horizontal_flip)
|
27
37
|
end
|
28
|
-
private :flip_horizontally_impl
|
29
38
|
|
30
39
|
def flip_vertically_impl
|
31
40
|
transform(ImagesServiceFactory.make_vertical_flip)
|
@@ -39,11 +48,6 @@ class ImageVoodoo
|
|
39
48
|
transform(ImagesServiceFactory.make_crop(left, top, right, bottom))
|
40
49
|
end
|
41
50
|
|
42
|
-
def self.with_bytes_impl(bytes)
|
43
|
-
image = ImageServicesFactory.make_image(bytes)
|
44
|
-
ImageVoodoo.new bytes, image, image.format.to_s.upcase
|
45
|
-
end
|
46
|
-
|
47
51
|
def from_java_bytes
|
48
52
|
String.from_java_bytes @src.image_data
|
49
53
|
end
|
@@ -1,7 +1,8 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
require_relative '../../vendor/xmpcore-5.1.2.jar'
|
2
|
+
require_relative '../../vendor/metadata-extractor-2.7.0.jar'
|
3
3
|
|
4
4
|
class ImageVoodoo
|
5
|
+
# Metadata contained within the image.
|
5
6
|
class Metadata
|
6
7
|
def initialize(io)
|
7
8
|
@metadata = com.drew.imaging.ImageMetadataReader.read_metadata io
|
@@ -15,10 +16,10 @@ class ImageVoodoo
|
|
15
16
|
#
|
16
17
|
# See Directory#exists? if you want to make sure the group you are
|
17
18
|
# requesting actually exists or not.
|
18
|
-
#
|
19
|
+
#
|
19
20
|
def [](dirname)
|
20
21
|
dirclass = DIRECTORY_MAP[dirname.to_s]
|
21
|
-
raise ArgumentError
|
22
|
+
raise ArgumentError, "Uknown metadata group: #{dirname}" unless dirclass
|
22
23
|
dirclass.new @metadata
|
23
24
|
end
|
24
25
|
|
@@ -47,6 +48,10 @@ class ImageVoodoo
|
|
47
48
|
end
|
48
49
|
end
|
49
50
|
|
51
|
+
# All metadata are contained within Directories. An image may have n
|
52
|
+
# directories. You have to know a bit about the image to khow what to
|
53
|
+
# look at (e.g. a image from a Pentax camera may have a PentaxMakerNote
|
54
|
+
# directory.
|
50
55
|
class Directory
|
51
56
|
def initialize(metadata)
|
52
57
|
@directory = metadata.get_directory self.class.directory_class.java_class
|
@@ -55,7 +60,7 @@ class ImageVoodoo
|
|
55
60
|
##
|
56
61
|
# Does the directory you requested exist as metadata for this image.
|
57
62
|
def exists?
|
58
|
-
|
63
|
+
@directory
|
59
64
|
end
|
60
65
|
|
61
66
|
##
|
@@ -64,13 +69,14 @@ class ImageVoodoo
|
|
64
69
|
def [](tag_name)
|
65
70
|
return nil unless @directory
|
66
71
|
(tag_type, tag_method) = self.class::TAGS[tag_name.to_s]
|
67
|
-
raise ArgumentError
|
72
|
+
raise ArgumentError, "Unkown tag_name: #{tag_name}" unless tag_type
|
68
73
|
java_tag_type = self.class.directory_class.const_get tag_type
|
69
74
|
return nil unless @directory.contains_tag java_tag_type
|
70
75
|
@directory.__send__ tag_method, java_tag_type
|
71
76
|
end
|
72
77
|
end
|
73
78
|
|
79
|
+
# GENERATED
|
74
80
|
class AdobeJpegDirectory < Directory
|
75
81
|
java_import com.drew.metadata.adobe.AdobeJpegDirectory
|
76
82
|
|
@@ -82,10 +88,11 @@ class ImageVoodoo
|
|
82
88
|
'Dct Encode Version' => ['TAG_DCT_ENCODE_VERSION', :get_string],
|
83
89
|
'App14 Flags0' => ['TAG_APP14_FLAGS0', :get_string],
|
84
90
|
'App14 Flags1' => ['TAG_APP14_FLAGS1', :get_string],
|
85
|
-
'Color Transform' => ['TAG_COLOR_TRANSFORM', :get_string]
|
86
|
-
}
|
91
|
+
'Color Transform' => ['TAG_COLOR_TRANSFORM', :get_string]
|
92
|
+
}.freeze
|
87
93
|
end
|
88
94
|
|
95
|
+
# GENERATED
|
89
96
|
class BmpHeaderDirectory < Directory
|
90
97
|
java_import com.drew.metadata.bmp.BmpHeaderDirectory
|
91
98
|
|
@@ -103,10 +110,11 @@ class ImageVoodoo
|
|
103
110
|
'X Pixels Per Meter' => ['TAG_X_PIXELS_PER_METER', :get_string],
|
104
111
|
'Y Pixels Per Meter' => ['TAG_Y_PIXELS_PER_METER', :get_string],
|
105
112
|
'Palette Colour Count' => ['TAG_PALETTE_COLOUR_COUNT', :get_string],
|
106
|
-
'Important Colour Count' => ['TAG_IMPORTANT_COLOUR_COUNT', :get_string]
|
107
|
-
}
|
113
|
+
'Important Colour Count' => ['TAG_IMPORTANT_COLOUR_COUNT', :get_string]
|
114
|
+
}.freeze
|
108
115
|
end
|
109
116
|
|
117
|
+
# GENERATED
|
110
118
|
class ExifIFD0Directory < Directory
|
111
119
|
java_import com.drew.metadata.exif.ExifIFD0Directory
|
112
120
|
|
@@ -138,10 +146,11 @@ class ImageVoodoo
|
|
138
146
|
'Win Comment' => ['TAG_WIN_COMMENT', :get_string],
|
139
147
|
'Win Author' => ['TAG_WIN_AUTHOR', :get_string],
|
140
148
|
'Win Keywords' => ['TAG_WIN_KEYWORDS', :get_string],
|
141
|
-
'Win Subject' => ['TAG_WIN_SUBJECT', :get_string]
|
142
|
-
}
|
149
|
+
'Win Subject' => ['TAG_WIN_SUBJECT', :get_string]
|
150
|
+
}.freeze
|
143
151
|
end
|
144
152
|
|
153
|
+
# GENERATED
|
145
154
|
class ExifInteropDirectory < Directory
|
146
155
|
java_import com.drew.metadata.exif.ExifInteropDirectory
|
147
156
|
|
@@ -154,10 +163,11 @@ class ImageVoodoo
|
|
154
163
|
'Interop Version' => ['TAG_INTEROP_VERSION', :get_string],
|
155
164
|
'Related Image File Format' => ['TAG_RELATED_IMAGE_FILE_FORMAT', :get_string],
|
156
165
|
'Related Image Width' => ['TAG_RELATED_IMAGE_WIDTH', :get_long],
|
157
|
-
'Related Image Length' => ['TAG_RELATED_IMAGE_LENGTH', :get_long]
|
158
|
-
}
|
166
|
+
'Related Image Length' => ['TAG_RELATED_IMAGE_LENGTH', :get_long]
|
167
|
+
}.freeze
|
159
168
|
end
|
160
169
|
|
170
|
+
# GENERATED
|
161
171
|
class ExifSubIFDDirectory < Directory
|
162
172
|
java_import com.drew.metadata.exif.ExifSubIFDDirectory
|
163
173
|
|
@@ -270,10 +280,11 @@ class ImageVoodoo
|
|
270
280
|
'Lens Model' => ['TAG_LENS_MODEL', :get_string],
|
271
281
|
'Lens Serial Number' => ['TAG_LENS_SERIAL_NUMBER', :get_string],
|
272
282
|
'Gamma' => ['TAG_GAMMA', :get_string],
|
273
|
-
'Lens' => ['TAG_LENS', :get_string]
|
274
|
-
}
|
283
|
+
'Lens' => ['TAG_LENS', :get_string]
|
284
|
+
}.freeze
|
275
285
|
end
|
276
286
|
|
287
|
+
# GENERATED
|
277
288
|
class ExifThumbnailDirectory < Directory
|
278
289
|
java_import com.drew.metadata.exif.ExifThumbnailDirectory
|
279
290
|
|
@@ -301,10 +312,11 @@ class ImageVoodoo
|
|
301
312
|
'Ycbcr Coefficients' => ['TAG_YCBCR_COEFFICIENTS', :get_rational_array],
|
302
313
|
'Ycbcr Subsampling' => ['TAG_YCBCR_SUBSAMPLING', :get_int_array],
|
303
314
|
'Ycbcr Positioning' => ['TAG_YCBCR_POSITIONING', :get_int],
|
304
|
-
'Reference Black White' => ['TAG_REFERENCE_BLACK_WHITE', :get_rational_array]
|
305
|
-
}
|
315
|
+
'Reference Black White' => ['TAG_REFERENCE_BLACK_WHITE', :get_rational_array]
|
316
|
+
}.freeze
|
306
317
|
end
|
307
318
|
|
319
|
+
# GENERATED
|
308
320
|
class GpsDirectory < Directory
|
309
321
|
java_import com.drew.metadata.exif.GpsDirectory
|
310
322
|
|
@@ -343,10 +355,11 @@ class ImageVoodoo
|
|
343
355
|
'Processing Method' => ['TAG_PROCESSING_METHOD', :get_string],
|
344
356
|
'Area Information' => ['TAG_AREA_INFORMATION', :get_string],
|
345
357
|
'Date Stamp' => ['TAG_DATE_STAMP', :get_string],
|
346
|
-
'Differential' => ['TAG_DIFFERENTIAL', :get_string]
|
347
|
-
}
|
358
|
+
'Differential' => ['TAG_DIFFERENTIAL', :get_string]
|
359
|
+
}.freeze
|
348
360
|
end
|
349
361
|
|
362
|
+
# GENERATED
|
350
363
|
class CanonMakernoteDirectory < Directory
|
351
364
|
java_import com.drew.metadata.exif.makernotes.CanonMakernoteDirectory
|
352
365
|
|
@@ -462,16 +475,12 @@ class ImageVoodoo
|
|
462
475
|
'Target Aperture' => ['TAG_TARGET_APERTURE', :get_string],
|
463
476
|
'Target Exposure Time' => ['TAG_TARGET_EXPOSURE_TIME', :get_string],
|
464
477
|
'Exposure Compensation' => ['TAG_EXPOSURE_COMPENSATION', :get_string],
|
465
|
-
'White Balance' => ['TAG_WHITE_BALANCE', :get_string],
|
466
478
|
'Slow Shutter' => ['TAG_SLOW_SHUTTER', :get_string],
|
467
|
-
'Sequence Number' => ['TAG_SEQUENCE_NUMBER', :get_string],
|
468
479
|
'Optical Zoom Code' => ['TAG_OPTICAL_ZOOM_CODE', :get_string],
|
469
480
|
'Camera Temperature' => ['TAG_CAMERA_TEMPERATURE', :get_string],
|
470
481
|
'Flash Guide Number' => ['TAG_FLASH_GUIDE_NUMBER', :get_string],
|
471
482
|
'Af Points In Focus' => ['TAG_AF_POINTS_IN_FOCUS', :get_string],
|
472
483
|
'Flash Exposure Bracketing' => ['TAG_FLASH_EXPOSURE_BRACKETING', :get_string],
|
473
|
-
'Auto Exposure Bracketing' => ['TAG_AUTO_EXPOSURE_BRACKETING', :get_string],
|
474
|
-
'Aeb Bracket Value' => ['TAG_AEB_BRACKET_VALUE', :get_string],
|
475
484
|
'Control Mode' => ['TAG_CONTROL_MODE', :get_string],
|
476
485
|
'Focus Distance Upper' => ['TAG_FOCUS_DISTANCE_UPPER', :get_string],
|
477
486
|
'Focus Distance Lower' => ['TAG_FOCUS_DISTANCE_LOWER', :get_string],
|
@@ -496,7 +505,6 @@ class ImageVoodoo
|
|
496
505
|
'Af Area Height' => ['TAG_AF_AREA_HEIGHT', :get_string],
|
497
506
|
'Af Area X Positions' => ['TAG_AF_AREA_X_POSITIONS', :get_string],
|
498
507
|
'Af Area Y Positions' => ['TAG_AF_AREA_Y_POSITIONS', :get_string],
|
499
|
-
'Af Points In Focus' => ['TAG_AF_POINTS_IN_FOCUS', :get_string],
|
500
508
|
'Primary Af Point 1' => ['TAG_PRIMARY_AF_POINT_1', :get_string],
|
501
509
|
'Primary Af Point 2' => ['TAG_PRIMARY_AF_POINT_2', :get_string],
|
502
510
|
'Canon Custom Function Long Exposure Noise Reduction' => ['TAG_CANON_CUSTOM_FUNCTION_LONG_EXPOSURE_NOISE_REDUCTION', :get_string],
|
@@ -511,10 +519,11 @@ class ImageVoodoo
|
|
511
519
|
'Canon Custom Function Fill Flash Reduction' => ['TAG_CANON_CUSTOM_FUNCTION_FILL_FLASH_REDUCTION', :get_string],
|
512
520
|
'Canon Custom Function Menu Button Return' => ['TAG_CANON_CUSTOM_FUNCTION_MENU_BUTTON_RETURN', :get_string],
|
513
521
|
'Canon Custom Function Set Button Function' => ['TAG_CANON_CUSTOM_FUNCTION_SET_BUTTON_FUNCTION', :get_string],
|
514
|
-
'Canon Custom Function Sensor Cleaning' => ['TAG_CANON_CUSTOM_FUNCTION_SENSOR_CLEANING', :get_string]
|
515
|
-
}
|
522
|
+
'Canon Custom Function Sensor Cleaning' => ['TAG_CANON_CUSTOM_FUNCTION_SENSOR_CLEANING', :get_string]
|
523
|
+
}.freeze
|
516
524
|
end
|
517
525
|
|
526
|
+
# GENERATED
|
518
527
|
class CasioType1MakernoteDirectory < Directory
|
519
528
|
java_import com.drew.metadata.exif.makernotes.CasioType1MakernoteDirectory
|
520
529
|
|
@@ -542,10 +551,11 @@ class ImageVoodoo
|
|
542
551
|
'Unknown 6' => ['TAG_UNKNOWN_6', :get_string],
|
543
552
|
'Unknown 7' => ['TAG_UNKNOWN_7', :get_string],
|
544
553
|
'Unknown 8' => ['TAG_UNKNOWN_8', :get_string],
|
545
|
-
'Ccd Sensitivity' => ['TAG_CCD_SENSITIVITY', :get_string]
|
546
|
-
}
|
554
|
+
'Ccd Sensitivity' => ['TAG_CCD_SENSITIVITY', :get_string]
|
555
|
+
}.freeze
|
547
556
|
end
|
548
557
|
|
558
|
+
# GENERATED
|
549
559
|
class CasioType2MakernoteDirectory < Directory
|
550
560
|
java_import com.drew.metadata.exif.makernotes.CasioType2MakernoteDirectory
|
551
561
|
|
@@ -581,10 +591,11 @@ class ImageVoodoo
|
|
581
591
|
'Ccd Iso Sensitivity' => ['TAG_CCD_ISO_SENSITIVITY', :get_int],
|
582
592
|
'Colour Mode' => ['TAG_COLOUR_MODE', :get_string],
|
583
593
|
'Enhancement' => ['TAG_ENHANCEMENT', :get_string],
|
584
|
-
'Filter' => ['TAG_FILTER', :get_string]
|
585
|
-
}
|
594
|
+
'Filter' => ['TAG_FILTER', :get_string]
|
595
|
+
}.freeze
|
586
596
|
end
|
587
597
|
|
598
|
+
# GENERATED
|
588
599
|
class FujifilmMakernoteDirectory < Directory
|
589
600
|
java_import com.drew.metadata.exif.makernotes.FujifilmMakernoteDirectory
|
590
601
|
|
@@ -636,10 +647,11 @@ class ImageVoodoo
|
|
636
647
|
'File Source' => ['TAG_FILE_SOURCE', :get_string],
|
637
648
|
'Order Number' => ['TAG_ORDER_NUMBER', :get_string],
|
638
649
|
'Frame Number' => ['TAG_FRAME_NUMBER', :get_string],
|
639
|
-
'Parallax' => ['TAG_PARALLAX', :get_string]
|
640
|
-
}
|
650
|
+
'Parallax' => ['TAG_PARALLAX', :get_string]
|
651
|
+
}.freeze
|
641
652
|
end
|
642
653
|
|
654
|
+
# GENERATED
|
643
655
|
class KyoceraMakernoteDirectory < Directory
|
644
656
|
java_import com.drew.metadata.exif.makernotes.KyoceraMakernoteDirectory
|
645
657
|
|
@@ -649,10 +661,11 @@ class ImageVoodoo
|
|
649
661
|
|
650
662
|
TAGS = {
|
651
663
|
'Proprietary Thumbnail' => ['TAG_PROPRIETARY_THUMBNAIL', :get_string],
|
652
|
-
'Print Image Matching Info' => ['TAG_PRINT_IMAGE_MATCHING_INFO', :get_string]
|
653
|
-
}
|
664
|
+
'Print Image Matching Info' => ['TAG_PRINT_IMAGE_MATCHING_INFO', :get_string]
|
665
|
+
}.freeze
|
654
666
|
end
|
655
667
|
|
668
|
+
# GENERATED
|
656
669
|
class LeicaMakernoteDirectory < Directory
|
657
670
|
java_import com.drew.metadata.exif.makernotes.LeicaMakernoteDirectory
|
658
671
|
|
@@ -678,10 +691,11 @@ class ImageVoodoo
|
|
678
691
|
'Ccd Board Version' => ['TAG_CCD_BOARD_VERSION', :get_string],
|
679
692
|
'Controller Board Version' => ['TAG_CONTROLLER_BOARD_VERSION', :get_string],
|
680
693
|
'M16 C Version' => ['TAG_M16_C_VERSION', :get_string],
|
681
|
-
'Image Id Number' => ['TAG_IMAGE_ID_NUMBER', :get_string]
|
682
|
-
}
|
694
|
+
'Image Id Number' => ['TAG_IMAGE_ID_NUMBER', :get_string]
|
695
|
+
}.freeze
|
683
696
|
end
|
684
697
|
|
698
|
+
# GENERATED
|
685
699
|
class NikonType1MakernoteDirectory < Directory
|
686
700
|
java_import com.drew.metadata.exif.makernotes.NikonType1MakernoteDirectory
|
687
701
|
|
@@ -700,10 +714,11 @@ class ImageVoodoo
|
|
700
714
|
'Unknown 2' => ['TAG_UNKNOWN_2', :get_string],
|
701
715
|
'Digital Zoom' => ['TAG_DIGITAL_ZOOM', :get_string],
|
702
716
|
'Converter' => ['TAG_CONVERTER', :get_string],
|
703
|
-
'Unknown 3' => ['TAG_UNKNOWN_3', :get_string]
|
704
|
-
}
|
717
|
+
'Unknown 3' => ['TAG_UNKNOWN_3', :get_string]
|
718
|
+
}.freeze
|
705
719
|
end
|
706
720
|
|
721
|
+
# GENERATED
|
707
722
|
class NikonType2MakernoteDirectory < Directory
|
708
723
|
java_import com.drew.metadata.exif.makernotes.NikonType2MakernoteDirectory
|
709
724
|
|
@@ -828,10 +843,11 @@ class ImageVoodoo
|
|
828
843
|
'Nikon Scan' => ['TAG_NIKON_SCAN', :get_string],
|
829
844
|
'Unknown 54' => ['TAG_UNKNOWN_54', :get_string],
|
830
845
|
'Nef Bit Depth' => ['TAG_NEF_BIT_DEPTH', :get_string],
|
831
|
-
'Unknown 55' => ['TAG_UNKNOWN_55', :get_string]
|
832
|
-
}
|
846
|
+
'Unknown 55' => ['TAG_UNKNOWN_55', :get_string]
|
847
|
+
}.freeze
|
833
848
|
end
|
834
849
|
|
850
|
+
# GENERATED
|
835
851
|
class OlympusMakernoteDirectory < Directory
|
836
852
|
java_import com.drew.metadata.exif.makernotes.OlympusMakernoteDirectory
|
837
853
|
|
@@ -893,8 +909,6 @@ class ImageVoodoo
|
|
893
909
|
'Final Height' => ['TAG_FINAL_HEIGHT', :get_string],
|
894
910
|
'Compression Ratio' => ['TAG_COMPRESSION_RATIO', :get_string],
|
895
911
|
'Exposure Mode' => ['TAG_EXPOSURE_MODE', :get_string],
|
896
|
-
'Flash Mode' => ['TAG_FLASH_MODE', :get_string],
|
897
|
-
'White Balance' => ['TAG_WHITE_BALANCE', :get_string],
|
898
912
|
'Image Size' => ['TAG_IMAGE_SIZE', :get_string],
|
899
913
|
'Image Quality' => ['TAG_IMAGE_QUALITY', :get_string],
|
900
914
|
'Shooting Mode' => ['TAG_SHOOTING_MODE', :get_string],
|
@@ -902,14 +916,12 @@ class ImageVoodoo
|
|
902
916
|
'Apex Film Speed Value' => ['TAG_APEX_FILM_SPEED_VALUE', :get_string],
|
903
917
|
'Apex Shutter Speed Time Value' => ['TAG_APEX_SHUTTER_SPEED_TIME_VALUE', :get_string],
|
904
918
|
'Apex Aperture Value' => ['TAG_APEX_APERTURE_VALUE', :get_string],
|
905
|
-
'Macro Mode' => ['TAG_MACRO_MODE', :get_string],
|
906
919
|
'Digital Zoom' => ['TAG_DIGITAL_ZOOM', :get_string],
|
907
920
|
'Exposure Compensation' => ['TAG_EXPOSURE_COMPENSATION', :get_string],
|
908
921
|
'Bracket Step' => ['TAG_BRACKET_STEP', :get_string],
|
909
922
|
'Interval Length' => ['TAG_INTERVAL_LENGTH', :get_string],
|
910
923
|
'Interval Number' => ['TAG_INTERVAL_NUMBER', :get_string],
|
911
924
|
'Focal Length' => ['TAG_FOCAL_LENGTH', :get_string],
|
912
|
-
'Focus Distance' => ['TAG_FOCUS_DISTANCE', :get_string],
|
913
925
|
'Flash Fired' => ['TAG_FLASH_FIRED', :get_string],
|
914
926
|
'Date' => ['TAG_DATE', :get_string],
|
915
927
|
'Time' => ['TAG_TIME', :get_string],
|
@@ -920,8 +932,6 @@ class ImageVoodoo
|
|
920
932
|
'White Balance Green' => ['TAG_WHITE_BALANCE_GREEN', :get_string],
|
921
933
|
'White Balance Blue' => ['TAG_WHITE_BALANCE_BLUE', :get_string],
|
922
934
|
'Saturation' => ['TAG_SATURATION', :get_string],
|
923
|
-
'Contrast' => ['TAG_CONTRAST', :get_string],
|
924
|
-
'Sharpness' => ['TAG_SHARPNESS', :get_string],
|
925
935
|
'Subject Program' => ['TAG_SUBJECT_PROGRAM', :get_string],
|
926
936
|
'Flash Compensation' => ['TAG_FLASH_COMPENSATION', :get_string],
|
927
937
|
'Iso Setting' => ['TAG_ISO_SETTING', :get_string],
|
@@ -936,12 +946,12 @@ class ImageVoodoo
|
|
936
946
|
'Spot Focus Point X Coordinate' => ['TAG_SPOT_FOCUS_POINT_X_COORDINATE', :get_string],
|
937
947
|
'Spot Focus Point Y Coordinate' => ['TAG_SPOT_FOCUS_POINT_Y_COORDINATE', :get_string],
|
938
948
|
'Wide Focus Zone' => ['TAG_WIDE_FOCUS_ZONE', :get_string],
|
939
|
-
'Focus Mode' => ['TAG_FOCUS_MODE', :get_string],
|
940
949
|
'Focus Area' => ['TAG_FOCUS_AREA', :get_string],
|
941
|
-
'Dec Switch Position' => ['TAG_DEC_SWITCH_POSITION', :get_string]
|
942
|
-
}
|
950
|
+
'Dec Switch Position' => ['TAG_DEC_SWITCH_POSITION', :get_string]
|
951
|
+
}.freeze
|
943
952
|
end
|
944
953
|
|
954
|
+
# GENERATED
|
945
955
|
class PanasonicMakernoteDirectory < Directory
|
946
956
|
java_import com.drew.metadata.exif.makernotes.PanasonicMakernoteDirectory
|
947
957
|
|
@@ -1019,10 +1029,11 @@ class ImageVoodoo
|
|
1019
1029
|
'Text Stamp 2' => ['TAG_TEXT_STAMP_2', :get_string],
|
1020
1030
|
'Text Stamp 3' => ['TAG_TEXT_STAMP_3', :get_string],
|
1021
1031
|
'Baby Age 1' => ['TAG_BABY_AGE_1', :get_string],
|
1022
|
-
'Transform 1' => ['TAG_TRANSFORM_1', :get_string]
|
1023
|
-
}
|
1032
|
+
'Transform 1' => ['TAG_TRANSFORM_1', :get_string]
|
1033
|
+
}.freeze
|
1024
1034
|
end
|
1025
1035
|
|
1036
|
+
# GENERATED
|
1026
1037
|
class PentaxMakernoteDirectory < Directory
|
1027
1038
|
java_import com.drew.metadata.exif.makernotes.PentaxMakernoteDirectory
|
1028
1039
|
|
@@ -1044,10 +1055,11 @@ class ImageVoodoo
|
|
1044
1055
|
'Colour' => ['TAG_COLOUR', :get_string],
|
1045
1056
|
'Print Image Matching Info' => ['TAG_PRINT_IMAGE_MATCHING_INFO', :get_string],
|
1046
1057
|
'Time Zone' => ['TAG_TIME_ZONE', :get_string],
|
1047
|
-
'Daylight Savings' => ['TAG_DAYLIGHT_SAVINGS', :get_string]
|
1048
|
-
}
|
1058
|
+
'Daylight Savings' => ['TAG_DAYLIGHT_SAVINGS', :get_string]
|
1059
|
+
}.freeze
|
1049
1060
|
end
|
1050
1061
|
|
1062
|
+
# GENERATED
|
1051
1063
|
class RicohMakernoteDirectory < Directory
|
1052
1064
|
java_import com.drew.metadata.exif.makernotes.RicohMakernoteDirectory
|
1053
1065
|
|
@@ -1059,10 +1071,11 @@ class ImageVoodoo
|
|
1059
1071
|
'Makernote Data Type' => ['TAG_MAKERNOTE_DATA_TYPE', :get_string],
|
1060
1072
|
'Version' => ['TAG_VERSION', :get_string],
|
1061
1073
|
'Print Image Matching Info' => ['TAG_PRINT_IMAGE_MATCHING_INFO', :get_string],
|
1062
|
-
'Ricoh Camera Info Makernote Sub Ifd Pointer' => ['TAG_RICOH_CAMERA_INFO_MAKERNOTE_SUB_IFD_POINTER', :get_string]
|
1063
|
-
}
|
1074
|
+
'Ricoh Camera Info Makernote Sub Ifd Pointer' => ['TAG_RICOH_CAMERA_INFO_MAKERNOTE_SUB_IFD_POINTER', :get_string]
|
1075
|
+
}.freeze
|
1064
1076
|
end
|
1065
1077
|
|
1078
|
+
# GENERATED
|
1066
1079
|
class SanyoMakernoteDirectory < Directory
|
1067
1080
|
java_import com.drew.metadata.exif.makernotes.SanyoMakernoteDirectory
|
1068
1081
|
|
@@ -1097,10 +1110,11 @@ class ImageVoodoo
|
|
1097
1110
|
'Sequence Shot Interval' => ['TAG_SEQUENCE_SHOT_INTERVAL', :get_string],
|
1098
1111
|
'Flash Mode' => ['TAG_FLASH_MODE', :get_string],
|
1099
1112
|
'Print Im' => ['TAG_PRINT_IM', :get_string],
|
1100
|
-
'Data Dump' => ['TAG_DATA_DUMP', :get_string]
|
1101
|
-
}
|
1113
|
+
'Data Dump' => ['TAG_DATA_DUMP', :get_string]
|
1114
|
+
}.freeze
|
1102
1115
|
end
|
1103
1116
|
|
1117
|
+
# GENERATED
|
1104
1118
|
class SigmaMakernoteDirectory < Directory
|
1105
1119
|
java_import com.drew.metadata.exif.makernotes.SigmaMakernoteDirectory
|
1106
1120
|
|
@@ -1131,10 +1145,11 @@ class ImageVoodoo
|
|
1131
1145
|
'Quality' => ['TAG_QUALITY', :get_string],
|
1132
1146
|
'Firmware' => ['TAG_FIRMWARE', :get_string],
|
1133
1147
|
'Software' => ['TAG_SOFTWARE', :get_string],
|
1134
|
-
'Auto Bracket' => ['TAG_AUTO_BRACKET', :get_string]
|
1135
|
-
}
|
1148
|
+
'Auto Bracket' => ['TAG_AUTO_BRACKET', :get_string]
|
1149
|
+
}.freeze
|
1136
1150
|
end
|
1137
1151
|
|
1152
|
+
# GENERATED
|
1138
1153
|
class SonyType1MakernoteDirectory < Directory
|
1139
1154
|
java_import com.drew.metadata.exif.makernotes.SonyType1MakernoteDirectory
|
1140
1155
|
|
@@ -1207,10 +1222,11 @@ class ImageVoodoo
|
|
1207
1222
|
'High Iso Noise Reduction 2' => ['TAG_HIGH_ISO_NOISE_REDUCTION_2', :get_string],
|
1208
1223
|
'Intelligent Auto' => ['TAG_INTELLIGENT_AUTO', :get_string],
|
1209
1224
|
'White Balance 2' => ['TAG_WHITE_BALANCE_2', :get_string],
|
1210
|
-
'No Print' => ['TAG_NO_PRINT', :get_string]
|
1211
|
-
}
|
1225
|
+
'No Print' => ['TAG_NO_PRINT', :get_string]
|
1226
|
+
}.freeze
|
1212
1227
|
end
|
1213
1228
|
|
1229
|
+
# GENERATED
|
1214
1230
|
class SonyType6MakernoteDirectory < Directory
|
1215
1231
|
java_import com.drew.metadata.exif.makernotes.SonyType6MakernoteDirectory
|
1216
1232
|
|
@@ -1222,10 +1238,11 @@ class ImageVoodoo
|
|
1222
1238
|
'Makernote Thumb Offset' => ['TAG_MAKERNOTE_THUMB_OFFSET', :get_string],
|
1223
1239
|
'Makernote Thumb Length' => ['TAG_MAKERNOTE_THUMB_LENGTH', :get_string],
|
1224
1240
|
'Unknown 1' => ['TAG_UNKNOWN_1', :get_string],
|
1225
|
-
'Makernote Thumb Version' => ['TAG_MAKERNOTE_THUMB_VERSION', :get_string]
|
1226
|
-
}
|
1241
|
+
'Makernote Thumb Version' => ['TAG_MAKERNOTE_THUMB_VERSION', :get_string]
|
1242
|
+
}.freeze
|
1227
1243
|
end
|
1228
1244
|
|
1245
|
+
# GENERATED
|
1229
1246
|
class GifHeaderDirectory < Directory
|
1230
1247
|
java_import com.drew.metadata.gif.GifHeaderDirectory
|
1231
1248
|
|
@@ -1242,10 +1259,11 @@ class ImageVoodoo
|
|
1242
1259
|
'Bits Per Pixel' => ['TAG_BITS_PER_PIXEL', :get_string],
|
1243
1260
|
'Has Global Color Table' => ['TAG_HAS_GLOBAL_COLOR_TABLE', :get_string],
|
1244
1261
|
'Transparent Color Index' => ['TAG_TRANSPARENT_COLOR_INDEX', :get_string],
|
1245
|
-
'Pixel Aspect Ratio' => ['TAG_PIXEL_ASPECT_RATIO', :get_string]
|
1246
|
-
}
|
1262
|
+
'Pixel Aspect Ratio' => ['TAG_PIXEL_ASPECT_RATIO', :get_string]
|
1263
|
+
}.freeze
|
1247
1264
|
end
|
1248
1265
|
|
1266
|
+
# GENERATED
|
1249
1267
|
class IccDirectory < Directory
|
1250
1268
|
java_import com.drew.metadata.icc.IccDirectory
|
1251
1269
|
|
@@ -1318,10 +1336,11 @@ class ImageVoodoo
|
|
1318
1336
|
'Bfd' => ['TAG_bfd', :get_string],
|
1319
1337
|
'Vued' => ['TAG_vued', :get_string],
|
1320
1338
|
'View' => ['TAG_view', :get_string],
|
1321
|
-
'Apple Multi Language Profile Name' => ['TAG_APPLE_MULTI_LANGUAGE_PROFILE_NAME', :get_string]
|
1322
|
-
}
|
1339
|
+
'Apple Multi Language Profile Name' => ['TAG_APPLE_MULTI_LANGUAGE_PROFILE_NAME', :get_string]
|
1340
|
+
}.freeze
|
1323
1341
|
end
|
1324
1342
|
|
1343
|
+
# GENERATED
|
1325
1344
|
class IptcDirectory < Directory
|
1326
1345
|
java_import com.drew.metadata.iptc.IptcDirectory
|
1327
1346
|
|
@@ -1406,10 +1425,11 @@ class ImageVoodoo
|
|
1406
1425
|
'Owner Id' => ['TAG_OWNER_ID', :get_string],
|
1407
1426
|
'Object Preview File Format' => ['TAG_OBJECT_PREVIEW_FILE_FORMAT', :get_string],
|
1408
1427
|
'Object Preview File Format Version' => ['TAG_OBJECT_PREVIEW_FILE_FORMAT_VERSION', :get_string],
|
1409
|
-
'Object Preview Data' => ['TAG_OBJECT_PREVIEW_DATA', :get_string]
|
1410
|
-
}
|
1428
|
+
'Object Preview Data' => ['TAG_OBJECT_PREVIEW_DATA', :get_string]
|
1429
|
+
}.freeze
|
1411
1430
|
end
|
1412
1431
|
|
1432
|
+
# GENERATED
|
1413
1433
|
class JfifDirectory < Directory
|
1414
1434
|
java_import com.drew.metadata.jfif.JfifDirectory
|
1415
1435
|
|
@@ -1421,10 +1441,11 @@ class ImageVoodoo
|
|
1421
1441
|
'Version' => ['TAG_VERSION', :get_string],
|
1422
1442
|
'Units' => ['TAG_UNITS', :get_string],
|
1423
1443
|
'Resx' => ['TAG_RESX', :get_string],
|
1424
|
-
'Resy' => ['TAG_RESY', :get_string]
|
1425
|
-
}
|
1444
|
+
'Resy' => ['TAG_RESY', :get_string]
|
1445
|
+
}.freeze
|
1426
1446
|
end
|
1427
1447
|
|
1448
|
+
# GENERATED
|
1428
1449
|
class JpegCommentDirectory < Directory
|
1429
1450
|
java_import com.drew.metadata.jpeg.JpegCommentDirectory
|
1430
1451
|
|
@@ -1433,10 +1454,11 @@ class ImageVoodoo
|
|
1433
1454
|
end
|
1434
1455
|
|
1435
1456
|
TAGS = {
|
1436
|
-
'Comment' => ['TAG_COMMENT', :get_string]
|
1437
|
-
}
|
1457
|
+
'Comment' => ['TAG_COMMENT', :get_string]
|
1458
|
+
}.freeze
|
1438
1459
|
end
|
1439
1460
|
|
1461
|
+
# GENERATED
|
1440
1462
|
class JpegDirectory < Directory
|
1441
1463
|
java_import com.drew.metadata.jpeg.JpegDirectory
|
1442
1464
|
|
@@ -1453,10 +1475,11 @@ class ImageVoodoo
|
|
1453
1475
|
'Component Data 1' => ['TAG_COMPONENT_DATA_1', :get_string],
|
1454
1476
|
'Component Data 2' => ['TAG_COMPONENT_DATA_2', :get_string],
|
1455
1477
|
'Component Data 3' => ['TAG_COMPONENT_DATA_3', :get_string],
|
1456
|
-
'Component Data 4' => ['TAG_COMPONENT_DATA_4', :get_string]
|
1457
|
-
}
|
1478
|
+
'Component Data 4' => ['TAG_COMPONENT_DATA_4', :get_string]
|
1479
|
+
}.freeze
|
1458
1480
|
end
|
1459
1481
|
|
1482
|
+
# GENERATED
|
1460
1483
|
class PhotoshopDirectory < Directory
|
1461
1484
|
java_import com.drew.metadata.photoshop.PhotoshopDirectory
|
1462
1485
|
|
@@ -1507,10 +1530,11 @@ class ImageVoodoo
|
|
1507
1530
|
'Print Scale' => ['TAG_PRINT_SCALE', :get_string],
|
1508
1531
|
'Pixel Aspect Ratio' => ['TAG_PIXEL_ASPECT_RATIO', :get_string],
|
1509
1532
|
'Print Info' => ['TAG_PRINT_INFO', :get_string],
|
1510
|
-
'Print Flags Info' => ['TAG_PRINT_FLAGS_INFO', :get_string]
|
1511
|
-
}
|
1533
|
+
'Print Flags Info' => ['TAG_PRINT_FLAGS_INFO', :get_string]
|
1534
|
+
}.freeze
|
1512
1535
|
end
|
1513
1536
|
|
1537
|
+
# GENERATED
|
1514
1538
|
class PsdHeaderDirectory < Directory
|
1515
1539
|
java_import com.drew.metadata.photoshop.PsdHeaderDirectory
|
1516
1540
|
|
@@ -1523,10 +1547,11 @@ class ImageVoodoo
|
|
1523
1547
|
'Image Height' => ['TAG_IMAGE_HEIGHT', :get_long],
|
1524
1548
|
'Image Width' => ['TAG_IMAGE_WIDTH', :get_long],
|
1525
1549
|
'Bits Per Channel' => ['TAG_BITS_PER_CHANNEL', :get_string],
|
1526
|
-
'Color Mode' => ['TAG_COLOR_MODE', :get_string]
|
1527
|
-
}
|
1550
|
+
'Color Mode' => ['TAG_COLOR_MODE', :get_string]
|
1551
|
+
}.freeze
|
1528
1552
|
end
|
1529
1553
|
|
1554
|
+
# GENERATED
|
1530
1555
|
class PngChromaticitiesDirectory < Directory
|
1531
1556
|
java_import com.drew.metadata.png.PngChromaticitiesDirectory
|
1532
1557
|
|
@@ -1542,10 +1567,11 @@ class ImageVoodoo
|
|
1542
1567
|
'Green X' => ['TAG_GREEN_X', :get_string],
|
1543
1568
|
'Green Y' => ['TAG_GREEN_Y', :get_string],
|
1544
1569
|
'Blue X' => ['TAG_BLUE_X', :get_string],
|
1545
|
-
'Blue Y' => ['TAG_BLUE_Y', :get_string]
|
1546
|
-
}
|
1570
|
+
'Blue Y' => ['TAG_BLUE_Y', :get_string]
|
1571
|
+
}.freeze
|
1547
1572
|
end
|
1548
1573
|
|
1574
|
+
# GENERATED
|
1549
1575
|
class PngDirectory < Directory
|
1550
1576
|
java_import com.drew.metadata.png.PngDirectory
|
1551
1577
|
|
@@ -1568,10 +1594,11 @@ class ImageVoodoo
|
|
1568
1594
|
'Profile Name' => ['TAG_PROFILE_NAME', :get_string],
|
1569
1595
|
'Textual Data' => ['TAG_TEXTUAL_DATA', :get_string],
|
1570
1596
|
'Last Modification Time' => ['TAG_LAST_MODIFICATION_TIME', :get_string],
|
1571
|
-
'Background Color' => ['TAG_BACKGROUND_COLOR', :get_string]
|
1572
|
-
}
|
1597
|
+
'Background Color' => ['TAG_BACKGROUND_COLOR', :get_string]
|
1598
|
+
}.freeze
|
1573
1599
|
end
|
1574
1600
|
|
1601
|
+
# GENERATED
|
1575
1602
|
class XmpDirectory < Directory
|
1576
1603
|
java_import com.drew.metadata.xmp.XmpDirectory
|
1577
1604
|
|
@@ -1594,11 +1621,10 @@ class ImageVoodoo
|
|
1594
1621
|
'Exposure Program' => ['TAG_EXPOSURE_PROGRAM', :get_string],
|
1595
1622
|
'Datetime Original' => ['TAG_DATETIME_ORIGINAL', :get_string],
|
1596
1623
|
'Datetime Digitized' => ['TAG_DATETIME_DIGITIZED', :get_string],
|
1597
|
-
'Rating' => ['TAG_RATING', :get_string]
|
1598
|
-
}
|
1624
|
+
'Rating' => ['TAG_RATING', :get_string]
|
1625
|
+
}.freeze
|
1599
1626
|
end
|
1600
1627
|
|
1601
|
-
|
1602
1628
|
DIRECTORY_MAP = {
|
1603
1629
|
'Adobe Jpeg' => AdobeJpegDirectory,
|
1604
1630
|
'Bmp Header' => BmpHeaderDirectory,
|
@@ -1636,6 +1662,6 @@ class ImageVoodoo
|
|
1636
1662
|
'Xmp' => XmpDirectory,
|
1637
1663
|
|
1638
1664
|
# Aliases
|
1639
|
-
'IFD0' => ExifIFD0Directory
|
1640
|
-
}
|
1665
|
+
'IFD0' => ExifIFD0Directory
|
1666
|
+
}.freeze
|
1641
1667
|
end
|