2 * Copyright (C) 2006 John Ellis
3 * Copyright (C) 2008 - 2016 The Geeqie Team
5 * Authors: Eric Swalens, Quy Tonthat, John Ellis
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License along
18 * with this program; if not, write to the Free Software Foundation, Inc.,
19 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
33 #define EXIF_FORMATTED() "formatted."
34 #define EXIF_FORMATTED_LEN (sizeof(EXIF_FORMATTED()) - 1)
37 *-----------------------------------------------------------------------------
39 *-----------------------------------------------------------------------------
42 #define EXIF_FORMAT_COUNT 13
45 EXIF_FORMAT_UNKNOWN = 0,
46 EXIF_FORMAT_BYTE_UNSIGNED = 1,
47 EXIF_FORMAT_STRING = 2,
48 EXIF_FORMAT_SHORT_UNSIGNED = 3,
49 EXIF_FORMAT_LONG_UNSIGNED = 4,
50 EXIF_FORMAT_RATIONAL_UNSIGNED = 5,
52 EXIF_FORMAT_UNDEFINED = 7,
53 EXIF_FORMAT_SHORT = 8,
55 EXIF_FORMAT_RATIONAL = 10,
56 EXIF_FORMAT_FLOAT = 11,
57 EXIF_FORMAT_DOUBLE = 12
62 *-----------------------------------------------------------------------------
64 *-----------------------------------------------------------------------------
74 /* enums useful for image manipulation */
76 enum ExifOrientationType {
77 EXIF_ORIENTATION_UNKNOWN = 0,
78 EXIF_ORIENTATION_TOP_LEFT = 1,
79 EXIF_ORIENTATION_TOP_RIGHT = 2,
80 EXIF_ORIENTATION_BOTTOM_RIGHT = 3,
81 EXIF_ORIENTATION_BOTTOM_LEFT = 4,
82 EXIF_ORIENTATION_LEFT_TOP = 5,
83 EXIF_ORIENTATION_RIGHT_TOP = 6,
84 EXIF_ORIENTATION_RIGHT_BOTTOM = 7,
85 EXIF_ORIENTATION_LEFT_BOTTOM = 8
89 EXIF_UNIT_UNKNOWN = 0,
92 EXIF_UNIT_CENTIMETER = 3
95 struct ExifFormattedText
98 const gchar *description;
99 gchar *(*build_func)(ExifData *exif);
103 *-----------------------------------------------------------------------------
105 *-----------------------------------------------------------------------------
110 ExifData *exif_read(gchar *path, gchar *sidecar_path, GHashTable *modified_xmp);
112 ExifData *exif_read_fd(FileData *fd);
113 void exif_free_fd(FileData *fd, ExifData *exif);
116 * @headerfile exif_get_original
117 * exif_read returns processed data (merged from image and sidecar, etc.)
118 * this function gives access to the original data from the image.
119 * original data are part of the processed data and should not be freed separately
121 ExifData *exif_get_original(ExifData *exif);
124 gboolean exif_write(ExifData *exif);
125 gboolean exif_write_sidecar(ExifData *exif, gchar *path);
127 void exif_free(ExifData *exif);
129 gchar *exif_get_data_as_text(ExifData *exif, const gchar *key);
130 gint exif_get_integer(ExifData *exif, const gchar *key, gint *value);
131 ExifRational *exif_get_rational(ExifData *exif, const gchar *key, gint *sign);
133 ExifItem *exif_get_item(ExifData *exif, const gchar *key);
134 ExifItem *exif_get_first_item(ExifData *exif);
135 ExifItem *exif_get_next_item(ExifData *exif);
138 gchar *exif_item_get_tag_name(ExifItem *item);
139 guint exif_item_get_tag_id(ExifItem *item);
140 guint exif_item_get_elements(ExifItem *item);
141 gchar *exif_item_get_data(ExifItem *item, guint *data_len);
142 gchar *exif_item_get_description(ExifItem *item);
143 guint exif_item_get_format_id(ExifItem *item);
144 const gchar *exif_item_get_format_name(ExifItem *item, gboolean brief);
145 gchar *exif_item_get_data_as_text(ExifItem *item, ExifData *exif);
146 gint exif_item_get_integer(ExifItem *item, gint *value);
147 ExifRational *exif_item_get_rational(ExifItem *item, gint *sign, guint n);
149 gchar *exif_item_get_string(ExifItem *item, gint idx);
151 gchar *exif_get_description_by_key(const gchar *key);
152 gchar *exif_get_tag_description_by_key(const gchar *key);
154 gchar *exif_get_formatted_by_key(ExifData *exif, const gchar *key, gboolean *key_valid);
156 gint exif_update_metadata(ExifData *exif, const gchar *key, const GList *values);
157 GList *exif_get_metadata(ExifData *exif, const gchar *key, MetadataFormat format);
159 guchar *exif_get_color_profile(ExifData *exif, guint *data_len);
161 /* jpeg embedded icc support */
163 void exif_add_jpeg_color_profile(ExifData *exif, guchar *cp_data, guint cp_length);
166 gboolean exif_jpeg_parse_color(ExifData *exif, guchar *data, guint size);
168 /* support for so called "jpeg comment" */
169 gchar* exif_get_image_comment(FileData* fd);
170 void exif_set_image_comment(FileData* fd, const gchar* comment);
173 guchar *exif_get_preview(ExifData *exif, guint *data_len, gint requested_width, gint requested_height);
174 void exif_free_preview(const guchar *buf);
176 gchar *metadata_file_info(FileData *fd, const gchar *key, MetadataFormat format);
177 gchar *metadata_lua_info(FileData *fd, const gchar *key, MetadataFormat format);
180 /* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */