/*! * \brief pixWriteStreampWebP() * * \param[in] fp file stream * \param[in] pixs all depths * \param[in] quality 0 - 100; default ~80 * \param[in] lossless use 1 for lossless; 0 for lossy * \return 0 if OK, 1 on error * * <pre> * Notes: * (1) See pixWriteMemWebP() for details. * (2) Use 'free', and not leptonica's 'LEPT_FREE', for all heap data * that is returned from the WebP library. * </pre> */ l_ok pixWriteStreamWebP(FILE *fp, PIX *pixs, l_int32 quality, l_int32 lossless) { l_uint8 *filedata; size_t filebytes, nbytes; PROCNAME("pixWriteStreamWebP"); if (!fp) return ERROR_INT("stream not open", procName, 1); if (!pixs) return ERROR_INT("pixs not defined", procName, 1); pixSetPadBits(pixs, 0); pixWriteMemWebP(&filedata, &filebytes, pixs, quality, lossless); rewind(fp); nbytes = fwrite(filedata, 1, filebytes, fp); free(filedata); if (nbytes != filebytes) return ERROR_INT("Write error", procName, 1); return 0; }
/*! * \brief pixWriteMem() * * \param[out] pdata data of tiff compressed image * \param[out] psize size of returned data * \param[in] pix * \param[in] format defined in imageio.h * \return 0 if OK, 1 on error * * <pre> * Notes: * (1) On windows, this will only write tiff and PostScript to memory. * For other formats, it requires open_memstream(3). * (2) PostScript output is uncompressed, in hex ascii. * Most printers support level 2 compression (tiff_g4 for 1 bpp, * jpeg for 8 and 32 bpp). * </pre> */ l_int32 pixWriteMem(l_uint8 **pdata, size_t *psize, PIX *pix, l_int32 format) { l_int32 ret; PROCNAME("pixWriteMem"); if (!pdata) return ERROR_INT("&data not defined", procName, 1 ); if (!psize) return ERROR_INT("&size not defined", procName, 1 ); if (!pix) return ERROR_INT("&pix not defined", procName, 1 ); if (format == IFF_DEFAULT) format = pixChooseOutputFormat(pix); switch(format) { case IFF_BMP: ret = pixWriteMemBmp(pdata, psize, pix); break; case IFF_JFIF_JPEG: /* default quality; baseline sequential */ ret = pixWriteMemJpeg(pdata, psize, pix, 75, 0); break; case IFF_PNG: /* no gamma value stored */ ret = pixWriteMemPng(pdata, psize, pix, 0.0); break; case IFF_TIFF: /* uncompressed */ case IFF_TIFF_PACKBITS: /* compressed, binary only */ case IFF_TIFF_RLE: /* compressed, binary only */ case IFF_TIFF_G3: /* compressed, binary only */ case IFF_TIFF_G4: /* compressed, binary only */ case IFF_TIFF_LZW: /* compressed, all depths */ case IFF_TIFF_ZIP: /* compressed, all depths */ ret = pixWriteMemTiff(pdata, psize, pix, format); break; case IFF_PNM: ret = pixWriteMemPnm(pdata, psize, pix); break; case IFF_PS: ret = pixWriteMemPS(pdata, psize, pix, NULL, 0, DEFAULT_SCALING); break; case IFF_GIF: ret = pixWriteMemGif(pdata, psize, pix); break; case IFF_JP2: ret = pixWriteMemJp2k(pdata, psize, pix, 34, 0, 0, 0); break; case IFF_WEBP: ret = pixWriteMemWebP(pdata, psize, pix, 80, 0); break; case IFF_LPDF: ret = pixWriteMemPdf(pdata, psize, pix, 0, NULL); break; case IFF_SPIX: ret = pixWriteMemSpix(pdata, psize, pix); break; default: return ERROR_INT("unknown format", procName, 1); break; } return ret; }