]> gitweb.hhaalo.de Git - sane-kds-s2000w-net.git/commitdiff
add read tiff metadata
authorBastian Dehn <hhaalo@arcor.de>
Sun, 26 Jan 2025 20:03:07 +0000 (21:03 +0100)
committerBastian Dehn <hhaalo@arcor.de>
Sun, 26 Jan 2025 20:03:07 +0000 (21:03 +0100)
src/kds_s2000w_image_converter_netpbm.c

index e804b711d78b21537e05974e117ced591e2d51a6..0d67d4f4677cb9b2c43c4e9b8bf928fe208cbe9c 100644 (file)
@@ -2,6 +2,7 @@
 #include <string.h>
 #include <netpbm/pnm.h>
 #include <jpeglib.h>
+#include <tiffio.h>
 #include "kds_s2000w_image_converter.h"
 #include "kds_s2000w_image_type_check.h"
 #include "kds_s2000w_debug.h"
 #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;
 }