Fixed: #1671 JPEG images display when not CMYK

JPEG fixer to DefineBitsJPEG3 and 4.
This commit is contained in:
Jindra Petřík
2021-04-05 16:56:59 +02:00
parent 8a3ee6389d
commit 05bf7a1c88
8 changed files with 568 additions and 191 deletions
@@ -193,9 +193,14 @@ public class DefineBitsJPEG3Tag extends ImageTag implements AloneTag {
protected SerializableImage getImage() {
try {
int errorLength = hasErrorHeader(imageData) ? 4 : 0;
ByteArrayInputStream bis = new ByteArrayInputStream(imageData.getArray(), imageData.getPos() + errorLength, imageData.getLength() - errorLength);
BufferedImage image = ImageHelper.read(bis);
JpegFixer jpegFixer = new JpegFixer();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try {
jpegFixer.fixJpeg(new ByteArrayInputStream(imageData.getArray(), imageData.getPos() + errorLength, imageData.getLength() - errorLength), baos);
} catch (IOException ex) {
Logger.getLogger(DefineBitsJPEG3Tag.class.getName()).log(Level.SEVERE, null, ex);
}
BufferedImage image = ImageHelper.read(new ByteArrayInputStream(baos.toByteArray()));
if (image == null) {
Logger.getLogger(DefineBitsJPEG3Tag.class.getName()).log(Level.SEVERE, "Failed to load image");
return null;
@@ -197,7 +197,14 @@ public class DefineBitsJPEG4Tag extends ImageTag implements AloneTag {
@Override
protected SerializableImage getImage() {
try {
BufferedImage image = ImageHelper.read(new ByteArrayInputStream(imageData.getArray(), imageData.getPos(), imageData.getLength()));
JpegFixer jpegFixer = new JpegFixer();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try {
jpegFixer.fixJpeg(new ByteArrayInputStream(imageData.getArray(), imageData.getPos(), imageData.getLength()), baos);
} catch (IOException ex) {
Logger.getLogger(DefineBitsJPEG3Tag.class.getName()).log(Level.SEVERE, null, ex);
}
BufferedImage image = ImageHelper.read(new ByteArrayInputStream(baos.toByteArray()));
if (image == null) {
Logger.getLogger(DefineBitsJPEG4Tag.class.getName()).log(Level.SEVERE, "Failed to load image");
return null;