]> gitweb.hhaalo.de Git - sane-kds-s2000w-net.git/commitdiff
change image magick with file type
authorBastian Dehn <hhaalo@arcor.de>
Sun, 26 Jan 2025 11:44:15 +0000 (12:44 +0100)
committerBastian Dehn <hhaalo@arcor.de>
Sun, 26 Jan 2025 11:44:15 +0000 (12:44 +0100)
src/kds_s2000w_handler.c
src/kds_s2000w_image_converter_magick.c
tests/kds_s2000w_client_mock.c

index ce812a056c5e7968184481f67bb2108d98809552..6ce4c50bbb707d8311ee796006c9e26d84bc07c6 100644 (file)
@@ -285,12 +285,8 @@ void kds_s2000w_handler_get_current_metadata(handler* h, metadata* params)
        params->pixels_per_line = mdata->width;
        params->lines = mdata->height;
 
-       if (params->depth > 8) {
-               params->depth = 8;
-               kds_s2000w_image_converter_jpg_to_pnm(scanner_image, image, params->depth);
-       } else {
-               kds_s2000w_image_converter_tiff_to_pnm(scanner_image, image);
-       }
+       kds_s2000w_image_converter_jpg_to_pnm(scanner_image, image, params->depth);
+       kds_s2000w_image_converter_tiff_to_pnm(scanner_image, image);
 
        kds_s2000w_debug_printf_int(DEBUG, "size of pnm image", image->size);
 
index 7788ea942a14e24688656e07c0fcd9a1092381dd..287203ebb72c88de24b695eb060249981eb8da5c 100644 (file)
 #if IMAGE_MAGICK_MAJOR == 7
 #include <MagickCore/MagickCore.h>
 #endif
+#include <string.h>
 #include "kds_s2000w_image_converter.h"
 #include "kds_s2000w_debug.h"
 
+int _kds_s2000w_image_converter_is_pnm(blobdata* image)
+{
+       if (image->size < 2)
+               return 0;
+
+       char* image_data = (char*) image->data;
+       if (strncmp(image_data, "P6", 2) == 0)
+               return 1;
+
+       return strncmp(image_data, "P4", 2) == 0;
+}
+
+int _kds_s2000w_image_converter_is_jpeg(blobdata* image)
+{
+       if (image->size < 2)
+               return 0;
+
+       const char first_byte = 0xff;
+       const char second_byte = 0xd8;
+
+       char* image_data = (char*) image->data;
+       return image_data[0] == first_byte && image_data[1] == second_byte;
+}
+
 void _kds_s2000w_image_converter_to_pnm_depth(blobdata* in,
        blobdata* out,
        int depth,
@@ -97,6 +122,9 @@ void kds_s2000w_image_converter_jpg_to_pnm(blobdata* in, blobdata* out, int dept
 {
        kds_s2000w_debug_printf(ALL, "kds_s2000w_convert_jpg_to_pnm_With_depth");
 
+       if (!_kds_s2000w_image_converter_is_jpeg(in))
+               return;
+
        _kds_s2000w_image_converter_to_pnm_depth(in, out, depth, "jpg");
 }
 
@@ -104,5 +132,8 @@ void kds_s2000w_image_converter_tiff_to_pnm(blobdata* in, blobdata* out)
 {
        kds_s2000w_debug_printf(ALL, "kds_s2000w_convert_tiff_to_pnm");
 
+       if (_kds_s2000w_image_converter_is_jpeg(in))
+               return;
+
        _kds_s2000w_image_converter_to_pnm_depth(in, out, -1, "tiff");
 }
\ No newline at end of file
index 63d78de92c3e84e783ab114d23720d51d2fb73be..f567bebc3fb24e66cf34e22d5b16ea222a763deb 100644 (file)
@@ -91,22 +91,26 @@ int __wrap_kds_s2000w_client_set_option(int64_t sessionid, response* response)
 
 void __wrap_kds_s2000w_image_converter_jpg_to_pnm(blobdata* in, blobdata* out)
 {
-       if (in->data != NULL) {
-               out->data = malloc(sizeof(char) * in->size);
-               memcpy(out->data, in->data, in->size);
-               out->size = in->size;
-       }
+       if (in->data == NULL)
+               return;
 
-       return;
+       out->data = malloc(sizeof(char) * in->size);
+       memcpy(out->data, in->data, in->size);
+       out->size = in->size;
+       free(in->data);
+       in->data = NULL;
+       in->size = 0;
 }
 
 void __wrap_kds_s2000w_image_converter_tiff_to_pnm(blobdata* in, blobdata* out)
 {
-       if (in->data != NULL) {
-               out->data = malloc(sizeof(char) * in->size);
-               memcpy(out->data, in->data, in->size);
-               out->size = in->size;
-       }
+       if (in->data == NULL)
+               return;
 
-       return;
+       out->data = malloc(sizeof(char) * in->size);
+       memcpy(out->data, in->data, in->size);
+       out->size = in->size;
+       free(in->data);
+       in->data = NULL;
+       in->size = 0;
 }
\ No newline at end of file