From bc647dda7c98ae35fab7d7f6f7e49098131fed2e Mon Sep 17 00:00:00 2001 From: "honfika@gmail.com" Date: Sat, 12 Mar 2016 15:29:07 +0100 Subject: [PATCH] do not add image compression=lossless tag when the "original" image (in swf) was definebitsjpeg3/4 with jpeg data+alpha channel --- .../jpexs/decompiler/flash/tags/DefineBitsJPEG2Tag.java | 5 +++++ .../jpexs/decompiler/flash/tags/DefineBitsJPEG3Tag.java | 9 +++++++-- .../jpexs/decompiler/flash/tags/DefineBitsJPEG4Tag.java | 7 ++++++- .../decompiler/flash/tags/DefineBitsLossless2Tag.java | 5 +++++ .../decompiler/flash/tags/DefineBitsLosslessTag.java | 5 +++++ .../com/jpexs/decompiler/flash/tags/DefineBitsTag.java | 5 +++++ .../com/jpexs/decompiler/flash/tags/base/ImageTag.java | 2 ++ .../src/com/jpexs/decompiler/flash/xfl/XFLConverter.java | 6 ++++-- 8 files changed, 39 insertions(+), 5 deletions(-) diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineBitsJPEG2Tag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineBitsJPEG2Tag.java index ed7e974db..93374ecb1 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineBitsJPEG2Tag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineBitsJPEG2Tag.java @@ -115,6 +115,11 @@ public class DefineBitsJPEG2Tag extends ImageTag implements AloneTag { @Override public ImageFormat getImageFormat() { + return getOriginalImageFormat(); + } + + @Override + public ImageFormat getOriginalImageFormat() { return ImageTag.getImageFormat(imageData); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineBitsJPEG3Tag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineBitsJPEG3Tag.java index 9d2ebf93a..6f1a90470 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineBitsJPEG3Tag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineBitsJPEG3Tag.java @@ -42,7 +42,7 @@ import java.util.logging.Logger; * * @author JPEXS */ -@SWFVersion(from = 3) //Note: GIF and PNG since version +@SWFVersion(from = 3) //Note: GIF and PNG since version public class DefineBitsJPEG3Tag extends ImageTag implements AloneTag { public static final int ID = 35; @@ -158,13 +158,18 @@ public class DefineBitsJPEG3Tag extends ImageTag implements AloneTag { @Override public ImageFormat getImageFormat() { - ImageFormat fmt = ImageTag.getImageFormat(imageData); + ImageFormat fmt = getOriginalImageFormat(); if (fmt == ImageFormat.JPEG && bitmapAlphaData.getLength() > 0) { fmt = ImageFormat.PNG; //transparency } return fmt; } + @Override + public ImageFormat getOriginalImageFormat() { + return ImageTag.getImageFormat(imageData); + } + @Override public InputStream getOriginalImageData() { if (bitmapAlphaData.getLength() == 0) { // No alpha diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineBitsJPEG4Tag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineBitsJPEG4Tag.java index 453f12504..0003fc48f 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineBitsJPEG4Tag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineBitsJPEG4Tag.java @@ -163,13 +163,18 @@ public class DefineBitsJPEG4Tag extends ImageTag implements AloneTag { @Override public ImageFormat getImageFormat() { - ImageFormat fmt = ImageTag.getImageFormat(imageData); + ImageFormat fmt = getOriginalImageFormat(); if (fmt == ImageFormat.JPEG && bitmapAlphaData.getLength() > 0) { fmt = ImageFormat.PNG; //transparency } return fmt; } + @Override + public ImageFormat getOriginalImageFormat() { + return ImageTag.getImageFormat(imageData); + } + @Override public InputStream getOriginalImageData() { if (bitmapAlphaData.getLength() == 0) { // No alpha diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineBitsLossless2Tag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineBitsLossless2Tag.java index c2cc4f078..531f9af73 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineBitsLossless2Tag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineBitsLossless2Tag.java @@ -222,6 +222,11 @@ public class DefineBitsLossless2Tag extends ImageTag implements AloneTag { return ImageFormat.PNG; } + @Override + public ImageFormat getOriginalImageFormat() { + return ImageFormat.PNG; + } + @Override public InputStream getOriginalImageData() { return null; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineBitsLosslessTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineBitsLosslessTag.java index 6a5072bd6..a18e4918e 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineBitsLosslessTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineBitsLosslessTag.java @@ -217,6 +217,11 @@ public class DefineBitsLosslessTag extends ImageTag implements AloneTag { return ImageFormat.PNG; } + @Override + public ImageFormat getOriginalImageFormat() { + return ImageFormat.PNG; + } + @Override public InputStream getOriginalImageData() { return null; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineBitsTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineBitsTag.java index f5c286c8a..32b9e5d56 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineBitsTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/DefineBitsTag.java @@ -108,6 +108,11 @@ public class DefineBitsTag extends ImageTag implements TagChangedListener { return ImageFormat.JPEG; } + @Override + public ImageFormat getOriginalImageFormat() { + return ImageFormat.JPEG; + } + @Override public InputStream getOriginalImageData() { if (swf.getJtt() != null) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/ImageTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/ImageTag.java index 723a0d156..739d3aa02 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/ImageTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/ImageTag.java @@ -78,6 +78,8 @@ public abstract class ImageTag extends CharacterTag implements DrawableTag { public abstract ImageFormat getImageFormat(); + public abstract ImageFormat getOriginalImageFormat(); + public boolean importSupported() { return true; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/xfl/XFLConverter.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/xfl/XFLConverter.java index c6e25fa83..9e67260d2 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/xfl/XFLConverter.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/xfl/XFLConverter.java @@ -1473,8 +1473,10 @@ public class XFLConverter { switch (format) { case PNG: case GIF: - writer.writeAttribute("useImportedJPEGData", false); - writer.writeAttribute("compressionType", "lossless"); + if (imageTag.getOriginalImageFormat() != ImageFormat.JPEG) { + writer.writeAttribute("useImportedJPEGData", false); + writer.writeAttribute("compressionType", "lossless"); + } writer.writeAttribute("originalCompressionType", "lossless"); break; case JPEG: