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.
@@ -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