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.
25 #define EXIF_FORMATTED() "formatted."
26 #define EXIF_FORMATTED_LEN (sizeof(EXIF_FORMATTED()) - 1)
29 *-----------------------------------------------------------------------------
31 *-----------------------------------------------------------------------------
34 #define EXIF_FORMAT_COUNT 13
37 EXIF_FORMAT_UNKNOWN = 0,
38 EXIF_FORMAT_BYTE_UNSIGNED = 1,
39 EXIF_FORMAT_STRING = 2,
40 EXIF_FORMAT_SHORT_UNSIGNED = 3,
41 EXIF_FORMAT_LONG_UNSIGNED = 4,
42 EXIF_FORMAT_RATIONAL_UNSIGNED = 5,
44 EXIF_FORMAT_UNDEFINED = 7,
45 EXIF_FORMAT_SHORT = 8,
47 EXIF_FORMAT_RATIONAL = 10,
48 EXIF_FORMAT_FLOAT = 11,
49 EXIF_FORMAT_DOUBLE = 12
54 *-----------------------------------------------------------------------------
56 *-----------------------------------------------------------------------------
59 typedef struct _ExifItem ExifItem;
61 typedef struct _ExifRational ExifRational;
69 /* enums useful for image manipulation */
72 EXIF_ORIENTATION_UNKNOWN = 0,
73 EXIF_ORIENTATION_TOP_LEFT = 1,
74 EXIF_ORIENTATION_TOP_RIGHT = 2,
75 EXIF_ORIENTATION_BOTTOM_RIGHT = 3,
76 EXIF_ORIENTATION_BOTTOM_LEFT = 4,
77 EXIF_ORIENTATION_LEFT_TOP = 5,
78 EXIF_ORIENTATION_RIGHT_TOP = 6,
79 EXIF_ORIENTATION_RIGHT_BOTTOM = 7,
80 EXIF_ORIENTATION_LEFT_BOTTOM = 8
81 } ExifOrientationType;
84 EXIF_UNIT_UNKNOWN = 0,
87 EXIF_UNIT_CENTIMETER = 3
90 typedef struct _ExifFormattedText ExifFormattedText;
91 struct _ExifFormattedText
94 const gchar *description;
95 gchar *(*build_func)(ExifData *exif);
99 *-----------------------------------------------------------------------------
101 *-----------------------------------------------------------------------------
104 void exif_init(void);
106 ExifData *exif_read(gchar *path, gchar *sidecar_path, GHashTable *modified_xmp);
108 ExifData *exif_read_fd(FileData *fd);
109 void exif_free_fd(FileData *fd, ExifData *exif);
111 /* exif_read returns processed data (merged from image and sidecar, etc.)
112 this function gives access to the original data from the image.
113 original data are part of the processed data and should not be freed separately */
114 ExifData *exif_get_original(ExifData *processed);
117 gboolean exif_write(ExifData *exif);
118 gboolean exif_write_sidecar(ExifData *exif, gchar *path);
120 void exif_free(ExifData *exif);
122 gchar *exif_get_data_as_text(ExifData *exif, const gchar *key);
123 gint exif_get_integer(ExifData *exif, const gchar *key, gint *value);
124 ExifRational *exif_get_rational(ExifData *exif, const gchar *key, gint *sign);
126 ExifItem *exif_get_item(ExifData *exif, const gchar *key);
127 ExifItem *exif_get_first_item(ExifData *exif);
128 ExifItem *exif_get_next_item(ExifData *exif);
131 gchar *exif_item_get_tag_name(ExifItem *item);
132 guint exif_item_get_tag_id(ExifItem *item);
133 guint exif_item_get_elements(ExifItem *item);
134 gchar *exif_item_get_data(ExifItem *item, guint *data_len);
135 gchar *exif_item_get_description(ExifItem *item);
136 guint exif_item_get_format_id(ExifItem *item);
137 const gchar *exif_item_get_format_name(ExifItem *item, gboolean brief);
138 gchar *exif_item_get_data_as_text(ExifItem *item);
139 gint exif_item_get_integer(ExifItem *item, gint *value);
140 ExifRational *exif_item_get_rational(ExifItem *item, gint *sign, guint n);
142 gchar *exif_item_get_string(ExifItem *item, gint idx);
144 gchar *exif_get_description_by_key(const gchar *key);
145 gchar *exif_get_tag_description_by_key(const gchar *key);
147 gchar *exif_get_formatted_by_key(ExifData *exif, const gchar *key, gboolean *key_valid);
149 gint exif_update_metadata(ExifData *exif, const gchar *key, const GList *values);
150 GList *exif_get_metadata(ExifData *exif, const gchar *key, MetadataFormat format);
152 guchar *exif_get_color_profile(ExifData *exif, guint *data_len);
154 /* jpeg embedded icc support */
156 void exif_add_jpeg_color_profile(ExifData *exif, guchar *cp_data, guint cp_length);
159 gboolean exif_jpeg_parse_color(ExifData *exif, guchar *data, guint size);
161 /* support for so called "jpeg comment" */
162 gchar* exif_get_image_comment(FileData* fd);
163 void exif_set_image_comment(FileData* fd, const gchar* comment);
166 guchar *exif_get_preview(ExifData *exif, guint *data_len, gint requested_width, gint requested_height);
167 void exif_free_preview(guchar *buf);
169 gchar *metadata_file_info(FileData *fd, const gchar *key, MetadataFormat format);
172 /* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */