From d216d326a541b50dbe901ce4c7e9dd9e5d40a88b Mon Sep 17 00:00:00 2001 From: Adrian Johnson Date: Sun, 18 Aug 2013 20:07:31 +0930 Subject: [PATCH 4/5] pdfimages: add support for writing JPEG2000 files --- utils/ImageOutputDev.cc | 4 ++++ utils/ImageOutputDev.h | 4 ++++ utils/pdfimages.1 | 12 ++++++++---- utils/pdfimages.cc | 4 ++++ 4 files changed, 20 insertions(+), 4 deletions(-) diff --git a/utils/ImageOutputDev.cc b/utils/ImageOutputDev.cc index 6ebbdfe..38c6849 100644 --- a/utils/ImageOutputDev.cc +++ b/utils/ImageOutputDev.cc @@ -416,6 +416,10 @@ void ImageOutputDev::writeImage(GfxState *state, Object *ref, Stream *str, // dump JPEG file writeRawImage(str, "jpg"); + } else if (dumpJP2 && str->getKind() == strJPX && !inlineImg) { + // dump JPEG2000 file + writeRawImage(str, "jp2"); + } else if (outputPNG) { // output in PNG format diff --git a/utils/ImageOutputDev.h b/utils/ImageOutputDev.h index 0cfd9ff..25852d0 100644 --- a/utils/ImageOutputDev.h +++ b/utils/ImageOutputDev.h @@ -79,6 +79,9 @@ public: // Use Jpeg format for Jpeg files void enableJpeg(GBool jpeg) { dumpJPEG = jpeg; } + // Use Jpeg2000 format for Jpeg2000 files + void enableJpeg2000(GBool jp2) { dumpJP2 = jp2; } + // Check if file was successfully created. virtual GBool isOk() { return ok; } @@ -155,6 +158,7 @@ private: GBool listImages; // list images instead of dumping GBool listImagesExtra; // list images with extra info instead of dumping GBool dumpJPEG; // set to dump native JPEG files + GBool dumpJP2; // set to dump native JPEG2000 files GBool outputPNG; // set to output in PNG format GBool outputTiff; // set to output in TIFF format GBool pageNames; // set to include page number in file names diff --git a/utils/pdfimages.1 b/utils/pdfimages.1 index 8c00094..bdd99bb 100644 --- a/utils/pdfimages.1 +++ b/utils/pdfimages.1 @@ -11,7 +11,7 @@ pdfimages \- Portable Document Format (PDF) image extractor .B Pdfimages saves images from a Portable Document Format (PDF) file as Portable Pixmap (PPM), Portable Bitmap (PBM), Portable Network Graphics (PNG), -Tagged Image File Format (TIFF), or JPEG files. +Tagged Image File Format (TIFF), JPEG, or JPEG2000 files. .PP Pdfimages reads the PDF file .IR PDF-file , @@ -21,11 +21,12 @@ where .I nnn is the image number and .I xxx -is the image type (.ppm, .pbm, .png, .tif, or .jpg). +is the image type (.ppm, .pbm, .png, .tif, .jpg, or jp2). .PP The default output format is PBM (for monochrome images) or PPM for non-monochrome. The -\-png or \-tiff options change to default output to PNG or TIFF respectively. In addition the \-j option -will cause JPEG images in the PDF file to be written in JPEG format. +\-png or \-tiff options change to default output to PNG or TIFF respectively. In addition the \-j and +\-jp2 options will cause JPEG and JPEG2000, respectively, images in the PDF file to be written in their +native format. .SH OPTIONS .TP .BI \-f " number" @@ -43,6 +44,9 @@ Change the default output format to TIFF. .B \-j Write images in JPEG format as JPEG files instead of the default format. The JPEG file is identical to the JPEG data stored in the PDF. .TP +.B \-jp2 +Write images in JPEG2000 format as JP2 files instead of the default format. The JP2 file is identical to the JPEG2000 data stored in the PDF. +.TP .B \-list Instead of writing the images, list the images along with various information for each image. Do not specify an .IR image-root diff --git a/utils/pdfimages.cc b/utils/pdfimages.cc index 2890512..bc15df0 100644 --- a/utils/pdfimages.cc +++ b/utils/pdfimages.cc @@ -54,6 +54,7 @@ static GBool listImagesExtra = gFalse; static GBool enablePNG = gFalse; static GBool enableTiff = gFalse; static GBool dumpJPEG = gFalse; +static GBool dumpJP2 = gFalse; static GBool pageNames = gFalse; static char ownerPassword[33] = "\001"; static char userPassword[33] = "\001"; @@ -72,6 +73,8 @@ static const ArgDesc argDesc[] = { "write image in TIFF format"}, {"-j", argFlag, &dumpJPEG, 0, "write JPEG images as JPEG files"}, + {"-jp2", argFlag, &dumpJP2, 0, + "write JPEG2000 images as JP2 files"}, {"-list", argFlag, &listImages, 0, "print list of images instead of saving"}, {"-list-extra", argFlag, &listImagesExtra, 0, @@ -182,6 +185,7 @@ int main(int argc, char *argv[]) { imgOut->enablePNG(enablePNG); imgOut->enableTiff(enableTiff); imgOut->enableJpeg(dumpJPEG); + imgOut->enableJpeg2000(dumpJP2); doc->displayPages(imgOut, firstPage, lastPage, 72, 72, 0, gTrue, gFalse, gFalse); } -- 1.8.1.2