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.
@@ -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(ImageVoodoo.hex_to_color(rgb)) do |g|
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
-
@@ -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
- require 'xmpcore-5.1.2.jar'
2
- require 'metadata-extractor-2.7.0.jar'
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.new "Uknown metadata group: #{dirname}" unless dirclass
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
- !!@directory
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.new "Unkown tag_name: #{tag_name}" unless tag_type
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