summaryrefslogtreecommitdiff
path: root/pdf-over-signator
diff options
context:
space:
mode:
authorJakob Heher <jakob.heher@iaik.tugraz.at>2022-08-03 13:00:26 +0200
committerJakob Heher <jakob.heher@iaik.tugraz.at>2022-08-03 13:00:26 +0200
commitf9def921178f2c1995b28900e80e2a338257729b (patch)
tree46a9143f7454c6f11451175123c0600bb4d54ca8 /pdf-over-signator
parenta25b8b2fa18e7789968dbeb802df2dfade577205 (diff)
downloadpdf-over-f9def921178f2c1995b28900e80e2a338257729b.tar.gz
pdf-over-f9def921178f2c1995b28900e80e2a338257729b.tar.bz2
pdf-over-f9def921178f2c1995b28900e80e2a338257729b.zip
refactor out EXIF rotation nonsense into its self-contained class
Diffstat (limited to 'pdf-over-signator')
-rw-r--r--pdf-over-signator/pom.xml10
-rw-r--r--pdf-over-signator/src/main/java/at/asit/pdfover/signator/Emblem.java102
2 files changed, 8 insertions, 104 deletions
diff --git a/pdf-over-signator/pom.xml b/pdf-over-signator/pom.xml
index e1b94137..1e5e345b 100644
--- a/pdf-over-signator/pom.xml
+++ b/pdf-over-signator/pom.xml
@@ -22,10 +22,6 @@
<artifactId>commons-codec</artifactId>
</dependency>
<dependency>
- <groupId>com.drewnoakes</groupId>
- <artifactId>metadata-extractor</artifactId>
- </dependency>
- <dependency>
<groupId>javax.activation</groupId>
<artifactId>activation</artifactId>
</dependency>
@@ -34,5 +30,11 @@
<artifactId>jaxb-runtime</artifactId>
<version>2.4.0-b180830.0438</version>
</dependency>
+ <dependency>
+ <groupId>at.a-sit</groupId>
+ <artifactId>pdf-over-commons</artifactId>
+ <version>${project.parent.version}</version>
+ <scope>compile</scope>
+ </dependency>
</dependencies>
</project>
diff --git a/pdf-over-signator/src/main/java/at/asit/pdfover/signator/Emblem.java b/pdf-over-signator/src/main/java/at/asit/pdfover/signator/Emblem.java
index 0a130f79..939a27b2 100644
--- a/pdf-over-signator/src/main/java/at/asit/pdfover/signator/Emblem.java
+++ b/pdf-over-signator/src/main/java/at/asit/pdfover/signator/Emblem.java
@@ -15,6 +15,7 @@
*/
package at.asit.pdfover.signator;
+import at.asit.pdfover.Util;
// Imports
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
@@ -26,25 +27,14 @@ import java.io.InputStream;
import java.io.OutputStream;
import java.nio.file.Files;
import java.nio.file.Paths;
-import java.util.Iterator;
import java.util.Properties;
import javax.imageio.ImageIO;
-import javax.imageio.ImageReader;
-import javax.imageio.stream.ImageInputStream;
import org.apache.commons.codec.digest.DigestUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import com.drew.imaging.ImageMetadataReader;
-import com.drew.imaging.ImageProcessingException;
-import com.drew.metadata.Metadata;
-import com.drew.metadata.MetadataException;
-import com.drew.metadata.exif.ExifDirectoryBase;
-import com.drew.metadata.exif.ExifIFD0Directory;
-
-// TODO: what's the benefit of all of this caching business, especially since we seem to load it from disk anyway to hash it?
/**
*
*/
@@ -79,93 +69,6 @@ public class Emblem {
return DigestUtils.md5Hex(is);
}
- /**
- * Correctly rotate JPEG image by EXIF header
- * @param img the image
- * @param imgFile the image file
- * @return the fixed image
- */
- public static BufferedImage fixImage(BufferedImage img, File imgFile) {
- int oheight = img.getHeight();
- int owidth = img.getWidth();
-
- // Read EXIF metadata for jpeg
- ImageInputStream iis = null;
- try {
- iis = ImageIO.createImageInputStream(imgFile);
- Iterator<ImageReader> imageReaders = ImageIO.getImageReaders(iis);
-
- while (imageReaders.hasNext()) {
- ImageReader reader = imageReaders.next();
- log.debug(reader.getFormatName());
- if (reader.getFormatName().equals("JPEG")) {
- try {
- Metadata metadata = ImageMetadataReader.readMetadata(imgFile);
- ExifIFD0Directory metaDirectory = (metadata != null) ? metadata.getFirstDirectoryOfType(ExifIFD0Directory.class) : null;
- if (metaDirectory != null) {
- int orientation = metaDirectory.getInt(
- ExifDirectoryBase.TAG_ORIENTATION);
- if (orientation > 2) {
- // rotate
- double rotation = 0;
- int height = owidth;
- int width = oheight;
- switch ((orientation + 1) / 2) {
- case 2:
- rotation = Math.PI;
- height = oheight;
- width = owidth;
- break;
- case 3:
- rotation = Math.PI / 2;
- break;
- case 4:
- rotation = 3 * Math.PI / 2;
- break;
- }
- log.debug("EXIF orientation " + orientation + ", rotating " + rotation + "rad");
- BufferedImage result = new BufferedImage(width, height, img.getType());
- Graphics2D g = result.createGraphics();
- g.translate((width - owidth) / 2, (height - oheight) / 2);
- g.rotate(rotation, owidth / 2, oheight / 2);
- g.drawRenderedImage(img, null);
- g.dispose();
- img = result;
- owidth = width;
- oheight = height;
- }
- if (((orientation < 5) && (orientation % 2 == 0)) ||
- (orientation > 5) && (orientation % 2 == 1)) {
- // flip
- log.debug("flipping image");
- BufferedImage result = new BufferedImage(owidth, oheight, img.getType());
- Graphics2D g = result.createGraphics();
- g.drawImage(img, owidth, 0, -owidth, oheight, null);
- g.dispose();
- img = result;
- }
- }
- } catch (ImageProcessingException e) {
- log.error("Error reading emblem metadata", e);
- } catch (MetadataException e) {
- log.error("Error reading emblem metadata", e);
- } catch (NullPointerException e) {
- log.error("Error reading emblem metadata", e);
- }
- }
- }
- } catch (IOException e) {
- log.error("Error reading image" , e);
- } finally {
- try {
- if (iis != null)
- iis.close();
- } catch (IOException e) {
- log.debug("Error closing stream", e);
- }
- }
- return img;
- }
private static BufferedImage scaleImage(BufferedImage img, int maxWidth, int maxHeight) {
int oheight = img.getHeight();
@@ -231,9 +134,8 @@ public class Emblem {
emblemProps.setProperty(this.hshProp, emblemHsh);
File imgFile = new File(emblemImg);
- BufferedImage img = ImageIO.read(imgFile);
- img = fixImage(img, imgFile);
img = scaleImage(img, this.maxWidth, this.maxHeight);
+ BufferedImage img = Util.readImageWithEXIFRotation(imgFile);
File file = new File(this.fileDir, this.imgFileName + "." + this.imgFileExt);
ImageIO.write(img, this.imgFileExt, file); // ignore returned boolean