4 * Copyright (C) 2008 The Geeqie Team
7 * Support for Exif file format, originally written by Eric Swalens.
8 * Modified by Quy Tonthat
9 * Reimplemented with generic data storage by John Ellis
12 This program is free software; you can redistribute it and/or modify
13 it under the terms of the GNU General Public License as published by
14 the Free Software Foundation; either version 2 of the License, or
15 (at your option) any later version.
17 This program is distributed in the hope that it will be useful,
18 but WITHOUT ANY WARRANTY; without even the implied warranty of
19 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 GNU General Public License for more details.
22 You should have received a copy of the GNU General Public License
23 along with this program; if not, write to the Free Software
24 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
32 *-----------------------------------------------------------------------------
34 *-----------------------------------------------------------------------------
37 #define EXIF_FORMAT_COUNT 13
40 EXIF_FORMAT_UNKNOWN = 0,
41 EXIF_FORMAT_BYTE_UNSIGNED = 1,
42 EXIF_FORMAT_STRING = 2,
43 EXIF_FORMAT_SHORT_UNSIGNED = 3,
44 EXIF_FORMAT_LONG_UNSIGNED = 4,
45 EXIF_FORMAT_RATIONAL_UNSIGNED = 5,
47 EXIF_FORMAT_UNDEFINED = 7,
48 EXIF_FORMAT_SHORT = 8,
50 EXIF_FORMAT_RATIONAL = 10,
51 EXIF_FORMAT_FLOAT = 11,
52 EXIF_FORMAT_DOUBLE = 12
57 *-----------------------------------------------------------------------------
59 *-----------------------------------------------------------------------------
62 typedef struct _ExifItem ExifItem;
64 typedef struct _ExifRational ExifRational;
72 /* enums useful for image manipulation */
75 EXIF_ORIENTATION_UNKNOWN = 0,
76 EXIF_ORIENTATION_TOP_LEFT = 1,
77 EXIF_ORIENTATION_TOP_RIGHT = 2,
78 EXIF_ORIENTATION_BOTTOM_RIGHT = 3,
79 EXIF_ORIENTATION_BOTTOM_LEFT = 4,
80 EXIF_ORIENTATION_LEFT_TOP = 5,
81 EXIF_ORIENTATION_RIGHT_TOP = 6,
82 EXIF_ORIENTATION_RIGHT_BOTTOM = 7,
83 EXIF_ORIENTATION_LEFT_BOTTOM = 8
84 } ExifOrientationType;
87 EXIF_UNIT_UNKNOWN = 0,
90 EXIF_UNIT_CENTIMETER = 3
94 typedef struct _ExifFormattedText ExifFormattedText;
95 struct _ExifFormattedText
98 const gchar *description;
99 gchar *(*build_func)(ExifData *exif);
103 *-----------------------------------------------------------------------------
105 *-----------------------------------------------------------------------------
108 ExifData *exif_read(gchar *path, gchar *sidecar_path);
110 ExifData *exif_read_fd(FileData *fd);
111 void exif_free_fd(FileData *fd, ExifData *exif);
114 gint exif_write(ExifData *exif);
115 void exif_free(ExifData *exif);
117 gchar *exif_get_data_as_text(ExifData *exif, const gchar *key);
118 gint exif_get_integer(ExifData *exif, const gchar *key, gint *value);
119 ExifRational *exif_get_rational(ExifData *exif, const gchar *key, gint *sign);
121 ExifItem *exif_get_item(ExifData *exif, const gchar *key);
122 ExifItem *exif_add_item(ExifData *exif, const gchar *key);
123 ExifItem *exif_get_first_item(ExifData *exif);
124 ExifItem *exif_get_next_item(ExifData *exif);
127 gchar *exif_item_get_tag_name(ExifItem *item);
128 guint exif_item_get_tag_id(ExifItem *item);
129 guint exif_item_get_elements(ExifItem *item);
130 gchar *exif_item_get_data(ExifItem *item, guint *data_len);
131 gchar *exif_item_get_description(ExifItem *item);
132 guint exif_item_get_format_id(ExifItem *item);
133 const gchar *exif_item_get_format_name(ExifItem *item, gint brief);
134 gchar *exif_item_get_data_as_text(ExifItem *item);
135 gint exif_item_get_integer(ExifItem *item, gint *value);
136 ExifRational *exif_item_get_rational(ExifItem *item, gint *sign, gint n);
138 gchar *exif_item_get_string(ExifItem *item, gint idx);
140 gchar *exif_get_description_by_key(const gchar *key);
141 gchar *exif_get_tag_description_by_key(const gchar *key);
143 gchar *exif_get_formatted_by_key(ExifData *exif, const gchar *key, gint *key_valid);
145 gint exif_item_delete(ExifData *exif, ExifItem *item);
146 gint exif_item_set_string(ExifItem *item, const gchar *str);
148 guchar *exif_get_color_profile(ExifData *exif, guint *data_len);
150 /* jpeg embedded icc support */
152 void exif_add_jpeg_color_profile(ExifData *exif, guchar *cp_data, guint cp_length);
155 gint exif_jpeg_segment_find(guchar *data, guint size,
156 guchar app_marker, const gchar *magic, guint magic_len,
157 guint *seg_offset, guint *seg_length);
158 gint exif_jpeg_parse_color(ExifData *exif, guchar *data, guint size);
161 guchar *exif_get_preview(ExifData *exif, guint *data_len);
162 void exif_free_preview(guchar *buf);