image_voodoo 0.8.8 → 0.8.9
Sign up to get free protection for your applications and to get access to all the features.
- 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
|