mirror of
https://git.huckle.dev/Huckles-Minecraft-Archive/jpexs-decompiler.git
synced 2026-07-03 14:34:32 +00:00
Fixed #1922 FLA/XFL/Canvas/SVG export - exporting DefineBitsJPEG3/4 with alpha as JPEG with PNG extension
This commit is contained in:
@@ -2425,7 +2425,7 @@ public final class SWF implements SWFContainerItem, Timelined, Openable {
|
||||
if (ch instanceof ImageTag) {
|
||||
ImageTag image = (ImageTag) ch;
|
||||
ImageFormat format = image.getImageFormat();
|
||||
byte[] imageData = Helper.readStream(image.getImageData());
|
||||
byte[] imageData = Helper.readStream(image.getConvertedImageData());
|
||||
String base64ImgData = Helper.byteArrayToBase64String(imageData);
|
||||
fos.write(Utf8Helper.getBytes("var imageObj" + c + " = document.createElement(\"img\");\r\nimageObj" + c + ".src=\"data:image/" + format + ";base64," + base64ImgData + "\";\r\n"));
|
||||
}
|
||||
|
||||
@@ -119,7 +119,7 @@ public class SVGMorphShapeExporter extends DefaultSVGMorphShapeExporter {
|
||||
lastPatternId++;
|
||||
String patternId = "PatternID_" + id + "_" + lastPatternId;
|
||||
ImageFormat format = image.getImageFormat();
|
||||
byte[] imageData = Helper.readStream(image.getImageData());
|
||||
byte[] imageData = Helper.readStream(image.getConvertedImageData());
|
||||
String base64ImgData = Helper.byteArrayToBase64String(imageData);
|
||||
path.setAttribute("style", "fill:url(#" + patternId + ")");
|
||||
Element pattern = exporter.createElement("pattern");
|
||||
|
||||
@@ -120,7 +120,7 @@ public class SVGShapeExporter extends DefaultSVGShapeExporter {
|
||||
lastPatternId++;
|
||||
String patternId = "PatternID_" + id + "_" + lastPatternId;
|
||||
ImageFormat format = image.getImageFormat();
|
||||
byte[] imageData = Helper.readStream(image.getImageData());
|
||||
byte[] imageData = Helper.readStream(image.getConvertedImageData());
|
||||
String base64ImgData = Helper.byteArrayToBase64String(imageData);
|
||||
|
||||
Element pattern = exporter.createElement("pattern");
|
||||
|
||||
@@ -146,7 +146,7 @@ public class ImageImporter extends TagImporter {
|
||||
}
|
||||
|
||||
public void convertImage(ImageTag it, int tagType) throws IOException {
|
||||
importImage(it, Helper.readStream(it.getImageData()), tagType);
|
||||
importImage(it, Helper.readStream(it.getConvertedImageData()), tagType);
|
||||
}
|
||||
|
||||
public static int getImageTagType(String format) {
|
||||
|
||||
@@ -120,6 +120,26 @@ public abstract class ImageTag extends DrawableTag {
|
||||
return image;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets converted image data. Converted means for example DefineBitsJPEG3 including alpha channel - PNG images
|
||||
* @return
|
||||
*/
|
||||
public InputStream getConvertedImageData() {
|
||||
if (getImageFormat() == getOriginalImageFormat()) { //no need to convert
|
||||
InputStream is = getOriginalImageData();
|
||||
if (is != null) {
|
||||
return is;
|
||||
}
|
||||
}
|
||||
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
||||
ImageHelper.write(getImage().getBufferedImage(), getImageFormat(), baos);
|
||||
return new ByteArrayInputStream(baos.toByteArray());
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets original image data if available, if not, then converted. Original image data can be for example DefineBitsJPEG3 without transparency.
|
||||
* @return
|
||||
*/
|
||||
public InputStream getImageData() {
|
||||
InputStream is = getOriginalImageData();
|
||||
if (is != null) {
|
||||
|
||||
@@ -43,6 +43,7 @@ import com.jpexs.decompiler.flash.abc.types.traits.TraitMethodGetterSetter;
|
||||
import com.jpexs.decompiler.flash.amf.amf3.Amf3Value;
|
||||
import com.jpexs.decompiler.flash.amf.amf3.types.ObjectType;
|
||||
import com.jpexs.decompiler.flash.configuration.Configuration;
|
||||
import com.jpexs.decompiler.flash.exporters.ImageExporter;
|
||||
import com.jpexs.decompiler.flash.exporters.MovieExporter;
|
||||
import com.jpexs.decompiler.flash.exporters.SoundExporter;
|
||||
import com.jpexs.decompiler.flash.exporters.commonshape.Matrix;
|
||||
@@ -1819,7 +1820,7 @@ public class XFLConverter {
|
||||
}
|
||||
}
|
||||
|
||||
byte[] imageBytes = Helper.readStream(imageTag.getImageData());
|
||||
byte[] imageBytes = Helper.readStream(imageTag.getConvertedImageData());
|
||||
SerializableImage image = imageTag.getImageCached();
|
||||
ImageFormat format = imageTag.getImageFormat();
|
||||
String symbolFile = "bitmap" + symbol.getCharacterId() + imageTag.getImageFormat().getExtension();
|
||||
|
||||
Reference in New Issue
Block a user