do not add image compression=lossless tag when the "original" image (in swf) was definebitsjpeg3/4 with jpeg data+alpha channel

This commit is contained in:
honfika@gmail.com
2016-03-12 15:29:07 +01:00
parent 14ae76a269
commit bc647dda7c
8 changed files with 39 additions and 5 deletions

View File

@@ -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);
}

View File

@@ -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

View File

@@ -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

View File

@@ -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;

View File

@@ -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;

View File

@@ -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) {

View File

@@ -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;
}

View File

@@ -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: