316l_int32 format, ret, valid;
322 return (
PIX *)ERROR_PTR(
"stream not defined", __func__, NULL);
329 if ((pix = pixReadStreamBmp(fp)) == NULL )
330 return (
PIX *)ERROR_PTR(
"bmp: no pix returned", __func__, NULL);
334 if ((pix = pixReadStreamJpeg(fp, 0, 1, NULL, hint)) == NULL)
335 return (
PIX *)ERROR_PTR(
"jpeg: no pix returned", __func__, NULL);
336 ret = fgetJpegComment(fp, &comment);
338 pixSetText(pix, (
char *)comment);
343 if ((pix = pixReadStreamPng(fp)) == NULL)
344 return (
PIX *)ERROR_PTR(
"png: no pix returned", __func__, NULL);
348 case IFF_TIFF_PACKBITS:
355 if ((pix = pixReadStreamTiff(fp, 0)) == NULL)
356 return (
PIX *)ERROR_PTR(
"tiff: no pix returned", __func__, NULL);
360 if ((pix = pixReadStreamPnm(fp)) == NULL)
361 return (
PIX *)ERROR_PTR(
"pnm: no pix returned", __func__, NULL);
365 if ((pix = pixReadStreamGif(fp)) == NULL)
366 return (
PIX *)ERROR_PTR(
"gif: no pix returned", __func__, NULL);
370 if ((pix = pixReadStreamJp2k(fp, 1, NULL, 0, 0)) == NULL)
371 return (
PIX *)ERROR_PTR(
"jp2: no pix returned", __func__, NULL);
375 if ((pix = pixReadStreamWebP(fp)) == NULL)
376 return (
PIX *)ERROR_PTR(
"webp: no pix returned", __func__, NULL);
380 L_ERROR(
"PostScript reading is not supported\n", __func__);
384 L_ERROR(
"Pdf reading is not supported\n", __func__);
388 if ((pix = pixReadStreamSpix(fp)) == NULL)
389 return (
PIX *)ERROR_PTR(
"spix: no pix returned", __func__, NULL);
393 return (
PIX *)ERROR_PTR(
"Unknown format: no pix returned",
399 pixSetInputFormat(pix, format);
400 if ((cmap = pixGetColormap(pix))) {
401 pixcmapIsValid(cmap, pix, &valid);
404 return (
PIX *)ERROR_PTR(
"invalid colormap", __func__, NULL);
443l_int32 format, ret, w, h, d, bps, spp, iscmap;
452 if (piscmap) *piscmap = 0;
453 if (pformat) *pformat = 0;
456 return ERROR_INT(
"filename not defined", __func__, 1);
458 if ((fp = fopenReadStream(filename)) == NULL)
459 return ERROR_INT_1(
"image file not found", filename, __func__, 1);
466 if ((pix =
pixRead(filename)) == NULL)
467 return ERROR_INT_1(
"bmp: pix not read", filename, __func__, 1);
468 pixGetDimensions(pix, &w, &h, &d);
469 bps = (d == 32) ? 8 : d;
470 spp = pixGetSpp(pix);
471 iscmap = (pixGetColormap(pix)) ? 1 : 0;
476 ret = readHeaderJpeg(filename, &w, &h, &spp, NULL, NULL);
479 return ERROR_INT_1(
"jpeg: no header info returned",
480 filename, __func__, 1);
484 ret = readHeaderPng(filename, &w, &h, &bps, &spp, &iscmap);
486 return ERROR_INT_1(
"png: no header info returned",
487 filename, __func__, 1);
491 case IFF_TIFF_PACKBITS:
499 ret = readHeaderTiff(filename, 0, &w, &h, &bps, &spp, NULL, &iscmap,
502 return ERROR_INT_1(
"tiff: no header info returned",
503 filename, __func__, 1);
507 ret = readHeaderPnm(filename, &w, &h, &d, &type, &bps, &spp);
509 return ERROR_INT_1(
"pnm: no header info returned",
510 filename, __func__, 1);
514 if ((pix =
pixRead(filename)) == NULL)
515 return ERROR_INT_1(
"gif: pix not read", filename, __func__, 1);
516 pixGetDimensions(pix, &w, &h, &d);
524 ret = readHeaderJp2k(filename, &w, &h, &bps, &spp, NULL);
528 if (readHeaderWebP(filename, &w, &h, &spp))
529 return ERROR_INT_1(
"webp: no header info returned",
530 filename, __func__, 1);
535 if (pformat) *pformat = format;
536 return ERROR_INT(
"PostScript reading is not supported\n", __func__, 1);
539 if (pformat) *pformat = format;
540 return ERROR_INT(
"Pdf reading is not supported\n", __func__, 1);
543 ret = readHeaderSpix(filename, &w, &h, &bps, &spp, &iscmap);
545 return ERROR_INT_1(
"spix: no header info returned",
546 filename, __func__, 1);
550 return ERROR_INT_1(
"unknown format in file", filename, __func__, 1);
555 if (pbps) *pbps = bps;
556 if (pspp) *pspp = spp;
557 if (piscmap) *piscmap = iscmap;
558 if (pformat) *pformat = format;
829l_int32 format, valid;
834 return (
PIX *)ERROR_PTR(
"data not defined", __func__, NULL);
836 return (
PIX *)ERROR_PTR(
"size < 12", __func__, NULL);
843 if ((pix = pixReadMemBmp(data, size)) == NULL )
844 return (
PIX *)ERROR_PTR(
"bmp: no pix returned", __func__, NULL);
848 if ((pix = pixReadMemJpeg(data, size, 0, 1, NULL, 0)) == NULL)
849 return (
PIX *)ERROR_PTR(
"jpeg: no pix returned", __func__, NULL);
853 if ((pix = pixReadMemPng(data, size)) == NULL)
854 return (
PIX *)ERROR_PTR(
"png: no pix returned", __func__, NULL);
858 case IFF_TIFF_PACKBITS:
865 if ((pix = pixReadMemTiff(data, size, 0)) == NULL)
866 return (
PIX *)ERROR_PTR(
"tiff: no pix returned", __func__, NULL);
870 if ((pix = pixReadMemPnm(data, size)) == NULL)
871 return (
PIX *)ERROR_PTR(
"pnm: no pix returned", __func__, NULL);
875 if ((pix = pixReadMemGif(data, size)) == NULL)
876 return (
PIX *)ERROR_PTR(
"gif: no pix returned", __func__, NULL);
880 if ((pix = pixReadMemJp2k(data, size, 1, NULL, 0, 0)) == NULL)
881 return (
PIX *)ERROR_PTR(
"jp2k: no pix returned", __func__, NULL);
885 if ((pix = pixReadMemWebP(data, size)) == NULL)
886 return (
PIX *)ERROR_PTR(
"webp: no pix returned", __func__, NULL);
890 L_ERROR(
"PostScript reading is not supported\n", __func__);
894 L_ERROR(
"Pdf reading is not supported\n", __func__);
898 if ((pix = pixReadMemSpix(data, size)) == NULL)
899 return (
PIX *)ERROR_PTR(
"spix: no pix returned", __func__, NULL);
903 return (
PIX *)ERROR_PTR(
"Unknown format: no pix returned",
912 if (format == IFF_TIFF && pixGetDepth(pix) == 1)
913 format = IFF_TIFF_G4;
914 pixSetInputFormat(pix, format);
915 if ((cmap = pixGetColormap(pix))) {
916 pixcmapIsValid(cmap, pix, &valid);
919 return (
PIX *)ERROR_PTR(
"invalid colormap", __func__, NULL);
922 pixSetPadBits(pix, 0);
963l_int32 format, ret, w, h, d, bps, spp, iscmap;
971 if (piscmap) *piscmap = 0;
972 if (pformat) *pformat = 0;
975 return ERROR_INT(
"data not defined", __func__, 1);
977 return ERROR_INT(
"size < 12", __func__, 1);
984 if ((pix = pixReadMemBmp(data, size)) == NULL)
985 return ERROR_INT(
"bmp: pix not read", __func__, 1);
986 pixGetDimensions(pix, &w, &h, &d);
988 bps = (d == 32) ? 8 : d;
989 spp = (d == 32) ? 3 : 1;
993 ret = readHeaderMemJpeg(data, size, &w, &h, &spp, NULL, NULL);
996 return ERROR_INT(
"jpeg: no header info returned", __func__, 1);
1000 ret = readHeaderMemPng(data, size, &w, &h, &bps, &spp, &iscmap);
1002 return ERROR_INT(
"png: no header info returned", __func__, 1);
1006 case IFF_TIFF_PACKBITS:
1014 ret = readHeaderMemTiff(data, size, 0, &w, &h, &bps, &spp,
1015 NULL, &iscmap, &format);
1017 return ERROR_INT(
"tiff: no header info returned", __func__, 1);
1021 ret = readHeaderMemPnm(data, size, &w, &h, &d, &type, &bps, &spp);
1023 return ERROR_INT(
"pnm: no header info returned", __func__, 1);
1027 if ((pix = pixReadMemGif(data, size)) == NULL)
1028 return ERROR_INT(
"gif: pix not read", __func__, 1);
1029 pixGetDimensions(pix, &w, &h, &d);
1037 ret = readHeaderMemJp2k(data, size, &w, &h, &bps, &spp, NULL);
1042 ret = readHeaderMemWebP(data, size, &w, &h, &spp);
1046 if (pformat) *pformat = format;
1047 return ERROR_INT(
"PostScript reading is not supported\n", __func__, 1);
1050 if (pformat) *pformat = format;
1051 return ERROR_INT(
"Pdf reading is not supported\n", __func__, 1);
1054 ret = sreadHeaderSpix((l_uint32 *)data, size, &w, &h, &bps,
1057 return ERROR_INT(
"pnm: no header info returned", __func__, 1);
1061 return ERROR_INT(
"unknown format; no data returned", __func__, 1);
1067 if (pbps) *pbps = bps;
1068 if (pspp) *pspp = spp;
1069 if (piscmap) *piscmap = iscmap;
1070 if (pformat) *pformat = format;
1104l_int32 w, h, d, wpl, count, npages, color;
1105l_int32 format, bps, spp, iscmap, xres, yres, transparency;
1111 return ERROR_INT(
"filename not defined", __func__, 1);
1113 return ERROR_INT(
"stream not defined", __func__, 1);
1116 if (
pixReadHeader(filename, &format, &w, &h, &bps, &spp, &iscmap)) {
1117 L_ERROR(
"failure to read header of %s\n", __func__, filename);
1120 fprintf(fpout,
"===============================================\n"
1121 "Reading the header:\n");
1122 fprintf(fpout,
" input image format type: %s\n",
1123 ImageFileFormatExtensions[format]);
1124 fprintf(fpout,
" w = %d, h = %d, bps = %d, spp = %d, iscmap = %d\n",
1125 w, h, bps, spp, iscmap);
1128 if (format == IFF_JP2) {
1129 fpin = fopenReadStream(filename);
1130 fgetJp2kResolution(fpin, &xres, &yres);
1131 if (fpin) fclose(fpin);
1132 fprintf(fpout,
" xres = %d, yres = %d\n", xres, yres);
1133 }
else if (format == IFF_PNG) {
1134 fpin = fopenReadStream(filename);
1135 fgetPngResolution(fpin, &xres, &yres);
1136 if (fpin) fclose(fpin);
1137 fprintf(fpout,
" xres = %d, yres = %d\n", xres, yres);
1139 fpin = fopenReadStream(filename);
1140 fgetPngColormapInfo(fpin, &cmap, &transparency);
1141 if (fpin) fclose(fpin);
1143 fprintf(fpout,
" colormap has transparency\n");
1145 fprintf(fpout,
" colormap does not have transparency\n");
1146 pixcmapWriteStream(fpout, cmap);
1147 pixcmapDestroy(&cmap);
1149 }
else if (format == IFF_JFIF_JPEG) {
1150 fpin = fopenReadStream(filename);
1151 fgetJpegResolution(fpin, &xres, &yres);
1152 if (fpin) fclose(fpin);
1153 fprintf(fpout,
" xres = %d, yres = %d\n", xres, yres);
1161 fprintf(fpout,
"===============================================\n"
1162 "Reading the full image:\n");
1165 if (format == IFF_PNG && bps == 16)
1166 l_pngSetReadStrip16To8(0);
1168 if ((pix =
pixRead(filename)) == NULL) {
1169 L_ERROR(
"failure to read full image of %s\n", __func__, filename);
1173 format = pixGetInputFormat(pix);
1174 pixGetDimensions(pix, &w, &h, &d);
1175 wpl = pixGetWpl(pix);
1176 spp = pixGetSpp(pix);
1177 fprintf(fpout,
" input image format type: %s\n",
1178 ImageFileFormatExtensions[format]);
1179 fprintf(fpout,
" w = %d, h = %d, d = %d, spp = %d, wpl = %d\n",
1181 fprintf(fpout,
" xres = %d, yres = %d\n",
1182 pixGetXRes(pix), pixGetYRes(pix));
1184 text = pixGetText(pix);
1186 fprintf(fpout,
" text: %s\n", text);
1188 cmap = pixGetColormap(pix);
1190 pixcmapHasColor(cmap, &color);
1192 fprintf(fpout,
" colormap exists and has color values:");
1194 fprintf(fpout,
" colormap exists and has only gray values:");
1195 pixcmapWriteStream(fpout, pixGetColormap(pix));
1198 fprintf(fpout,
" colormap does not exist\n");
1200 if (format == IFF_TIFF || format == IFF_TIFF_G4 ||
1201 format == IFF_TIFF_G3 || format == IFF_TIFF_PACKBITS) {
1202 fprintf(fpout,
" Tiff header information:\n");
1203 fpin = fopenReadStream(filename);
1204 tiffGetCount(fpin, &npages);
1205 if (fpin) fclose(fpin);
1207 fprintf(fpout,
" One page in file\n");
1209 fprintf(fpout,
" %d pages in file\n", npages);
1210 fprintTiffInfo(fpout, filename);
1214 pixCountPixels(pix, &count, NULL);
1215 pixGetDimensions(pix, &w, &h, NULL);
1216 fprintf(fpout,
" 1 bpp: foreground pixel fraction ON/Total = %g\n",
1217 (l_float32)count / (l_float32)(w * h));
1219 fprintf(fpout,
"===============================================\n");
1225 if (pixGetSpp(pix) == 4) {
1226 pixt = pixDisplayLayersRGBA(pix, 0xffffff00, 600);
1227 pixDisplay(pixt, 100, 100);
1231 if (format == IFF_PNG && bps == 16)
1232 l_pngSetReadStrip16To8(1);
1267l_int32 w, h, d, depth, equal, problems;
1270PIX *pixs, *pixc, *pix1, *pix2;
1274 return ERROR_INT(
"filename not defined", __func__, 1);
1277 if ((pix1 =
pixRead(filename)) == NULL)
1278 return ERROR_INT(
"pix1 not made", __func__, 1);
1279 pixGetDimensions(pix1, &w, &h, NULL);
1280 if (w > 250 && h > 250) {
1281 box = boxCreate(w / 2 - 125, h / 2 - 125, 250, 250);
1282 pixs = pixClipRectangle(pix1, box, NULL);
1285 pixs = pixClone(pix1);
1289 lept_mkdir(
"lept/format");
1296 pixc = pixClone(pixs);
1300 if (pixGetSpp(pixc) == 4)
1302 cmap = pixGetColormap(pixc);
1303 d = pixGetDepth(pixc);
1314 if (d == 1 || d == 8) {
1315 L_INFO(
"write/read bmp\n", __func__);
1316 pixWrite(FILE_BMP, pixc, IFF_BMP);
1321 pix2 = pixClone(pix1);
1322 pixEqual(pixc, pix2, &equal);
1324 L_INFO(
" **** bad bmp image: d = %d ****\n", __func__, d);
1331 if (d == 2 || d == 4 || d == 32) {
1332 L_INFO(
"write/read bmp\n", __func__);
1333 pixWrite(FILE_BMP, pixc, IFF_BMP);
1335 pixEqual(pixc, pix1, &equal);
1337 L_INFO(
" **** bad bmp image: d = %d ****\n", __func__, d);
1348 L_INFO(
"write/read png\n", __func__);
1349 pixWrite(FILE_PNG, pixc, IFF_PNG);
1351 pixEqual(pixc, pix1, &equal);
1353 L_INFO(
" **** bad png image: d = %d ****\n", __func__, d);
1361#if HAVE_LIBTIFF && HAVE_LIBJPEG
1372 L_INFO(
"write/read uncompressed tiff\n", __func__);
1373 pixWrite(FILE_TIFF, pixc, IFF_TIFF);
1375 pixEqual(pixc, pix1, &equal);
1377 L_INFO(
" **** bad tiff uncompressed image: d = %d ****\n",
1384 L_INFO(
"write/read lzw compressed tiff\n", __func__);
1385 pixWrite(FILE_LZW, pixc, IFF_TIFF_LZW);
1387 pixEqual(pixc, pix1, &equal);
1389 L_INFO(
" **** bad tiff lzw compressed image: d = %d ****\n",
1396 L_INFO(
"write/read zip compressed tiff\n", __func__);
1397 pixWrite(FILE_ZIP, pixc, IFF_TIFF_ZIP);
1399 pixEqual(pixc, pix1, &equal);
1401 L_INFO(
" **** bad tiff zip compressed image: d = %d ****\n",
1408 if (d == 8 || d == 32) {
1410 L_INFO(
"write/read jpeg compressed tiff\n", __func__);
1411 if (d == 8 && pixGetColormap(pixc)) {
1413 pixWrite(FILE_TIFF_JPEG, pixc1, IFF_TIFF_JPEG);
1414 if ((pix1 =
pixRead(FILE_TIFF_JPEG)) == NULL) {
1415 L_INFO(
" did not read FILE_TIFF_JPEG\n", __func__);
1420 pixWrite(FILE_TIFF_JPEG, pixc, IFF_TIFF_JPEG);
1421 pix1 =
pixRead(FILE_TIFF_JPEG);
1423 pixCompareGray(pix1, pixc, L_COMPARE_ABS_DIFF, 0, NULL, &diff,
1426 pixCompareRGB(pix1, pixc, L_COMPARE_ABS_DIFF, 0, NULL, &diff,
1430 L_INFO(
" **** bad tiff jpeg compressed image: "
1431 "d = %d, diff = %5.2f ****\n", __func__, d, diff);
1440 L_INFO(
"write/read g4 compressed tiff\n", __func__);
1441 pixWrite(FILE_G4, pixc, IFF_TIFF_G4);
1443 pixEqual(pixc, pix1, &equal);
1445 L_INFO(
" **** bad tiff g4 image ****\n", __func__);
1450 L_INFO(
"write/read g3 compressed tiff\n", __func__);
1451 pixWrite(FILE_G3, pixc, IFF_TIFF_G3);
1453 pixEqual(pixc, pix1, &equal);
1455 L_INFO(
" **** bad tiff g3 image ****\n", __func__);
1460 L_INFO(
"write/read rle compressed tiff\n", __func__);
1461 pixWrite(FILE_RLE, pixc, IFF_TIFF_RLE);
1463 pixEqual(pixc, pix1, &equal);
1465 L_INFO(
" **** bad tiff rle image: d = %d ****\n", __func__, d);
1470 L_INFO(
"write/read packbits compressed tiff\n", __func__);
1471 pixWrite(FILE_PB, pixc, IFF_TIFF_PACKBITS);
1473 pixEqual(pixc, pix1, &equal);
1475 L_INFO(
" **** bad tiff packbits image: d = %d ****\n",
1489 L_INFO(
"write/read pnm\n", __func__);
1490 pixWrite(FILE_PNM, pixc, IFF_PNM);
1495 pix2 = pixClone(pixc);
1496 pixEqual(pix1, pix2, &equal);
1498 L_INFO(
" **** bad pnm image: d = %d ****\n", __func__, d);
1507 if (d != 8 || !cmap)
1508 pix1 = pixConvertTo8(pixc, 1);
1510 pix1 = pixClone(pixc);
1511 L_INFO(
"write/read gif\n", __func__);
1512 pixWrite(FILE_GIF, pix1, IFF_GIF);
1514 pixEqual(pix1, pix2, &equal);
1516 L_INFO(
" **** bad gif image: d = %d ****\n", __func__, d);
1527 pix1 = pixConvertTo32(pixc);
1529 pix1 = pixConvertTo8(pixc, 0);
1530 depth = pixGetDepth(pix1);
1531 L_INFO(
"write/read jpeg\n", __func__);
1532 pixWrite(FILE_JPG, pix1, IFF_JFIF_JPEG);
1535 pixCompareGray(pix1, pix2, L_COMPARE_ABS_DIFF, 0, NULL, &diff,
1538 pixCompareRGB(pix1, pix2, L_COMPARE_ABS_DIFF, 0, NULL, &diff,
1542 L_INFO(
" **** bad jpeg image: d = %d, diff = %5.2f ****\n",
1543 __func__, depth, diff);
1553 if (cmap || d <= 16)
1554 pix1 = pixConvertTo32(pixc);
1556 pix1 = pixClone(pixc);
1557 depth = pixGetDepth(pix1);
1558 L_INFO(
"write/read webp\n", __func__);
1559 pixWrite(FILE_WEBP, pix1, IFF_WEBP);
1561 pixCompareRGB(pix1, pix2, L_COMPARE_ABS_DIFF, 0, NULL, &diff, NULL, NULL);
1563 L_INFO(
" **** bad webp image: d = %d, diff = %5.2f ****\n",
1564 __func__, depth, diff);
1575 pix1 = pixConvertTo32(pixc);
1577 pix1 = pixConvertTo8(pixc, 0);
1578 depth = pixGetDepth(pix1);
1579 L_INFO(
"write/read jp2k\n", __func__);
1580 pixWrite(FILE_JP2K, pix1, IFF_JP2);
1583 pixCompareGray(pix1, pix2, L_COMPARE_ABS_DIFF, 0, NULL, &diff,
1586 pixCompareRGB(pix1, pix2, L_COMPARE_ABS_DIFF, 0, NULL, &diff,
1589 lept_stderr(
"diff = %7.3f\n", diff);
1591 L_INFO(
" **** bad jp2k image: d = %d, diff = %5.2f ****\n",
1592 __func__, depth, diff);
1599 if (problems == FALSE)
1600 L_INFO(
"All formats read and written OK!\n", __func__);