-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathImageIO.framework.h
More file actions
2036 lines (1744 loc) · 138 KB
/
ImageIO.framework.h
File metadata and controls
2036 lines (1744 loc) · 138 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
// ========== ImageIO.framework/Headers/ImageIOBase.h
/*
* ImageIO - ImageIOBase.h
* Copyright (c) 2009-2016 Apple Inc.
* All rights reserved.
*
*/
#ifndef __IMAGEIOBASE__
#define __IMAGEIOBASE__
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
#include <float.h>
#include <CoreFoundation/CoreFoundation.h>
#include <os/availability.h>
#include <TargetConditionals.h>
#ifdef IMAGEIO_BUILDING_IMAGEIO
# undef __OSX_AVAILABLE_STARTING
# define __OSX_AVAILABLE_STARTING(m0,i)
# undef __OSX_AVAILABLE_BUT_DEPRECATED
# define __OSX_AVAILABLE_BUT_DEPRECATED(m0,m1,i0,i1)
# define IMAGEIO_AVAILABLE_STARTING(...)
# define IMAGEIO_AVAILABLE_BUT_DEPRECATED(...)
# define IMAGEIO_UNAVAILABLE_DESKTOP
# define IMAGEIO_UNAVAILABLE_EMBEDDED
# define _iio_Nullable
# define _iio_Nonnull
#else
#define GET_IMAGEIO_AVAIL_MACRO(_1,_2,_3,_4,NAME,...) NAME
#define IMAGEIO_AVAILABLE_STARTING(...) GET_IMAGEIO_AVAIL_MACRO(__VA_ARGS__, IMAGEIO_AVAILABLE_STARTING4, IMAGEIO_AVAILABLE_STARTING3, IMAGEIO_AVAILABLE_STARTING2, IMAGEIO_AVAILABLE_STARTING1)(__VA_ARGS__)
#define IMAGEIO_AVAILABLE_STARTING1(m) API_AVAILABLE(macos(m))
#define IMAGEIO_AVAILABLE_STARTING2(m,i) API_AVAILABLE(macos(m), ios(i))
#define IMAGEIO_AVAILABLE_STARTING3(m,i,t) API_AVAILABLE(macos(m), ios(i), tvos(t))
#define IMAGEIO_AVAILABLE_STARTING4(m,i,t,w) API_AVAILABLE(macos(m), ios(i), tvos(t), watchos(w))
#define GET_IMAGEIO_AVAIL_BUT_DEPR_MACRO(_1,_2,_3,_4,_5,NAME,...) NAME
#define IMAGEIO_AVAILABLE_BUT_DEPRECATED(...) GET_IMAGEIO_AVAIL_BUT_DEPR_MACRO(__VA_ARGS__, IMAGEIO_AVAILABLE_BUT_DEPRECATED5, IMAGEIO_AVAILABLE_BUT_DEPRECATED4, IMAGEIO_AVAILABLE_BUT_DEPRECATED3, IMAGEIO_AVAILABLE_BUT_DEPRECATED2, IMAGEIO_AVAILABLE_BUT_DEPRECATED1)(__VA_ARGS__)
#define IMAGEIO_AVAILABLE_BUT_DEPRECATED1(m0)
#define IMAGEIO_AVAILABLE_BUT_DEPRECATED2(m0,m1) API_DEPRECATED("No longer supported", macos(m0,m1))
#define IMAGEIO_AVAILABLE_BUT_DEPRECATED3(m0,m1,w) API_DEPRECATED(w, macos(m0,m1))
#define IMAGEIO_AVAILABLE_BUT_DEPRECATED4(m0,m1,i0,i1) API_DEPRECATED("No longer supported", macos(m0,m1), ios(i0,i1))
#define IMAGEIO_AVAILABLE_BUT_DEPRECATED5(m0,m1,i0,i1,w) API_DEPRECATED(w, macos(m0,m1), ios(i0,i1))
#define IMAGEIO_UNAVAILABLE_DESKTOP API_UNAVAILABLE(macos)
#define IMAGEIO_UNAVAILABLE_EMBEDDED API_UNAVAILABLE(ios, tvos, watchos)
# define _iio_Nullable _Nullable
# define _iio_Nonnull _Nonnull
#endif
#if !defined(IMAGEIO_EXTERN)
# if defined(__WIN32__)
# if defined(IMAGEIO_BUILDING_IMAGEIO)
# if defined(__cplusplus)
# define IMAGEIO_EXTERN extern "C" __declspec(dllexport)
# else /* !defined(__cplusplus) */
# define IMAGEIO_EXTERN extern __declspec(dllexport)
# endif /* !defined(__cplusplus) */
# else /* !defined(IMAGEIO_BUILDING_IMAGEIO) */
# if defined(__cplusplus)
# define IMAGEIO_EXTERN extern "C" __declspec(dllimport)
# else /* !defined(__cplusplus) */
# define IMAGEIO_EXTERN extern __declspec(dllimport)
# endif /* !defined(__cplusplus) */
# endif /* !defined(IMAGEIO_BUILDING_IMAGEIO) */
# else /* !defined(__WIN32__) */
# if defined(__cplusplus)
# define IMAGEIO_EXTERN extern "C" __attribute__((visibility("default")))
# else /* !defined(__cplusplus) */
# define IMAGEIO_EXTERN extern __attribute__((visibility("default")))
# endif /* !defined(__cplusplus) */
# endif /* !defined(__WIN32__) */
#endif /* !defined(IMAGEIO_EXTERN) */
#if !defined(IMAGEIO_EXTERN_C_BEGIN)
# ifdef __cplusplus
# define IMAGEIO_EXTERN_C_BEGIN extern "C" {
# define IMAGEIO_EXTERN_C_END }
# else
# define IMAGEIO_EXTERN_C_BEGIN
# define IMAGEIO_EXTERN_C_END
# endif
#endif
#if (TARGET_OS_MAC || TARGET_OS_IPHONE)
# define IIO_HAS_IOSURFACE 1
#else
# define IIO_HAS_IOSURFACE 0
#endif
#if defined(__has_feature) && __has_feature(objc_bridge_id)
#define IIO_BRIDGED_TYPE(type) CF_BRIDGED_TYPE(type)
#else
#define IIO_BRIDGED_TYPE(type)
#endif
#endif /* __IMAGEIOBASE__ */
// ========== ImageIO.framework/Headers/ImageIO.h
/*
* ImageIO - ImageIO.h
* Copyright (c) 2004-2016 Apple Inc. All rights reserved.
*
*/
#ifndef __IMAGEIO__
#define __IMAGEIO__
#include <ImageIO/ImageIOBase.h>
#include <ImageIO/CGImageSource.h>
#include <ImageIO/CGImageDestination.h>
#include <ImageIO/CGImageProperties.h>
#include <ImageIO/CGImageMetadata.h>
#endif /* __IMAGEIO__ */
// ========== ImageIO.framework/Headers/CGImageMetadata.h
/*
* ImageIO - CGImageMetadata.h
* Copyright (c) 2004-2016 Apple Inc. All rights reserved.
*
*/
#ifndef CGIMAGEMETADATA_H_
#define CGIMAGEMETADATA_H_
#include <ImageIO/ImageIOBase.h>
CF_IMPLICIT_BRIDGING_ENABLED
/*!
* @header CGImageMetadata.h
* @abstract Implements access to image metadata
* @description CGImageMetadata APIs allow clients to view and modify metadata
* for popular image formats. ImageIO supports the EXIF, IPTC, and XMP
* metadata specifications. Please refer to CGImageSource.h for functions to
* read metadata from a CGImageSource, and CGImageDestination.h for functions to
* write metadata to a CGImageDestination. CGImageDestinationCopyImageSource can
* be used to modify metadata without recompressing the image.
*
* Developers can enable additional debugging information by setting the
* environment variable IIO_DEBUG_METADATA=1.
* @related CGImageSource.h
* @related CGImageDestination.h
* @ignorefuncmacro IMAGEIO_AVAILABLE_STARTING
* @ignore IMAGEIO_EXTERN
* @unsorted
*/
/*!
* @typedef CGImageMetadataRef
* @abstract an immutable container for CGImageMetadataTags
*/
typedef const struct IIO_BRIDGED_TYPE(id) CGImageMetadata *CGImageMetadataRef;
///*! @functiongroup Creating and identifying CGImageMetadata containers */
/*!
* @function CGImageMetadataGetTypeID
* @abstract Gets the type identifier for the CGImageMetadata opaque type
* @return the type identifier for the CGImageMetadata opaque type
*/
IMAGEIO_EXTERN CFTypeID CGImageMetadataGetTypeID(void);
/*!
* @typedef CGMutableImageMetadataRef
* @abstract a mutable container for CGImageMetadataTags
* @discussion A CGMutableImageMetadataRef can be used in any function that
* accepts a CGImageMetadataRef.
*/
typedef struct IIO_BRIDGED_TYPE(id) CGImageMetadata *CGMutableImageMetadataRef;
/*!
* @function CGImageMetadataCreateMutable
* @abstract Creates an empty CGMutableImageMetadataRef
*/
IMAGEIO_EXTERN CGMutableImageMetadataRef _iio_Nonnull CGImageMetadataCreateMutable(void) IMAGEIO_AVAILABLE_STARTING(10.8, 7.0);
/*!
* @function CGImageMetadataCreateMutableCopy
* @abstract Creates a deep mutable copy of another CGImageMetadataRef
* @discussion Before modifying an immutable CGImageMetadataRef (such as metadata
* from CGImageSourceCopyMetadataAtIndex) you must first make a copy.
* This function makes a deep copy of all CGImageMetadataTags and their values.
*/
IMAGEIO_EXTERN CGMutableImageMetadataRef _iio_Nullable CGImageMetadataCreateMutableCopy(CGImageMetadataRef _iio_Nonnull metadata) IMAGEIO_AVAILABLE_STARTING(10.8, 7.0);
// ****************************************************************************
// CGImageMetadataTag - an individual metadata tag, encapsulating an EXIF tag,
// IPTC tag, or XMP property.
// ****************************************************************************
/*!
* @typedef CGImageMetadataTagRef
* @abstract an individual metadata tag
* @discussion A CGImageMetadataTag encapsulates an EXIF, IPTC, or XMP property.
* All tags contain a namespace, prefix, name, type, and value. Please see
* @link CGImageMetadataTagCreate @/link for more details.
*/
typedef struct IIO_BRIDGED_TYPE(id) CGImageMetadataTag *CGImageMetadataTagRef;
///*! @functiongroup Creating and identifying CGImageMetadataTags */
/*!
* @function CGImageMetadataTagGetTypeID
* @abstract Gets the type identifier for the CGImageMetadataTag opaque type
* @return the type identifier for the CGImageMetadataTagGetTypeID opaque type
*/
IMAGEIO_EXTERN CFTypeID CGImageMetadataTagGetTypeID(void) IMAGEIO_AVAILABLE_STARTING(10.8, 7.0);
// ****************************************************************************
// Constants for use in a CGImageMetadataTag
// ****************************************************************************
CF_ASSUME_NONNULL_BEGIN
// All metadata tags must contain a namespace. Clients may use one of the
// public namespaces defined below or create their own namespace. If a caller
// defines their own namespace, it should comply with the guidelines set forth
// by Adobe in their XMP specification at:
// http://www.adobe.com/devnet/xmp.html.
// For example: "http://ns.adobe.com/exif/1.0/".
// The caller must also register a custom namespace using
// CGImageMetadataRegisterNamespaceForPrefix.
// Public, common namespaces.
IMAGEIO_EXTERN const CFStringRef kCGImageMetadataNamespaceExif IMAGEIO_AVAILABLE_STARTING(10.8, 7.0);
IMAGEIO_EXTERN const CFStringRef kCGImageMetadataNamespaceExifAux IMAGEIO_AVAILABLE_STARTING(10.8, 7.0);
IMAGEIO_EXTERN const CFStringRef kCGImageMetadataNamespaceExifEX IMAGEIO_AVAILABLE_STARTING(10.9, 7.0);
IMAGEIO_EXTERN const CFStringRef kCGImageMetadataNamespaceDublinCore IMAGEIO_AVAILABLE_STARTING(10.8, 7.0);
IMAGEIO_EXTERN const CFStringRef kCGImageMetadataNamespaceIPTCCore IMAGEIO_AVAILABLE_STARTING(10.8, 7.0);
IMAGEIO_EXTERN const CFStringRef kCGImageMetadataNamespaceIPTCExtension IMAGEIO_AVAILABLE_STARTING(10.13.4, 11.3);
IMAGEIO_EXTERN const CFStringRef kCGImageMetadataNamespacePhotoshop IMAGEIO_AVAILABLE_STARTING(10.8, 7.0);
IMAGEIO_EXTERN const CFStringRef kCGImageMetadataNamespaceTIFF IMAGEIO_AVAILABLE_STARTING(10.8, 7.0);
IMAGEIO_EXTERN const CFStringRef kCGImageMetadataNamespaceXMPBasic IMAGEIO_AVAILABLE_STARTING(10.8, 7.0);
IMAGEIO_EXTERN const CFStringRef kCGImageMetadataNamespaceXMPRights IMAGEIO_AVAILABLE_STARTING(10.8, 7.0);
// All metadata tags must contain a prefix. For the public namespaces defined
// above, no prefix is required - ImageIO will use appropriate defaults. For
// other namespaces a prefix is required. For example, while the exif namespace
// is rather long ("http://ns.adobe.com/exif/1.0/"), when exported the shorter
// string "exif" will be used to prefix all properties in the exif namespace
// (example - "exif:Flash").
// Public, common prefixes.
IMAGEIO_EXTERN const CFStringRef kCGImageMetadataPrefixExif IMAGEIO_AVAILABLE_STARTING(10.8, 7.0);
IMAGEIO_EXTERN const CFStringRef kCGImageMetadataPrefixExifAux IMAGEIO_AVAILABLE_STARTING(10.8, 7.0);
IMAGEIO_EXTERN const CFStringRef kCGImageMetadataPrefixExifEX IMAGEIO_AVAILABLE_STARTING(10.9, 7.0);
IMAGEIO_EXTERN const CFStringRef kCGImageMetadataPrefixDublinCore IMAGEIO_AVAILABLE_STARTING(10.8, 7.0);
IMAGEIO_EXTERN const CFStringRef kCGImageMetadataPrefixIPTCCore IMAGEIO_AVAILABLE_STARTING(10.8, 7.0);
IMAGEIO_EXTERN const CFStringRef kCGImageMetadataPrefixIPTCExtension IMAGEIO_AVAILABLE_STARTING(10.13.4, 11.3);
IMAGEIO_EXTERN const CFStringRef kCGImageMetadataPrefixPhotoshop IMAGEIO_AVAILABLE_STARTING(10.8, 7.0);
IMAGEIO_EXTERN const CFStringRef kCGImageMetadataPrefixTIFF IMAGEIO_AVAILABLE_STARTING(10.8, 7.0);
IMAGEIO_EXTERN const CFStringRef kCGImageMetadataPrefixXMPBasic IMAGEIO_AVAILABLE_STARTING(10.8, 7.0);
IMAGEIO_EXTERN const CFStringRef kCGImageMetadataPrefixXMPRights IMAGEIO_AVAILABLE_STARTING(10.8, 7.0);
CF_ASSUME_NONNULL_END
// Metadata value type constants.
/*!
* @typedef CGImageMetadataType
* @abstract The XMP type for a CGImageMetadataTag
* @discussion CGImageMetadataType defines a list of constants used to indicate
* the type for a CGImageMetadataTag. If you are reading metadata, use the type
* to determine how to interpret the CGImageMetadataTag's value. If you are
* creating a CGImageMetadataTag, use the type to specify how the tag
* should be serialized in XMP. String types have CFStringRef values, array
* types have CFArray values, and structure types have CFDictionary values.
* @const kCGImageMetadataTypeDefault The type will be interpretted based on the
* CFType of the tag's value. This is only used when creating a new
* CGImageMetadataTag - no existing tags should have this value. CFString
* defaults to kCGImageMetadataTypeString, CFArray defaults to
* kCGImageMetadataTypeArrayOrdered, and CFDictionary defaults to
* kCGImageMetadataTypeStructure.
* @const kCGImageMetadataTypeString A string value. CFNumber and CFBoolean
* values will be converted to a string.
* @const kCGImageMetadataTypeArrayUnordered An array where order does not matter.
* Serialized in XMP as <rdf:Bag>.
* @const kCGImageMetadataTypeArrayOrdered An array where order is preserved.
* Serialized in XMP as <rdf:Seq>.
* @const kCGImageMetadataTypeAlternateArray An ordered array where all elements
* are alternates for the same value. Serialized in XMP as <rdf:Alt>.
* @const kCGImageMetadataTypeAlternateText A special case of an alternate array
* where all elements are different localized strings for the same value.
* Serialized in XMP as an alternate array of strings with xml:lang qualifiers.
* @const kCGImageMetadataTypeStructure A collection of keys and values. Unlike
* array elements, fields of a structure may belong to different namespaces.
*/
typedef CF_ENUM(int32_t, CGImageMetadataType) {
kCGImageMetadataTypeInvalid = -1,
kCGImageMetadataTypeDefault = 0,
kCGImageMetadataTypeString = 1,
kCGImageMetadataTypeArrayUnordered = 2,
kCGImageMetadataTypeArrayOrdered = 3,
kCGImageMetadataTypeAlternateArray = 4,
kCGImageMetadataTypeAlternateText = 5,
kCGImageMetadataTypeStructure = 6
};
// ****************************************************************************
// Creating a CGImageMetadataTag
// ****************************************************************************
/*!
* @function CGImageMetadataTagCreate
* @abstract Creates a new CGImageMetadataTag
* @param xmlns The namespace for the tag. The value can be a common XMP namespace
* defined above, such as kCGImageMetadataNamespaceExif, or a CFString with a
* custom namespace URI. Custom namespaces must be a valid XML namespace. By
* convention, namespaces should end with either '/' or '#'. For example, exif
* uses the namespace "http://ns.adobe.com/exif/1.0/".
* @param prefix An abbreviation for the XML namespace. The value can be NULL if
* the namespace is defined as a constant. Custom prefixes must be a valid XML
* name. For example, the prefix used for "http://ns.adobe.com/exif/1.0/" is "exif".
* The XMP serialization of the tag will use the prefix. Prefixes are also
* important for path-based CGImageMetadata functions, such as
* @link CGImageMetadataCopyStringValueWithPath @/link or
* @link CGImageMetadataSetValueWithPath @/link.
* @param name The name of the tag. It must be a valid XMP name.
* @param type The type of the tag's value. Must be a constant from @link
* CGImageMetadataType @/link.
* @param value The value of the tag. Allowable CFTypes include CFStringRef,
* CFNumberRef, CFBooleanRef, CFArrayRef, and CFDictionaryRef. The CFType of 'value'
* must correspond to the 'type'. The elements of a CFArray must be either a
* CFStringRef or CGImageMetadataTagRef. The keys of a CFDictionary must be
* CFStringRefs with valid XMP names. The values of a CFDictionary must be either
* CFStringRefs or CGImageMetadataTagRefs. A shallow copy of the value is stored
* in the tag. Therefore, modifying a mutable value after the tag is created
* will not affect the tag's value.
* @result Returns a pointer to a new CGImageMetadataTag. Returns NULL if a tag
* could not be created with the specified parameters.
*/
IMAGEIO_EXTERN CGImageMetadataTagRef _iio_Nullable CGImageMetadataTagCreate (CFStringRef _iio_Nonnull xmlns, CFStringRef _iio_Nullable prefix, CFStringRef _iio_Nonnull name, CGImageMetadataType type, CFTypeRef _iio_Nonnull value) IMAGEIO_AVAILABLE_STARTING(10.8, 7.0);
// ****************************************************************************
// Getting attributes of a CGImageMetadataTag
// ****************************************************************************
///*! @functiongroup Getting attributes of a CGImageMetadataTag */
/*!
* @function CGImageMetadataTagCopyNamespace
* @abstract Returns a copy of the tag's namespace
*/
IMAGEIO_EXTERN CFStringRef _iio_Nullable CGImageMetadataTagCopyNamespace(CGImageMetadataTagRef _iio_Nonnull tag) IMAGEIO_AVAILABLE_STARTING(10.8, 7.0);
/*!
* @function CGImageMetadataTagCopyPrefix
* @abstract Returns a copy of the tag's prefix
*/
IMAGEIO_EXTERN CFStringRef _iio_Nullable CGImageMetadataTagCopyPrefix(CGImageMetadataTagRef _iio_Nonnull tag) IMAGEIO_AVAILABLE_STARTING(10.8, 7.0);
/*!
* @function CGImageMetadataTagCopyName
* @abstract Returns a copy of the tag's name
*/
IMAGEIO_EXTERN CFStringRef _iio_Nullable CGImageMetadataTagCopyName(CGImageMetadataTagRef _iio_Nonnull tag) IMAGEIO_AVAILABLE_STARTING(10.8, 7.0);
/*!
* @function CGImageMetadataTagCopyValue
* @abstract Returns a shallow copy of the tag's value
* @discussion This function should only be used to read the tag's value.
* CGImageMetadataCopyTagWithPath returns a copy of the tag (including a copy of
* the tag's value). Therefore mutating a tag's value returned from this function
* may not actually mutate the value in the CGImageMetadata. It is recommended
* to create a new tag followed by CGImageMetadataSetTagWithPath, or use
* CGImageMetadataSetValueWithPath to mutate a metadata value.
*/
IMAGEIO_EXTERN CFTypeRef _iio_Nullable CGImageMetadataTagCopyValue(CGImageMetadataTagRef _iio_Nonnull tag) IMAGEIO_AVAILABLE_STARTING(10.8, 7.0);
/*!
* @function CGImageMetadataTagGetType
* @abstract Get the type of the CGImageMetadataTag
* @return Returns a CGImageMetadataType constant for the CGImageMetadataTag.
* This is primarily used to determine how to interpret the tag's value.
*/
IMAGEIO_EXTERN CGImageMetadataType CGImageMetadataTagGetType(CGImageMetadataTagRef _iio_Nonnull tag) IMAGEIO_AVAILABLE_STARTING(10.8, 7.0);
/*!
* @function CGImageMetadataTagCopyQualifiers
* @abstract Return a copy of the tag's qualifiers
* @discussion XMP allows properties to contain supplemental properties called
* qualifiers. Qualifiers are themselves CGImageMetadataTags with their own
* namespace, prefix, name, and value. A common use is the xml:lang qualifier
* for elements of an alternate-text array.
* @return Returns a copy of the array of qualifiers. Elements of the array are
* CGImageMetadataTags. Returns NULL if the tag does not have any qualifiers.
* The copy is shallow, the qualifiers are not deep copied.
*/
IMAGEIO_EXTERN CFArrayRef _iio_Nullable CGImageMetadataTagCopyQualifiers(CGImageMetadataTagRef _iio_Nonnull tag) IMAGEIO_AVAILABLE_STARTING(10.8, 7.0);
// ****************************************************************************
// Functions for copying CGImageMetadataTagRefs from a CGImageMetadataRef.
// These functions make it easier for the caller to traverse complex nested
// structures of metadata, similar to KVC-compliant Objective-C classes.
// ****************************************************************************
///*! @functiongroup Retrieving CGImageMetadataTagRefs from a CGImageMetadataRef */
/*!
* @function CGImageMetadataCopyTags
* @abstract Obtain an array of tags from a CGImageMetadataRef
* @return Returns an array with a shallow copy of all top-level
* CGImageMetadataTagRefs in a CGImageMetadataRef.
*/
IMAGEIO_EXTERN CFArrayRef _iio_Nullable CGImageMetadataCopyTags(CGImageMetadataRef _iio_Nonnull metadata) IMAGEIO_AVAILABLE_STARTING(10.8, 7.0);
/*!
* @function CGImageMetadataCopyTagWithPath
* @abstract Searches for a specific CGImageMetadataTag in a CGImageMetadataRef
* @discussion This is the primary function for clients to obtain specific
* metadata properties from an image. The 'path' mechanism provides a way to
* access both simple top-level properties, such as Date & Time, or complex
* deeply-nested properties with ease.
* @param metadata A collection of metadata tags.
* @param parent A parent tag. If NULL, the path is relative to the root of the
* CGImageMetadataRef (i.e. it is not a child of another property). If the parent
* is provided, the effective path will be the concatenation of the parent's path
* and the 'path' parameter. This is useful for accessing array elements or
* structure fields inside nested tags.
* @param path A string representing a path to the desired tag. Paths consist of
* a tag prefix (i.e. "exif") joined with a tag name (i.e. "Flash") by a colon
* (":"), such as CFSTR("exif:Flash").
* Elements of ordered and unordered arrays are accessed via 0-based indices inside square [] brackets.
* Elements of alternate-text arrays are accessed by an RFC 3066 language code inside square [] brackets.
* Fields of a structure are delimited by a period, '.'.
* Qualifiers are delimited by the '?' character. Only tags with string values (kCGImageMetadataTypeString)
* are allowed to have qualifiers - arrays and structures may not contain qualifiers.
*
* If parent is NULL, a prefix must be specified for the first tag. Prefixes for
* all subsequent tags are optional. If unspecified, the prefix is
* inherented from the nearest parent tag with a prefix. Custom prefixes must be
* registered using @link CGImageMetadataRegisterNamespaceForPrefix @/link prior to use
* in any path-based functions.
*
* Examples:
* <ul>
* <li>'path' = CFSTR("xmp:CreateDate")</li>
* <li>'path' = CFSTR("exif:Flash.Fired")</li>
* <li>'parent' = tag at path CFSTR("exif:Flash"), path = CFSTR("exif:Fired") (equivilent to previous)</li>
* <li>'path' = CFSTR("exif:Flash.RedEyeMode")</li>
* <li>'path' = CFSTR("dc:title")</li>
* <li>'path' = CFSTR("dc:subject")</li>
* <li>'path' = CFSTR("dc:subject[2]") </li>
* <li>'parent' = tag at path CFSTR("dc:subject"), path = CFSTR("[2]") (equivilent to previous)</li>
* <li>'path' = CFSTR("dc:description[x-default])"</li>
* <li>'path' = CFSTR("dc.description[de])"</li>
* <li>'path' = CFSTR("dc.description[fr])"</li>
* <li>'path' = CFSTR("foo:product)"</li>
* <li>'path' = CFSTR("foo:product?bar:manufacturer)"</li>
* </ul>
* @return Returns a copy of CGImageMetadataTag matching 'path', or NULL if no
* match is found. The copy of the tag's value is shallow. Tags
* copied from an immutable CGImageMetadataRef are also immutable. Because this
* function returns a copy of the tag's value, any modification of the tag's
* value must be followed by a CGImageMetadataSetTagWithPath to commit the
* change to the metadata container.
*/
IMAGEIO_EXTERN CGImageMetadataTagRef _iio_Nullable CGImageMetadataCopyTagWithPath(CGImageMetadataRef _iio_Nonnull metadata, CGImageMetadataTagRef _iio_Nullable parent, CFStringRef _iio_Nonnull path) IMAGEIO_AVAILABLE_STARTING(10.8, 7.0);
/*!
* @function CGImageMetadataCopyStringValueWithPath
* @abstract Searches for a specific tag in a CGImageMetadataRef and returns its
* string value.
* @discussion This is a convenience method for searching for a tag at path and
* extracting the string value.
* @param metadata A collection of metadata tags.
* @param parent A parent tag. If NULL, the path is relative to the root of the
* CGImageMetadataRef (i.e. it is not a child of another property).
* @param path A string with the path to the desired tag. Please consult
* the documentation of @link CGImageMetadataCopyTagWithPath @/link for
* information about path syntax.
* @return Returns a string from a CGImageMetadataTag located at 'path'. The
* tag must be of type kCGImageMetadataTypeString or kCGImageMetadataTypeAlternateText.
* For AlternateText tags, the element with the "x-default" language qualifier
* will be returned. For other types, NULL will be returned.
*/
IMAGEIO_EXTERN CFStringRef _iio_Nullable CGImageMetadataCopyStringValueWithPath(CGImageMetadataRef _iio_Nonnull metadata, CGImageMetadataTagRef _iio_Nullable parent, CFStringRef _iio_Nonnull path) IMAGEIO_AVAILABLE_STARTING(10.8, 7.0);
// ****************************************************************************
// Functions for modifying a CGMutableImageMetadataRef
// ****************************************************************************
///*! @functiongroup Modifying a CGMutableImageMetadataRef */
/*!
* @function CGImageMetadataRegisterNamespaceForPrefix
* @abstract Associates an XMP namespace URI with a prefix string.
* @discussion This allows ImageIO to create custom metadata when it encounters
* an unrecognized prefix in a path (see CGImageMetadataCopyTagWithPath for more
* information about path syntax). A namespace must be registered before it can
* be used to add custom metadata. All namespaces found in the image's metadata,
* or defined as a constant above, will be pre-registered. Namespaces and
* prefixes must be unique.
* @return Returns true if successful. Returns false and sets 'err' if an error
* or conflict occurs.
*/
IMAGEIO_EXTERN bool CGImageMetadataRegisterNamespaceForPrefix(CGMutableImageMetadataRef _iio_Nonnull metadata, CFStringRef _iio_Nonnull xmlns, CFStringRef _iio_Nonnull prefix, _iio_Nullable CFErrorRef * _iio_Nullable err) IMAGEIO_AVAILABLE_STARTING(10.8, 7.0);
/*!
* @function CGImageMetadataSetTagWithPath
* @abstract Sets the tag at a specific path in a CGMutableImageMetadata container or a parent tag
* @discussion This is the primary function for adding new metadata tags to a
* metadata container, or updating existing tags. All tags required to reach
* the final tag (at the end of the path) will be created, if needed. Tags will
* created with default types (ordered arrays). Creating tags will fail if a
* prefix is encountered that has not been registered. Use
* @link CGImageMetadataRegisterNamespaceForPrefix @/link to associate a prefix
* with a namespace prior to using a path-based CGImageMetadata function.
* Note that if a parent tag is provided,
* the children of that tag reference will be modified, which may be a different
* reference from the tag stored in the metadata container. Since tags are normally
* obtained as a copy, it is typically neccesary to use CGImageMetadataSetTagWithPath
* to commit the changed parent object back to the metadata container (using
* the parent's path and NULL for the parent).
* @param metadata A mutable collection of metadata tags.
* Use @link CGImageMetadataCreateMutableCopy @/link or
* @link CGImageMetadataCreateMutable @/link to obtain a mutable metadata container.
* @param parent A parent tag. If NULL, the path is relative to the root of the
* CGImageMetadataRef (i.e. it is not a child of another property).
* Note that if a parent tag is provided,
* the children of that tag reference will be modified, which may be a different
* reference from the tag stored in the metadata container. Since tags are normally
* obtained as a copy, it is typically neccesary to use CGImageMetadataSetTagWithPath
* to commit the changed parent object back to the metadata container (using
* the parent's path and NULL for the parent).
* @param path A string with the path to the desired tag. Please consult
* the documentation of @link CGImageMetadataCopyTagWithPath @/link for
* information about path syntax.
* @param tag The CGImageMetadataTag to be added to the metadata. The tag
* will be retained.
* @return Returns true if successful, false otherwise.
*/
IMAGEIO_EXTERN bool CGImageMetadataSetTagWithPath(CGMutableImageMetadataRef _iio_Nonnull metadata, CGImageMetadataTagRef _iio_Nullable parent, CFStringRef _iio_Nonnull path, CGImageMetadataTagRef _iio_Nonnull tag) IMAGEIO_AVAILABLE_STARTING(10.8, 7.0);
/*!
* @function CGImageMetadataSetValueWithPath
* @abstract Sets the value of the tag at a specific path in a CGMutableImageMetadataRef container or a parent tag
* @discussion This function is used to add new metadata values to a
* metadata container, or update existing tag values. All tags required to reach
* the final tag (at the end of the path) are created, if needed. Tags are
* created with default types (i.e. arrays will be ordered). Creating tags will
* fail if a prefix is encountered that has not been registered. Use
* @link CGImageMetadataRegisterNamespaceForPrefix @/link to associate a prefix
* with a namespace prior to using a path-based CGImageMetadata function.
*
* Examples
* <ul>
* <li>'path' = CFSTR("xmp:CreateDate"), 'value' = CFSTR("2011-09-20T14:54:47-08:00")</li>
* <li>'path' = CFSTR("dc:subject[0]"), 'value' = CFSTR("San Francisco")</li>
* <li>'path' = CFSTR("dc:subject[1]"), 'value' = CFSTR("Golden Gate Bridge")</li>
* <li>'path' = CFSTR("dc:description[en]") 'value' = CFSTR("my image description")</li>
* <li>'path' = CFSTR("dc:description[de]") 'value' = CFSTR("meine bildbeschreibung")</li>
* </ul>
* Note that if a parent tag is provided,
* the children of that tag reference will be modified, which may be a different
* reference from the tag stored in the metadata container. Since tags are normally
* obtained as a copy, it is typically neccesary to use CGImageMetadataSetTagWithPath
* to commit the changed parent object back to the metadata container (using
* the parent's path and NULL for the parent).
* @param metadata A mutable collection of metadata tags.
* Use @link CGImageMetadataCreateMutableCopy @/link or
* @link CGImageMetadataCreateMutable @/link to obtain a mutable metadata container.
* @param parent A parent tag. If NULL, the path is relative to the root of the
* CGImageMetadataRef (i.e. it is not a child of another property).
* @param path A string with the path to the desired tag. Please consult
* the documentation of @link CGImageMetadataCopyTagWithPath @/link for
* information about path syntax.
* @param value The value to be added to the CGImageMetadataTag matching the path.
* The tag will be retained. The restrictions for the value are the same as in @link
* CGImageMetadataTagCreate @/link.
* @return Returns true if successful, false otherwise.
*/
IMAGEIO_EXTERN bool CGImageMetadataSetValueWithPath(CGMutableImageMetadataRef _iio_Nonnull metadata, CGImageMetadataTagRef _iio_Nullable parent, CFStringRef _iio_Nonnull path, CFTypeRef _iio_Nonnull value) IMAGEIO_AVAILABLE_STARTING(10.8, 7.0);
/*!
* @function CGImageMetadataRemoveTagWithPath
* @abstract Removes the tag at a specific path from a CGMutableImageMetadata container or from the parent tag
* @discussion Use this function to delete a metadata tag matching a specific
* path from a mutable metadata container. Note that if a parent tag is provided,
* the children of that tag reference will be modified, which may be a different
* reference from the tag stored in the metadata container. Since tags are normally
* obtained as a copy, it is typically neccesary to use CGImageMetadataSetTagWithPath
* to commit the changed parent object back to the metadata container (using
* the parent's path and NULL for the parent).
* @param parent A parent tag. If NULL, the path is relative to the root of the
* CGImageMetadataRef (i.e. it is not a child of another property).
* @param path A string with the path to the desired tag. Please consult
* the documentation of @link CGImageMetadataCopyTagWithPath @/link for
* information about path syntax.
*/
IMAGEIO_EXTERN bool CGImageMetadataRemoveTagWithPath(CGMutableImageMetadataRef _iio_Nonnull metadata, CGImageMetadataTagRef _iio_Nullable parent, CFStringRef _iio_Nonnull path) IMAGEIO_AVAILABLE_STARTING(10.8, 7.0);
#ifdef __BLOCKS__
///*! @functiongroup Iterating through tags of CGImageMetadataRef */
/*!
* @typedef CGImageMetadataTagBlock
* @abstract The block type used by CGImageMetadataEnumerateTagsUsingBlock
* @param path The full path to the tag in the metadata container.
* @param tag The CGImageMetadataTagRef corresponding to the path in metadata.
* @return Return true to continue iterating through the tags, or return false to stop.
*/
typedef bool(^CGImageMetadataTagBlock)(CFStringRef _iio_Nonnull path, CGImageMetadataTagRef _iio_Nonnull tag);
// Enumerates the children of the tag located at 'path'.
// If 'rootPath' is nil, all top-level tags in 'metadata' will be enumerated.
// Executes a CGImageMetadataTagBlock, 'block', for each CGImageMetadataTag.
// The block should return true to continue enumeration, or false to stop.
// Behavior is undefined if 'metadata' is modified during enumeration.
/*!
* @function CGImageMetadataEnumerateTagsUsingBlock
* @abstract Executes a given block using each tag in the metadata
* @discussion This function iterates over all of the tags in a
* CGImageMetadataRef, executing the block for each tag. The default behavior
* iterates over all top-level tags in the metadata. The path of the tag and
* the tag itself is passed to the block. The metadata cannot be modified inside
* the block - consider adding the tags of interest into another collection.
* @param metadata A collection of metadata tags.
* @param rootPath Iteration will occur for all children of the tag matching
* the root path. Please refer to CGImageMetadataCopyTagWithPath for information
* about path syntax. If NULL or an empty string, the block will be executed
* for all top-level tags in the metadata container.
* @param options A dictionary of options for iterating through the tags.
* Currently the only supported option is kCGImageMetadataEnumerateRecursively,
* which should be set to a CFBoolean.
* @param block The block that is executed for each tag in metadata.
*/
IMAGEIO_EXTERN void CGImageMetadataEnumerateTagsUsingBlock(CGImageMetadataRef _iio_Nonnull metadata, CFStringRef _iio_Nullable rootPath, CFDictionaryRef _iio_Nullable options, CGImageMetadataTagBlock _iio_Nonnull block) IMAGEIO_AVAILABLE_STARTING(10.8, 7.0);
#endif
// A key for the 'options' of CGImageMetadataEnumerateTagsUsingBlock. If present,
// the value should be a CFBoolean. If true, tags will be enumerated recursively,
// if false, only the direct children of 'rootPath' will be enumerated.
// The default is non-recursive.
IMAGEIO_EXTERN const CFStringRef _iio_Nonnull kCGImageMetadataEnumerateRecursively IMAGEIO_AVAILABLE_STARTING(10.8, 7.0);
// ****************************************************************************
// Functions for working with constants defined in CGImageProperties.h
// Provides a bridge for values from CGImageCopyPropertiesAtIndex().
// Simplifies metadata access for properties defined EXIF and IPTC standards,
// which have no notion of namespaces, prefixes, or XMP property types.
// Metadata Working Group guidance is factored into the mapping of
// CGImageProperties to XMP. For example, setting Exif DateTimeOriginal will
// set the value of the corresponding XMP tag, which is photoshop:DateCreated
// ****************************************************************************
///*! @functiongroup Working with CGImageProperties */
/*!
* @function CGImageMetadataCopyTagMatchingImageProperty
* @abstract Searches for a specific CGImageMetadataTag matching a kCGImageProperty constant
* @discussion Provides a bridge for values from CGImageCopyPropertiesAtIndex, simplifying
* access for properties defined in EXIF and IPTC standards, which have no notion of
* namespaces, prefixes, or XMP property types.
* Metadata Working Group guidance is factored into the mapping of CGImageProperties to
* XMP compatible CGImageMetadataTags.
* For example, kCGImagePropertyExifDateTimeOriginal will get the value of the
* corresponding XMP tag, which is photoshop:DateCreated. Note that property values will
* still be in their XMP forms, such as "YYYY-MM-DDThh:mm:ss" for DateTime, rather than
* the EXIF or IPTC DateTime formats.
* @param metadata A collection of metadata tags
* @param dictionaryName the metadata subdictionary to which the image property belongs,
* such as kCGImagePropertyExifDictionary or kCGImagePropertyIPTCDictionary. Not all
* dictionaries and properties are supported at this time.
* @param propertyName the name of the property. This must be a defined property constant
* corresponding to the 'dictionaryName'. For example, kCGImagePropertyTIFFOrientation,
* kCGImagePropertyExifDateTimeOriginal, or kCGImagePropertyIPTCKeywords. A warning
* will be logged if the CGImageProperty is unsupported by CGImageMetadata.
* @return Returns a CGImageMetadataTagRef with the appropriate namespace, prefix,
* tag name, and XMP value for the corresponding CGImageProperty. Returns NULL if the
* property could not be found.
*/
IMAGEIO_EXTERN CGImageMetadataTagRef _iio_Nullable CGImageMetadataCopyTagMatchingImageProperty(CGImageMetadataRef _iio_Nonnull metadata, CFStringRef _iio_Nonnull dictionaryName, CFStringRef _iio_Nonnull propertyName) IMAGEIO_AVAILABLE_STARTING(10.8, 7.0);
/*!
* @function CGImageMetadataSetValueMatchingImageProperty
* @abstract Sets the value of the CGImageMetadataTag matching a kCGImageProperty constant
* @discussion Provides a bridge for values from CGImageCopyPropertiesAtIndex, simplifying
* changing property values defined in EXIF and IPTC standards, which have no notion of
* namespaces, prefixes, or XMP property types.
* Metadata Working Group guidance is factored into the mapping of CGImageProperties to
* XMP compatible CGImageMetadataTags.
* For example, setting kCGImagePropertyExifDateTimeOriginal will set the value of the
* corresponding XMP tag, which is photoshop:DateCreated. Note that property values should
* still be in their XMP forms, such as "YYYY-MM-DDThh:mm:ss" for DateTime, rather than
* the EXIF or IPTC DateTime formats. Although this function will allow the caller to set
* custom values for these properties, you should consult the appropriate specifications
* for details about property value formats for EXIF and IPTC tags in XMP.
* @param metadata A mutable collection of metadata tags
* @param dictionaryName the metadata subdictionary to which the image property belongs,
* such as kCGImagePropertyExifDictionary or kCGImagePropertyIPTCDictionary. Not all
* dictionaries and properties are supported at this time.
* @param propertyName the name of the property. This must be a defined property constant
* corresponding to the 'dictionaryName'. For example, kCGImagePropertyTIFFOrientation,
* kCGImagePropertyExifDateTimeOriginal, or kCGImagePropertyIPTCKeywords. A warning
* will be logged if the CGImageProperty is unsupported by CGImageMetadata.
* @param value A CFTypeRef with the value for the tag. The same value restrictions apply
* as in @link CGImageMetadataTagCreate @/link.
* @return Returns true if successful, false otherwise.
*/
IMAGEIO_EXTERN bool CGImageMetadataSetValueMatchingImageProperty(CGMutableImageMetadataRef _iio_Nonnull metadata, CFStringRef _iio_Nonnull dictionaryName, CFStringRef _iio_Nonnull propertyName, CFTypeRef _iio_Nonnull value) IMAGEIO_AVAILABLE_STARTING(10.8, 7.0);
// ****************************************************************************
// Functions for converting metadata to and from XMP packets
// ****************************************************************************
///*! @functiongroup Reading and Writing XMP */
/*!
* @function CGImageMetadataCreateXMPData
* @abstract Serializes the CGImageMetadataRef to XMP data
* @discussion This converts all of the metadata tags to a block of XMP data. Common uses
* include creating sidecar files that contain metadata for image formats that do not
* support embedded XMP, or cannot be edited due to other format restrictions (such as
* proprietary RAW camera formats).
* @param metadata A collection of metadata tags.
* @param options should be NULL. Options are currently not used, but may be used in
* future release.
* @return Returns a CFData containing an XMP representation of the metadata. Returns
* NULL if an error occurred.
*/
IMAGEIO_EXTERN CFDataRef _iio_Nullable CGImageMetadataCreateXMPData (CGImageMetadataRef _iio_Nonnull metadata, CFDictionaryRef _iio_Nullable options) IMAGEIO_AVAILABLE_STARTING(10.8, 7.0);
/*!
* @function CGImageMetadataCreateFromXMPData
* @abstract Creates a collection of CGImageMetadataTags from a block of XMP data
* @discussion Converts XMP data into a collection of metadata tags.
* The data must be a complete XMP tree. XMP packet headers (<?xpacket .. ?>) are
* supported.
* @param data The XMP data.
* @return Returns a collection of CGImageMetadata tags. Returns NULL if an error occurred.
*/
IMAGEIO_EXTERN CGImageMetadataRef _iio_Nullable CGImageMetadataCreateFromXMPData (CFDataRef _iio_Nonnull data) IMAGEIO_AVAILABLE_STARTING(10.8, 7.0);
/*!
* @constant kCFErrorDomainCGImageMetadata
* @discussion Error domain for all errors originating in ImageIO for CGImageMetadata APIs.
* Error codes may be interpreted using the list below.
*/
IMAGEIO_EXTERN const CFStringRef _iio_Nonnull kCFErrorDomainCGImageMetadata;
/*!
* @enum CGImageMetadataErrors
* @discussion the list of all error codes returned under the error domain kCFErrorDomainCGImageMetadata
*/
typedef CF_ENUM(int32_t, CGImageMetadataErrors) {
kCGImageMetadataErrorUnknown = 0,
kCGImageMetadataErrorUnsupportedFormat = 1,
kCGImageMetadataErrorBadArgument = 2,
kCGImageMetadataErrorConflictingArguments = 3,
kCGImageMetadataErrorPrefixConflict = 4,
};
CF_IMPLICIT_BRIDGING_DISABLED
#endif // CGIMAGEMETADATA_H_
// ========== ImageIO.framework/Headers/CGImageProperties.h
/*
* ImageIO - CGImageProperties.h
* Copyright (c) 2004-2016 Apple Inc. All rights reserved.
*
*/
#ifndef __CGIMAGEPROPERTIES__
#define __CGIMAGEPROPERTIES__
#include <CoreGraphics/CGBase.h>
#include <ImageIO/ImageIOBase.h>
CF_IMPLICIT_BRIDGING_ENABLED
CF_ASSUME_NONNULL_BEGIN
/* Properties that, if returned by CGImageSourceCopyProperties or
* CGImageSourceCopyPropertiesAtIndex, contain a dictionary of file-format
* or metadata-format specific key-values. */
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyTIFFDictionary IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyGIFDictionary IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyJFIFDictionary IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyHEICSDictionary IMAGEIO_AVAILABLE_STARTING(10.15, 13.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyExifDictionary IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyPNGDictionary IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyIPTCDictionary IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyGPSDictionary IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyRawDictionary IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyCIFFDictionary IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyMakerCanonDictionary IMAGEIO_AVAILABLE_STARTING(10.5, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyMakerNikonDictionary IMAGEIO_AVAILABLE_STARTING(10.5, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyMakerMinoltaDictionary IMAGEIO_AVAILABLE_STARTING(10.5, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyMakerFujiDictionary IMAGEIO_AVAILABLE_STARTING(10.5, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyMakerOlympusDictionary IMAGEIO_AVAILABLE_STARTING(10.5, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyMakerPentaxDictionary IMAGEIO_AVAILABLE_STARTING(10.5, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImageProperty8BIMDictionary IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyDNGDictionary IMAGEIO_AVAILABLE_STARTING(10.5, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyExifAuxDictionary IMAGEIO_AVAILABLE_STARTING(10.5, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyOpenEXRDictionary IMAGEIO_AVAILABLE_STARTING(10.9, 11.3);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyMakerAppleDictionary IMAGEIO_AVAILABLE_STARTING(10.10, 7.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyFileContentsDictionary IMAGEIO_AVAILABLE_STARTING(10.13, 11.0);
/** Properties which may be returned by "CGImageSourceCopyProperties". The
** values apply to the container in general but not necessarily to any
** individual image that it contains. **/
/* The size of the image file in bytes, if known. If present, the value of
* this key is a CFNumberRef. */
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyFileSize IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
/** Properties which may be returned by "CGImageSourceCopyPropertiesAtIndex".
** The values apply to a single image of an image source file. **/
/* The number of pixels in the x- and y-dimensions. The value of these keys
* is a CFNumberRef. */
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyPixelHeight IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyPixelWidth IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
/* The DPI in the x- and y-dimensions, if known. If present, the value of
* these keys is a CFNumberRef. */
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyDPIHeight IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyDPIWidth IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
/* The number of bits in each color sample of each pixel. The value of this
* key is a CFNumberRef. */
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyDepth IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
/* The intended display orientation of the image. If present, the value
* of this key is a CFNumberRef with the same value as defined by the
* TIFF and Exif specifications. That is:
* 1 = 0th row is at the top, and 0th column is on the left.
* 2 = 0th row is at the top, and 0th column is on the right.
* 3 = 0th row is at the bottom, and 0th column is on the right.
* 4 = 0th row is at the bottom, and 0th column is on the left.
* 5 = 0th row is on the left, and 0th column is the top.
* 6 = 0th row is on the right, and 0th column is the top.
* 7 = 0th row is on the right, and 0th column is the bottom.
* 8 = 0th row is on the left, and 0th column is the bottom.
* If not present, a value of 1 is assumed. */
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyOrientation IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
/* The value of this key is kCFBooleanTrue if the image contains floating-
* point pixel samples */
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyIsFloat IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
/* The value of this key is kCFBooleanTrue if the image contains indexed
* (a.k.a. paletted) pixel samples */
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyIsIndexed IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
/* The value of this key is kCFBooleanTrue if the image contains an alpha
* (a.k.a. coverage) channel */
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyHasAlpha IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
/* The color model of the image such as "RGB", "CMYK", "Gray", or "Lab".
* The value of this key is CFStringRef. */
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyColorModel IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
/* The name of the optional ICC profile embedded in the image, if known.
* If present, the value of this key is a CFStringRef. */
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyProfileName IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
/* For HEIF images: the value of this key is kCFBooleanTrue if the image at the given index is the primary image.
*/
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyPrimaryImage IMAGEIO_AVAILABLE_STARTING(10.13, 11.0);
/* Possible values for kCGImagePropertyColorModel property */
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyColorModelRGB IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyColorModelGray IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyColorModelCMYK IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyColorModelLab IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
/* Possible keys for kCGImagePropertyTIFFDictionary */
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyTIFFCompression IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyTIFFPhotometricInterpretation IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyTIFFDocumentName IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyTIFFImageDescription IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyTIFFMake IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyTIFFModel IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyTIFFOrientation IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyTIFFXResolution IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyTIFFYResolution IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyTIFFResolutionUnit IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyTIFFSoftware IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyTIFFTransferFunction IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyTIFFDateTime IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyTIFFArtist IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyTIFFHostComputer IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyTIFFCopyright IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyTIFFWhitePoint IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyTIFFPrimaryChromaticities IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyTIFFTileWidth IMAGEIO_AVAILABLE_STARTING(10.11, 9.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyTIFFTileLength IMAGEIO_AVAILABLE_STARTING(10.11, 9.0);
/* Possible keys for kCGImagePropertyJFIFDictionary */
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyJFIFVersion IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyJFIFXDensity IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyJFIFYDensity IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyJFIFDensityUnit IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyJFIFIsProgressive IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
/* Possible keys for kCGImagePropertyHEICSDictionary */
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyHEICSLoopCount IMAGEIO_AVAILABLE_STARTING(10.15, 13.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyHEICSDelayTime IMAGEIO_AVAILABLE_STARTING(10.15, 13.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyHEICSUnclampedDelayTime IMAGEIO_AVAILABLE_STARTING(10.15, 13.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyHEICSCanvasPixelWidth IMAGEIO_AVAILABLE_STARTING(10.15, 13.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyHEICSCanvasPixelHeight IMAGEIO_AVAILABLE_STARTING(10.15, 13.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyHEICSFrameInfoArray IMAGEIO_AVAILABLE_STARTING(10.15, 13.0);
/* Possible keys for kCGImagePropertyExifDictionary */
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyExifExposureTime IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyExifFNumber IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyExifExposureProgram IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyExifSpectralSensitivity IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyExifISOSpeedRatings IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyExifOECF IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyExifSensitivityType IMAGEIO_AVAILABLE_STARTING(10.9, 7.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyExifStandardOutputSensitivity IMAGEIO_AVAILABLE_STARTING(10.9, 7.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyExifRecommendedExposureIndex IMAGEIO_AVAILABLE_STARTING(10.9, 7.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyExifISOSpeed IMAGEIO_AVAILABLE_STARTING(10.9, 7.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyExifISOSpeedLatitudeyyy IMAGEIO_AVAILABLE_STARTING(10.9, 7.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyExifISOSpeedLatitudezzz IMAGEIO_AVAILABLE_STARTING(10.9, 7.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyExifVersion IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyExifDateTimeOriginal IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyExifDateTimeDigitized IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyExifOffsetTime IMAGEIO_AVAILABLE_STARTING(10.15, 13.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyExifOffsetTimeOriginal IMAGEIO_AVAILABLE_STARTING(10.15, 13.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyExifOffsetTimeDigitized IMAGEIO_AVAILABLE_STARTING(10.15, 13.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyExifComponentsConfiguration IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyExifCompressedBitsPerPixel IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyExifShutterSpeedValue IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyExifApertureValue IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyExifBrightnessValue IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyExifExposureBiasValue IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyExifMaxApertureValue IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyExifSubjectDistance IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyExifMeteringMode IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyExifLightSource IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyExifFlash IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyExifFocalLength IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyExifSubjectArea IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyExifMakerNote IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyExifUserComment IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyExifSubsecTime IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyExifSubsecTimeOriginal IMAGEIO_AVAILABLE_STARTING(10.11, 10.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyExifSubsecTimeDigitized IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyExifFlashPixVersion IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyExifColorSpace IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyExifPixelXDimension IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyExifPixelYDimension IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyExifRelatedSoundFile IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyExifFlashEnergy IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyExifSpatialFrequencyResponse IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyExifFocalPlaneXResolution IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyExifFocalPlaneYResolution IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyExifFocalPlaneResolutionUnit IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyExifSubjectLocation IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyExifExposureIndex IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyExifSensingMethod IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyExifFileSource IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyExifSceneType IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyExifCFAPattern IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyExifCustomRendered IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyExifExposureMode IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyExifWhiteBalance IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyExifDigitalZoomRatio IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyExifFocalLenIn35mmFilm IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyExifSceneCaptureType IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyExifGainControl IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyExifContrast IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyExifSaturation IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyExifSharpness IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyExifDeviceSettingDescription IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyExifSubjectDistRange IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyExifImageUniqueID IMAGEIO_AVAILABLE_STARTING(10.4, 4.0);
IMAGEIO_EXTERN const CFStringRef kCGImagePropertyExifCameraOwnerName IMAGEIO_AVAILABLE_STARTING(10.7, 5.0);