static void save_exif(struct jpeg_decompress_struct const cinfo, const char * const exif_filespec) { /*---------------------------------------------------------------------------- Write the contents of the first Exif header in the image into the file with filespec 'exif_filespec'. Start with the two byte length field. If 'exif_filespec' is "-", write to standard output. If there is no Exif header in the image, write just zero, as a two byte pure binary integer. -----------------------------------------------------------------------------*/ FILE * exif_file; struct jpeg_marker_struct * markerP; exif_file = pm_openw(exif_filespec); for (markerP = cinfo.marker_list; markerP && !is_exif(*markerP); markerP = markerP->next); if (markerP) { pm_writebigshort(exif_file, markerP->data_length+2); if (ferror(exif_file)) pm_error("Write of Exif header to %s failed on first byte.", exif_filespec); else { int rc; rc = fwrite(markerP->data, 1, markerP->data_length, exif_file); if (rc != markerP->data_length) pm_error("Write of Exif header to '%s' failed. Wrote " "length successfully, but then failed after " "%d characters of data.", exif_filespec, rc); } } else { /* There is no Exif header in the image */ pm_writebigshort(exif_file, 0); if (ferror(exif_file)) pm_error("Write of Exif header file '%s' failed.", exif_filespec); } pm_close(exif_file); }
static void dump_exif(struct jpeg_decompress_struct const cinfo) { /*---------------------------------------------------------------------------- Dump as informational messages the contents of all EXIF headers in the image, interpreted. An EXIF header is an APP1 marker. -----------------------------------------------------------------------------*/ struct jpeg_marker_struct * markerP; boolean found_one; found_one = FALSE; /* initial value */ for (markerP = cinfo.marker_list; markerP; markerP = markerP->next) if (is_exif(*markerP)) { pm_message("EXIF INFO:"); print_exif_info(*markerP); found_one = TRUE; } if (!found_one) pm_message("No EXIF info in image."); }
bool CxImageJPG::CxExifInfo::DecodeInfo(struct jpeg_decompress_struct cinfo) { struct jpeg_marker_struct * markerP; bool found_one=false; for (markerP = cinfo.marker_list; markerP; markerP = markerP->next) { if (is_exif(*markerP)) { if (!exif_process(markerP->data, markerP->data_length, m_exifinfo)) return false; found_one = true; } } if (!found_one){ strcpy(m_szLastError,"No EXIF info in image."); return false; } return true; }