From 25f7719b2816ced98e53ea1a38141d5eebd4fc04 Mon Sep 17 00:00:00 2001 From: Bastian Dehn Date: Sun, 26 Jan 2025 21:03:07 +0100 Subject: [PATCH] add read tiff metadata --- src/kds_s2000w_image_converter_netpbm.c | 51 +++++++++++++++++++++++-- 1 file changed, 48 insertions(+), 3 deletions(-) diff --git a/src/kds_s2000w_image_converter_netpbm.c b/src/kds_s2000w_image_converter_netpbm.c index e804b71..0d67d4f 100644 --- a/src/kds_s2000w_image_converter_netpbm.c +++ b/src/kds_s2000w_image_converter_netpbm.c @@ -2,6 +2,7 @@ #include #include #include +#include #include "kds_s2000w_image_converter.h" #include "kds_s2000w_image_type_check.h" #include "kds_s2000w_debug.h" @@ -12,6 +13,31 @@ #define RGB 3 #define GRAY 1 +tsize_t _kds_s2000w_image_converter_tiff_read(thandle_t handler, tdata_t data, tsize_t size) +{ + return fread(data, sizeof(char), size, handler); +} +tsize_t _kds_s2000w_image_converter_tiff_write(thandle_t handler, tdata_t data, tsize_t size) +{ + return fwrite(data, sizeof(char), size, handler); +} + +toff_t _kds_s2000w_image_converter_tiff_seek(thandle_t handler, toff_t offset, int whence) +{ + fseek(handler, offset, whence); + return ftell(handler); +} + +int _kds_s2000w_image_converter_tiff_close(thandle_t handler) +{ + return fclose(handler); +} + +toff_t _kds_s2000w_image_converter_tiff_size(thandle_t handler) +{ + return ftell(handler); +} + int _kds_s2000w_image_converter_find_char(blobdata* image, int start, const char cfind) { kds_s2000w_debug_printf(ALL, "kds_s2000w_image_converter_find_char"); @@ -43,6 +69,24 @@ int _kds_s2000w_image_converter_get_number_from_substring(char* data, int start, return number; } +void _kds_s2000w_image_converter_tiff_metadata(blobdata* image, image_metadata* mdata) +{ + FILE* input = fmemopen(image->data, image->size, "r"); + TIFF* tiff = TIFFClientOpen("input.tiff", "r", input, + _kds_s2000w_image_converter_tiff_read, + _kds_s2000w_image_converter_tiff_write, + _kds_s2000w_image_converter_tiff_seek, + _kds_s2000w_image_converter_tiff_close, + _kds_s2000w_image_converter_tiff_size, + NULL, NULL); + + TIFFGetField(tiff, TIFFTAG_IMAGEDEPTH, &mdata->depth); + TIFFGetField(tiff, TIFFTAG_IMAGEWIDTH, &mdata->width); + TIFFGetField(tiff, TIFFTAG_IMAGELENGTH, &mdata->height); + + TIFFClose(tiff); +} + void _kds_s2000w_image_converter_pnm_metadata(blobdata* image, image_metadata* mdata) { kds_s2000w_debug_printf(ALL, "kds_s2000w_image_converter_pnm_metadata"); @@ -191,7 +235,10 @@ void kds_s2000w_image_converter_metadata_from_scanner_image(blobdata* image, ima return; } - return; + if (kds_s2000w_image_type_check_is_tiff(image)) { + _kds_s2000w_image_converter_tiff_metadata(image, mdata); + return; + } } void kds_s2000w_image_converter_jpg_to_pnm(blobdata* in, blobdata* out, int depth) @@ -239,6 +286,4 @@ void kds_s2000w_image_converter_tiff_to_pnm(blobdata* in, blobdata* out) if (!kds_s2000w_image_type_check_is_tiff(in)) return; - - return; } -- 2.39.5