mirror of
https://github.com/zint/zint
synced 2024-11-16 20:57:25 +13:00
test_tif: fix, use tiffinfo if available (big speedup)
This commit is contained in:
parent
2d962c6321
commit
6dc8a242df
@ -42,11 +42,13 @@ static void test_print(int index, int generate, int debug) {
|
||||
int have_libreoffice = 0;
|
||||
int have_ghostscript = 0;
|
||||
int have_vnu = 0;
|
||||
int have_tiffinfo = 0;
|
||||
if (generate) {
|
||||
have_identify = testUtilHaveIdentify();
|
||||
have_libreoffice = testUtilHaveLibreOffice();
|
||||
have_ghostscript = testUtilHaveGhostscript();
|
||||
have_vnu = testUtilHaveVnu();
|
||||
have_tiffinfo = testUtilHaveTiffInfo();
|
||||
}
|
||||
|
||||
int ret;
|
||||
@ -153,6 +155,9 @@ static void test_print(int index, int generate, int debug) {
|
||||
ret = testUtilVerifyVnu(expected_file, debug); // Very slow
|
||||
assert_zero(ret, "i:%d %s vnu %s ret %d != 0\n", i, testUtilBarcodeName(data[i].symbology), expected_file, ret);
|
||||
}
|
||||
} else if (strcmp(exts[j], "tif") == 0 && have_tiffinfo) { // Much faster (and better) than identify
|
||||
ret = testUtilVerifyTiffInfo(expected_file, debug);
|
||||
assert_zero(ret, "i:%d %s tiffinfo %s ret %d != 0\n", i, testUtilBarcodeName(data[i].symbology), expected_file, ret);
|
||||
} else if (strcmp(exts[j], "txt") != 0) { // I.e. rasters
|
||||
if (have_identify) {
|
||||
ret = testUtilVerifyIdentify(expected_file, debug);
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
libzint - the open source barcode library
|
||||
Copyright (C) 2020 Robin Stuart <rstuart114@gmail.com>
|
||||
Copyright (C) 2020 - 2021 Robin Stuart <rstuart114@gmail.com>
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions
|
||||
@ -39,10 +39,8 @@ static void test_pixel_plot(int index, int debug) {
|
||||
|
||||
testStart("");
|
||||
|
||||
if (!testUtilHaveIdentify()) {
|
||||
testSkip("ImageMagick identify not available");
|
||||
return;
|
||||
}
|
||||
int have_tiffinfo = testUtilHaveTiffInfo();
|
||||
int have_identify = testUtilHaveIdentify();
|
||||
|
||||
int ret;
|
||||
struct item {
|
||||
@ -50,37 +48,38 @@ static void test_pixel_plot(int index, int debug) {
|
||||
int height;
|
||||
char *pattern;
|
||||
int repeat;
|
||||
int no_identify; // identify fails for some valid TIFFs (eg. RGB with LZW and large rows)
|
||||
};
|
||||
// s/\/\*[ 0-9]*\*\//\=printf("\/*%3d*\/", line(".") - line("'<"))
|
||||
struct item data[] = {
|
||||
/* 0*/ { 1, 1, "1", 0 },
|
||||
/* 1*/ { 2, 1, "11", 0 },
|
||||
/* 2*/ { 1, 2, "11", 0 },
|
||||
/* 3*/ { 2, 2, "10", 1 },
|
||||
/* 4*/ { 3, 1, "101", 0 },
|
||||
/* 5*/ { 1, 3, "101", 0 },
|
||||
/* 6*/ { 4, 1, "1010", 0 },
|
||||
/* 7*/ { 1, 4, "1010", 0 },
|
||||
/* 8*/ { 5, 1, "10101", 0 },
|
||||
/* 9*/ { 1, 5, "10101", 0 },
|
||||
/* 10*/ { 3, 2, "101", 1 },
|
||||
/* 11*/ { 100, 2, "10", 1 },
|
||||
/* 12*/ { 2, 100, "10", 1 },
|
||||
/* 13*/ { 3, 3, "101010101", 0 },
|
||||
/* 14*/ { 4, 3, "10", 1 },
|
||||
/* 15*/ { 3, 4, "10", 1 },
|
||||
/* 16*/ { 45, 44, "10", 1 }, // Strip Count 1, Rows Per Strip 44 (45 * 44 * 4 == 7920)
|
||||
/* 17*/ { 45, 45, "10", 1 }, // Strip Count 1, Rows Per Strip 45 (45 * 45 * 4 == 8100)
|
||||
/* 18*/ { 46, 45, "10", 1 }, // Strip Count 2, Rows Per Strip 44 (46 * 45 * 4 == 8280)
|
||||
/* 19*/ { 46, 46, "10", 1 }, // Strip Count 2, Rows Per Strip 44
|
||||
/* 20*/ { 2048, 1, "10", 1 }, // Strip Count 1, Rows Per Strip 1 (2048 * 4 == 8192)
|
||||
/* 21*/ { 1, 2048, "10", 1 }, // Strip Count 1, Rows Per Strip 2048
|
||||
/* 22*/ { 2048, 2, "10", 1 }, // Strip Count 2, Rows Per Strip 1
|
||||
/* 23*/ { 2, 2048, "10", 1 }, // Strip Count 2, Rows Per Strip 1024 (2 * 1024 * 4 == 8192)
|
||||
/* 24*/ { 2048, 3, "10", 1 }, // Strip Count 3, Rows Per Strip 1
|
||||
/* 25*/ { 3, 2048, "10", 1 }, // Strip Count 4, Rows Per Strip 682 ((3 * 682 + 2) * 4 == 8192)
|
||||
/* 26*/ { 2049, 4, "10", 1 }, // Strip Count 4, Rows Per Strip 1 (2049 * 1 * 4 == 8196) - large rows in 1 strip, even if > 8192
|
||||
/* 27*/ { 4, 2049, "10", 1 }, // Strip Count 5, Rows Per Strip 512 ((4 * 512 + 1) * 4 == 8196)
|
||||
/* 0*/ { 1, 1, "1", 0, 0 },
|
||||
/* 1*/ { 2, 1, "11", 0, 0 },
|
||||
/* 2*/ { 1, 2, "11", 0, 0 },
|
||||
/* 3*/ { 2, 2, "10", 1, 0 },
|
||||
/* 4*/ { 3, 1, "101", 0, 0 },
|
||||
/* 5*/ { 1, 3, "101", 0, 0 },
|
||||
/* 6*/ { 4, 1, "1010", 0, 0 },
|
||||
/* 7*/ { 1, 4, "1010", 0, 0 },
|
||||
/* 8*/ { 5, 1, "10101", 0, 0 },
|
||||
/* 9*/ { 1, 5, "10101", 0, 0 },
|
||||
/* 10*/ { 3, 2, "101", 1, 0 },
|
||||
/* 11*/ { 100, 2, "10", 1, 0 },
|
||||
/* 12*/ { 2, 100, "10", 1, 0 },
|
||||
/* 13*/ { 3, 3, "101010101", 0, 0 },
|
||||
/* 14*/ { 4, 3, "10", 1, 0 },
|
||||
/* 15*/ { 3, 4, "10", 1, 0 },
|
||||
/* 16*/ { 45, 44, "10", 1, 0 }, // Strip Count 1, Rows Per Strip 44 (45 * 44 * 4 == 7920)
|
||||
/* 17*/ { 45, 45, "10", 1, 0 }, // Strip Count 1, Rows Per Strip 45 (45 * 45 * 4 == 8100)
|
||||
/* 18*/ { 46, 45, "10", 1, 0 }, // Strip Count 2, Rows Per Strip 44 (46 * 45 * 4 == 8280)
|
||||
/* 19*/ { 46, 46, "10", 1, 0 }, // Strip Count 2, Rows Per Strip 44
|
||||
/* 20*/ { 2048, 1, "10", 1, 1 }, // Strip Count 1, Rows Per Strip 1 (2048 * 4 == 8192)
|
||||
/* 21*/ { 1, 2048, "10", 1, 0 }, // Strip Count 1, Rows Per Strip 2048
|
||||
/* 22*/ { 2048, 2, "10", 1, 1 }, // Strip Count 2, Rows Per Strip 1
|
||||
/* 23*/ { 2, 2048, "10", 1, 0 }, // Strip Count 2, Rows Per Strip 1024 (2 * 1024 * 4 == 8192)
|
||||
/* 24*/ { 2048, 3, "10", 1, 1 }, // Strip Count 3, Rows Per Strip 1
|
||||
/* 25*/ { 3, 2048, "10", 1, 0 }, // Strip Count 4, Rows Per Strip 682 ((3 * 682 + 2) * 4 == 8192)
|
||||
/* 26*/ { 2049, 4, "10", 1, 1 }, // Strip Count 4, Rows Per Strip 1 (2049 * 1 * 4 == 8196) - large rows in 1 strip, even if > 8192
|
||||
/* 27*/ { 4, 2049, "10", 1, 0 }, // Strip Count 5, Rows Per Strip 512 ((4 * 512 + 1) * 4 == 8196)
|
||||
};
|
||||
int data_size = ARRAY_SIZE(data);
|
||||
|
||||
@ -88,18 +87,19 @@ static void test_pixel_plot(int index, int debug) {
|
||||
|
||||
char data_buf[65536];
|
||||
|
||||
struct zint_symbol *symbol = ZBarcode_Create();
|
||||
assert_nonnull(symbol, "Symbol not created\n");
|
||||
|
||||
for (int i = 0; i < data_size; i++) {
|
||||
|
||||
if (index != -1 && i != index) continue;
|
||||
|
||||
struct zint_symbol *symbol = ZBarcode_Create();
|
||||
assert_nonnull(symbol, "Symbol not created\n");
|
||||
|
||||
strcpy(symbol->outfile, tif);
|
||||
|
||||
symbol->bitmap_width = data[i].width;
|
||||
symbol->bitmap_height = data[i].height;
|
||||
strcpy(symbol->bgcolour, "FFFFFFEE"); // Use alpha background to force RGB
|
||||
symbol->symbology = BARCODE_ULTRA; // Use ULTRA with alpha background to force RGB
|
||||
strcpy(symbol->bgcolour, "FFFFFFEE");
|
||||
symbol->debug |= debug;
|
||||
|
||||
int size = data[i].width * data[i].height;
|
||||
@ -117,18 +117,23 @@ static void test_pixel_plot(int index, int debug) {
|
||||
ret = tif_pixel_plot(symbol, (unsigned char *) data_buf);
|
||||
assert_zero(ret, "i:%d tif_pixel_plot ret %d != 0 (%s)\n", i, ret, symbol->errtxt);
|
||||
|
||||
ret = testUtilVerifyIdentify(symbol->outfile, debug);
|
||||
assert_zero(ret, "i:%d identify %s ret %d != 0\n", i, symbol->outfile, ret);
|
||||
if (have_tiffinfo) {
|
||||
ret = testUtilVerifyTiffInfo(symbol->outfile, debug);
|
||||
assert_zero(ret, "i:%d tiffinfo %s ret %d != 0\n", i, symbol->outfile, ret);
|
||||
} else if (have_identify && !data[i].no_identify) {
|
||||
ret = testUtilVerifyIdentify(symbol->outfile, debug);
|
||||
assert_zero(ret, "i:%d identify %s ret %d != 0\n", i, symbol->outfile, ret);
|
||||
}
|
||||
|
||||
if (!(debug & ZINT_DEBUG_TEST_KEEP_OUTFILE)) {
|
||||
assert_zero(remove(symbol->outfile), "i:%d remove(%s) != 0\n", i, symbol->outfile);
|
||||
}
|
||||
|
||||
symbol->bitmap = NULL;
|
||||
|
||||
ZBarcode_Delete(symbol);
|
||||
}
|
||||
|
||||
ZBarcode_Delete(symbol);
|
||||
|
||||
testFinish();
|
||||
}
|
||||
|
||||
@ -136,6 +141,7 @@ static void test_print(int index, int generate, int debug) {
|
||||
|
||||
testStart("");
|
||||
|
||||
int have_tiffinfo = testUtilHaveTiffInfo();
|
||||
int have_identify = testUtilHaveIdentify();
|
||||
|
||||
int ret;
|
||||
@ -240,7 +246,10 @@ static void test_print(int index, int generate, int debug) {
|
||||
testUtilEscape(data[i].data, length, escaped, escaped_size), data[i].composite, data[i].expected_file, data[i].comment);
|
||||
ret = rename(symbol->outfile, data[i].expected_file);
|
||||
assert_zero(ret, "i:%d rename(%s, %s) ret %d != 0\n", i, symbol->outfile, data[i].expected_file, ret);
|
||||
if (have_identify) {
|
||||
if (have_tiffinfo) {
|
||||
ret = testUtilVerifyTiffInfo(data[i].expected_file, debug);
|
||||
assert_zero(ret, "i:%d %s tiffinfo %s ret %d != 0\n", i, testUtilBarcodeName(data[i].symbology), data[i].expected_file, ret);
|
||||
} else if (have_identify) {
|
||||
ret = testUtilVerifyIdentify(data[i].expected_file, debug);
|
||||
assert_zero(ret, "i:%d %s identify %s ret %d != 0\n", i, testUtilBarcodeName(data[i].symbology), data[i].expected_file, ret);
|
||||
}
|
||||
|
@ -1681,7 +1681,7 @@ int testUtilVerifyGhostscript(char *filename, int debug) {
|
||||
/* v.Nu https://github.com/validator/validator
|
||||
* Needs "$INSTALL_DIR/vnu-runtime-image/bin" in PATH */
|
||||
int testUtilHaveVnu() {
|
||||
return system("vnu --version > /dev/null") == 0;
|
||||
return system("vnu --version > /dev/null 2>&1") == 0;
|
||||
}
|
||||
|
||||
int testUtilVerifyVnu(char *filename, int debug) {
|
||||
@ -1700,6 +1700,26 @@ int testUtilVerifyVnu(char *filename, int debug) {
|
||||
return system(buf);
|
||||
}
|
||||
|
||||
/* Requires libtiff 4.2.0 http://www.libtiff.org to be installed */
|
||||
int testUtilHaveTiffInfo() {
|
||||
return system("tiffinfo -h > /dev/null") == 0;
|
||||
}
|
||||
|
||||
int testUtilVerifyTiffInfo(char *filename, int debug) {
|
||||
char cmd[512 + 128];
|
||||
|
||||
if (strlen(filename) > 512) {
|
||||
return -1;
|
||||
}
|
||||
if (debug & ZINT_DEBUG_TEST_PRINT) {
|
||||
sprintf(cmd, "tiffinfo -D %s", filename);
|
||||
} else {
|
||||
sprintf(cmd, "tiffinfo -D %s > /dev/null 2>&1", filename);
|
||||
}
|
||||
|
||||
return system(cmd);
|
||||
}
|
||||
|
||||
static const char *testUtilBwippName(int index, const struct zint_symbol *symbol, int option_1, int option_2, int option_3, int debug, int *linear_row_height, int *gs1_cvt) {
|
||||
struct item {
|
||||
const char *name;
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
libzint - the open source barcode library
|
||||
Copyright (C) 2019 - 2020 Robin Stuart <rstuart114@gmail.com>
|
||||
Copyright (C) 2019 - 2021 Robin Stuart <rstuart114@gmail.com>
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions
|
||||
@ -119,6 +119,8 @@ int testUtilHaveGhostscript();
|
||||
int testUtilVerifyGhostscript(char *filename, int debug);
|
||||
int testUtilHaveVnu();
|
||||
int testUtilVerifyVnu(char *filename, int debug);
|
||||
int testUtilHaveTiffInfo();
|
||||
int testUtilVerifyTiffInfo(char *filename, int debug);
|
||||
int testUtilCanBwipp(int index, const struct zint_symbol *symbol, int option_1, int option_2, int option_3, int debug);
|
||||
int testUtilBwipp(int index, const struct zint_symbol *symbol, int option_1, int option_2, int option_3, const char *data, int length, const char *primary, char *buffer, int buffer_size);
|
||||
int testUtilBwippCmp(const struct zint_symbol *symbol, char *msg, const char *bwipp_buf, const char *expected);
|
||||
|
@ -290,8 +290,9 @@ INTERNAL int tif_pixel_plot(struct zint_symbol *symbol, unsigned char *pixelbuf)
|
||||
assert(strip_count > 0); /* Suppress clang-analyzer-core.UndefinedBinaryOperatorResult */
|
||||
|
||||
if (symbol->debug & ZINT_DEBUG_PRINT) {
|
||||
printf("TIFF (%dx%d) Strip Count %d, Rows Per Strip %d\n", symbol->bitmap_width, symbol->bitmap_height,
|
||||
strip_count, rows_per_strip);
|
||||
printf("TIFF (%dx%d) Strip Count %d, Rows Per Strip %d, Pixels Per Sample %d, Samples Per Pixel %d, PMI %d\n",
|
||||
symbol->bitmap_width, symbol->bitmap_height, strip_count, rows_per_strip, pixels_per_sample,
|
||||
samples_per_pixel, pmi);
|
||||
}
|
||||
|
||||
bytes_per_strip = rows_per_strip * ((symbol->bitmap_width + pixels_per_sample - 1) / pixels_per_sample)
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* zint.h - definitions for libzint
|
||||
|
||||
libzint - the open source barcode library
|
||||
Copyright (C) 2009-2020 Robin Stuart <rstuart114@gmail.com>
|
||||
Copyright (C) 2009-2021 Robin Stuart <rstuart114@gmail.com>
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions
|
||||
|
Loading…
Reference in New Issue
Block a user