aboutsummaryrefslogtreecommitdiff
path: root/pdf-as-common/src/main/java/at/gv/egiz/pdfas/common/utils
diff options
context:
space:
mode:
Diffstat (limited to 'pdf-as-common/src/main/java/at/gv/egiz/pdfas/common/utils')
-rw-r--r--pdf-as-common/src/main/java/at/gv/egiz/pdfas/common/utils/ImageUtils.java139
1 files changed, 95 insertions, 44 deletions
diff --git a/pdf-as-common/src/main/java/at/gv/egiz/pdfas/common/utils/ImageUtils.java b/pdf-as-common/src/main/java/at/gv/egiz/pdfas/common/utils/ImageUtils.java
index dcf1f17b..ab087f2c 100644
--- a/pdf-as-common/src/main/java/at/gv/egiz/pdfas/common/utils/ImageUtils.java
+++ b/pdf-as-common/src/main/java/at/gv/egiz/pdfas/common/utils/ImageUtils.java
@@ -32,7 +32,9 @@ import java.awt.image.BufferedImage;
import java.awt.image.ColorModel;
import java.awt.image.IndexColorModel;
import java.awt.image.WritableRaster;
+import java.io.ByteArrayInputStream;
import java.io.File;
+import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Iterator;
@@ -41,6 +43,8 @@ import javax.imageio.ImageIO;
import javax.imageio.ImageReader;
import javax.imageio.stream.ImageInputStream;
+import org.apache.commons.codec.binary.Base64;
+import org.apache.commons.io.IOUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -48,33 +52,30 @@ import at.gv.egiz.pdfas.common.exceptions.PdfAsException;
import at.gv.egiz.pdfas.common.settings.ISettings;
public class ImageUtils {
-
+
private static final Logger logger = LoggerFactory
.getLogger(ImageUtils.class);
-
+
public static BufferedImage removeAlphaChannel(BufferedImage src) {
- if (src.getColorModel().hasAlpha())
- {
- BufferedImage image = new BufferedImage(src.getWidth(), src.getHeight(), BufferedImage.TYPE_INT_RGB);
- Graphics2D g = image.createGraphics();
- g.setComposite(AlphaComposite.Src);
- g.drawImage(src, 0, 0, null);
- g.dispose();
- return image;
- }
+ if (src.getColorModel().hasAlpha()) {
+ BufferedImage image = new BufferedImage(src.getWidth(),
+ src.getHeight(), BufferedImage.TYPE_INT_RGB);
+ Graphics2D g = image.createGraphics();
+ g.setComposite(AlphaComposite.Src);
+ g.drawImage(src, 0, 0, null);
+ g.dispose();
+ return image;
+ }
return src;
/*
- BufferedImage rgbImage = new BufferedImage(src.getWidth(), src.getHeight(), BufferedImage.TYPE_3BYTE_BGR);
- for (int x = 0; x < src.getWidth(); ++x)
- {
- for (int y = 0; y < src.getHeight(); ++y)
- {
- rgbImage.setRGB(x, y, src.getRGB(x, y) & 0xFFFFFF);
- }
- }
- return rgbImage;*/
+ * BufferedImage rgbImage = new BufferedImage(src.getWidth(),
+ * src.getHeight(), BufferedImage.TYPE_3BYTE_BGR); for (int x = 0; x <
+ * src.getWidth(); ++x) { for (int y = 0; y < src.getHeight(); ++y) {
+ * rgbImage.setRGB(x, y, src.getRGB(x, y) & 0xFFFFFF); } } return
+ * rgbImage;
+ */
}
-
+
public static BufferedImage convertRGBAToIndexed(BufferedImage src) {
BufferedImage dest = new BufferedImage(src.getWidth(), src.getHeight(),
BufferedImage.TYPE_BYTE_INDEXED);
@@ -110,46 +111,96 @@ public class ImageUtils {
return new BufferedImage(icm2, raster, image.isAlphaPremultiplied(),
null);
}
-
- public static Dimension getImageDimensions(InputStream is) throws IOException {
+
+ public static Dimension getImageDimensions(InputStream is)
+ throws IOException {
ImageInputStream in = ImageIO.createImageInputStream(is);
try {
- final Iterator<ImageReader> readers = ImageIO.getImageReaders(in);
- if (readers.hasNext()) {
- ImageReader reader = readers.next();
- try {
- reader.setInput(in);
- return new Dimension(reader.getWidth(0), reader.getHeight(0));
- } finally {
- reader.dispose();
- }
- }
- throw new IOException("Failed to read Image file");
+ final Iterator<ImageReader> readers = ImageIO.getImageReaders(in);
+ if (readers.hasNext()) {
+ ImageReader reader = readers.next();
+ try {
+ reader.setInput(in);
+ return new Dimension(reader.getWidth(0),
+ reader.getHeight(0));
+ } finally {
+ reader.dispose();
+ }
+ }
+ throw new IOException("Failed to read Image file");
} finally {
- if (in != null) in.close();
+ if (in != null)
+ in.close();
}
}
-
- public static File getImageFile(String imageFile, ISettings settings) throws PdfAsException, IOException {
+
+ public static File getImageFile(String imageFile, ISettings settings)
+ throws PdfAsException, IOException {
File img_file = new File(imageFile);
if (!img_file.isAbsolute()) {
logger.debug("Image file declaration is relative. Prepending path of resources directory.");
- logger.debug("Image Location: "
- + settings.getWorkingDirectory()
- + File.separator + imageFile);
- img_file = new File(settings.getWorkingDirectory()
+ logger.debug("Image Location: " + settings.getWorkingDirectory()
+ File.separator + imageFile);
+ img_file = new File(settings.getWorkingDirectory() + File.separator
+ + imageFile);
} else {
logger.debug("Image file declaration is absolute. Skipping file relocation.");
}
if (!img_file.exists()) {
- logger.debug("Image file \""
- + img_file.getCanonicalPath()
+ logger.debug("Image file \"" + img_file.getCanonicalPath()
+ "\" doesn't exist.");
throw new PdfAsException("error.pdf.stamp.04");
}
-
+
return img_file;
}
+
+ public static Dimension getImageDimensions(String imageValue,
+ ISettings settings) throws PdfAsException, IOException {
+ InputStream is = getImageInputStream(imageValue, settings);
+ try {
+ return getImageDimensions(is);
+ } catch (Throwable e) {
+ throw new PdfAsException("error.pdf.stamp.04", e);
+ } finally {
+ IOUtils.closeQuietly(is);
+ }
+ }
+
+ public static InputStream getImageInputStream(String imageValue,
+ ISettings settings) throws PdfAsException, IOException {
+ InputStream is = null;
+ try {
+ File img_file = ImageUtils.getImageFile(imageValue, settings);
+
+ if (!img_file.exists()) {
+ throw new PdfAsException("error.pdf.stamp.04");
+ }
+
+ is = new FileInputStream(img_file);
+ } catch (PdfAsException | IOException e) {
+ try {
+ is = new ByteArrayInputStream(Base64.decodeBase64(imageValue));
+ } catch (Throwable e1) {
+ // Ignore value is not base 64!
+ logger.debug("Value is not base64: ", e1);
+ // rethrow e
+ throw e;
+ }
+ }
+ return is;
+ }
+
+ public static BufferedImage getImage(String imageValue, ISettings settings)
+ throws PdfAsException, IOException {
+ InputStream is = getImageInputStream(imageValue, settings);
+ try {
+ return ImageIO.read(is);
+ } catch (Throwable e) {
+ throw new PdfAsException("error.pdf.stamp.04", e);
+ } finally {
+ IOUtils.closeQuietly(is);
+ }
+ }
}