From: Bastian Dehn Date: Sun, 26 Jan 2025 11:44:15 +0000 (+0100) Subject: change image magick with file type X-Git-Tag: v1.0.29^2~3^2~23 X-Git-Url: https://gitweb.hhaalo.de/?a=commitdiff_plain;h=5013004e3a57b8a02ef29ad36ae6b1e01499f1d6;p=sane-kds-s2000w-net.git change image magick with file type --- diff --git a/src/kds_s2000w_handler.c b/src/kds_s2000w_handler.c index ce812a0..6ce4c50 100644 --- a/src/kds_s2000w_handler.c +++ b/src/kds_s2000w_handler.c @@ -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); diff --git a/src/kds_s2000w_image_converter_magick.c b/src/kds_s2000w_image_converter_magick.c index 7788ea9..287203e 100644 --- a/src/kds_s2000w_image_converter_magick.c +++ b/src/kds_s2000w_image_converter_magick.c @@ -11,9 +11,34 @@ #if IMAGE_MAGICK_MAJOR == 7 #include #endif +#include #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 diff --git a/tests/kds_s2000w_client_mock.c b/tests/kds_s2000w_client_mock.c index 63d78de..f567beb 100644 --- a/tests/kds_s2000w_client_mock.c +++ b/tests/kds_s2000w_client_mock.c @@ -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