Aspose.PSD für Java 24.5 - Versionshinweise
Contents
[
Hide
]
Diese Seite enthält Versionshinweise für Aspose.PSD für Java 24.5
Schlüssel | Zusammenfassung | Kategorie |
---|---|---|
PSDJAVA-617 | [AI-Format] Hinzufügen der Unterstützung für das Bearbeiten von AI-Dateien mit EPSF-Header | Funktion |
PSDJAVA-620 | Halbtransparente Verarbeitung falsch auf der Vorschau der PSD-Datei | Fehler |
PSDJAVA-621 | Rendern der Shape-Layer teilweise inkorrekt | Fehler |
PSDJAVA-622 | Ausnahme beim Speichern von PSD-Dateien mit einer Größe von mehr als 200 MB und großen Dimensionen (Es gibt ein Problem beim Speicherverbrauch) | Fehler |
PSDJAVA-623 | Fehler beim Speichern des Bildes als Ausnahme beim Speichern in PDF nach dem Update von 23.7 auf 24.3 | Fehler |
PSDJAVA-624 | Beheben des Problems in der Methode GetFontInfoRecords für chinesische Schriften | Fehler |
Öffentliche API-Änderungen
Hinzugefügte APIs:
- M:com.aspose.psd.fileformats.ai.AiLayerSection.getColorIndex
- M:com.aspose.psd.fileformats.ai.AiLayerSection.setColorIndex(int)
- M:com.aspose.psd.fileformats.ai.AiLayerSection.hasMultiLayerMasks
- M:com.aspose.psd.fileformats.ai.AiLayerSection.setMultiLayerMasks(boolean)
- M:com.aspose.psd.imageoptions.PsdOptions.getBackgroundContents
- M:com.aspose.psd.imageoptions.PsdOptions.setBackgroundContents(com.aspose.psd.fileformats.psd.rawcolor.RawColor)
Entfernte APIs:
- Keine
Beispiele für die Verwendung:
PSDJAVA-617. [AI-Format] Hinzufügen der Unterstützung für das Bearbeiten von AI-Dateien mit EPSF-Header
public static void main(String[] args) {
String sourceFile = "src/main/resources/example.ai";
String outputFilePath = "src/main/resources/example.png";
try (AiImage image = (AiImage) Image.load(sourceFile)) {
assertAreEqual(image.getLayers().length, 2);
assertAreEqual(image.getLayers()[0].hasMultiLayerMasks(), false);
assertAreEqual(image.getLayers()[0].getColorIndex(), -1);
assertAreEqual(image.getLayers()[1].hasMultiLayerMasks(), false);
assertAreEqual(image.getLayers()[1].getColorIndex(), -1);
image.save(outputFilePath, new PngOptions());
}
}
static void assertAreEqual(Object expected, Object actual) {
assertAreEqual(expected, actual, "Objekte sind nicht gleich.");
}
static void assertAreEqual(Object expected, Object actual, String message) {
if (!expected.equals(actual)) {
throw new IllegalArgumentException(message);
}
}
PSDJAVA-620. Halbtransparente Verarbeitung falsch auf der Vorschau der PSD-Datei
String sourceFile = "src/main/resources/frog_nosymb.psd";
String outputFile = "src/main/resources/frog_nosymb_backgroundcontents_output.psd";
try (PsdImage psdImage = (PsdImage) Image.load(sourceFile)) {
RawColor backgroundColor = new RawColor(PixelDataFormat.getRgb32Bpp());
int argbValue = 255 << 24 | 255 << 16 | 255 << 8 | 255;
backgroundColor.setAsInt(argbValue); // Weiß
PsdOptions psdOptions = new PsdOptions(psdImage);
psdOptions.setColorMode(ColorModes.Rgb);
psdOptions.setCompressionMethod(CompressionMethod.RLE);
psdOptions.setChannelsCount((short) 4);
psdOptions.setBackgroundContents(backgroundColor);
psdImage.save(outputFile, psdOptions);
}
PSDJAVA-621. Rendern der Shape-Layer teilweise inkorrekt
private static final int ImgToPsdRatio = 256 * 65535;
public static void main(String[] args) {
String sourceFile = "src/main/resources/ShapeLayerTest.psd";
String outputFile = "src/main/resources/ShapeLayerTest_output.psd";
try (PsdImage im = (PsdImage) Image.load(sourceFile)) {
ShapeLayer shapeLayer = (ShapeLayer) im.getLayers()[2];
IPath path = shapeLayer.getPath();
IPathShape[] pathShapes = path.getItems();
List<BezierKnotRecord> knotsList = new ArrayList<>();
for (IPathShape pathShape : pathShapes) {
BezierKnotRecord[] knots = pathShape.getItems();
Collections.addAll(knotsList, knots);
}
// Ändern der Ebeneneigenschaften
PathShape newShape = new PathShape();
BezierKnotRecord firstBezierKnotRecord = new BezierKnotRecord();
firstBezierKnotRecord.setLinked(true);
firstBezierKnotRecord.setPoints(new Point[]{
pointFToResourcePoint(
new PointF(100, 100),
shapeLayer.getContainer().getSize()),
pointFToResourcePoint(
new PointF(100, 100),
shapeLayer.getContainer().getSize()),
pointFToResourcePoint(
new PointF(100, 100),
shapeLayer.getContainer().getSize())});
BezierKnotRecord secondBezierKnotRecord = new BezierKnotRecord();
secondBezierKnotRecord.setLinked(true);
secondBezierKnotRecord.setPoints(new Point[]{
pointFToResourcePoint(
new PointF(50, 490),
shapeLayer.getContainer().getSize()),
pointFToResourcePoint(
new PointF(100, 490),
shapeLayer.getContainer().getSize()), // Ankerpunkt
pointFToResourcePoint(
new PointF(150, 490),
shapeLayer.getContainer().getSize())
});
BezierKnotRecord thirdBezierKnotRecord = new BezierKnotRecord();
thirdBezierKnotRecord.setLinked(true);
thirdBezierKnotRecord.setPoints(new Point[]{
pointFToResourcePoint(
new PointF(490, 150),
shapeLayer.getContainer().getSize()),
pointFToResourcePoint(
new PointF(490, 50),
shapeLayer.getContainer().getSize()),
pointFToResourcePoint(
new PointF(490, 20),
shapeLayer.getContainer().getSize()),
});
BezierKnotRecord[] bezierKnots = new BezierKnotRecord[]
{firstBezierKnotRecord, secondBezierKnotRecord, thirdBezierKnotRecord};
newShape.setItems(bezierKnots);
List<IPathShape> newShapes = new ArrayList<>(Arrays.asList(pathShapes));
newShapes.add(newShape);
IPathShape[] pathShapeNew = newShapes.toArray(new IPathShape[0]);
path.setItems(pathShapeNew);
shapeLayer.update();
im.save(outputFile, new PsdOptions());
}
try (PsdImage im = (PsdImage) Image.load(outputFile)) {
ShapeLayer shapeLayer = (ShapeLayer) im.getLayers()[2];
IPath path = shapeLayer.getPath();
IPathShape[] pathShapes = path.getItems();
List<BezierKnotRecord> knotsList = new ArrayList<>();
for (IPathShape pathShape : pathShapes) {
BezierKnotRecord[] knots = pathShape.getItems();
knotsList.addAll(Arrays.asList(knots));
}
assertAreEqual(3, pathShapes.length);
assertAreEqual(42, shapeLayer.getLeft());
assertAreEqual(14, shapeLayer.getTop());
assertAreEqual(1600, shapeLayer.getBounds().getWidth());
assertAreEqual(1086, shapeLayer.getBounds().getHeight());
}
}
static Point pointFToResourcePoint(PointF point, Size imageSize) {
return new Point(
(int) Math.round(point.getY() * (ImgToPsdRatio / imageSize.getHeight())),
(int) Math.round(point.getX() * (ImgToPsdRatio / imageSize.getWidth())));
}
static void assertAreEqual(Object expected, Object actual) {
assertAreEqual(expected, actual, "Objekte sind nicht gleich.");
}
static void assertAreEqual(Object expected, Object actual, String message) {
if (!expected.equals(actual)) {
throw new IllegalArgumentException(message);
}
}
PSDJAVA-622. Ausnahme beim Speichern von PSD-Dateien mit einer Größe von mehr als 200 MB und großen Dimensionen (Es gibt ein Problem beim Speicherverbrauch)
String sourceFile = "src/main/resources/bigfile.psd";
String outputFile = "src/main/resources/output_raw.psd";
PsdLoadOptions loadOptions = new PsdLoadOptions();
loadOptions.setLoadEffectsResource(true);
loadOptions.setUseDiskForLoadEffectsResource(true);
try (PsdImage psdImage = (PsdImage) Image.load(sourceFile, loadOptions)) {
PsdOptions psdOptions = new PsdOptions();
psdOptions.setCompressionMethod(CompressionMethod.RLE);
// Hier sollte kein Fehler auftreten
psdImage.save(outputFile, psdOptions);
}
PSDJAVA-623. Fehler beim Speichern des Bildes als Ausnahme beim Speichern in PDF nach dem Update von 23.7 auf 24.3
String sourceFile = "src/main/resources/CVFlor.psd";
String outputFile = "src/main/resources/_export.pdf";
try (PsdImage psdImage = (PsdImage) Image.load(sourceFile)) {
PdfOptions saveOptions = new PdfOptions();
saveOptions.setPdfCoreOptions(new PdfCoreOptions());
psdImage.save(outputFile, saveOptions);
}
PSDJAVA-624. Beheben des Problems in der Methode GetFontInfoRecords für chinesische Schriften
String fontFolder = "src/main/resources/Font";
String sourceFile = "src/main/resources/bd-worlds-best-pink.psd";
PsdLoadOptions psdLoadOptions = new PsdLoadOptions();
psdLoadOptions.setLoadEffectsResource(true);
psdLoadOptions.setAllowWarpRepaint(true);
try {
FontSettings.setFontsFolders(new String[]{fontFolder}, true);
try (PsdImage image = (PsdImage) PsdImage.load(sourceFile, psdLoadOptions)) {
for (Layer layer : image.getLayers()) {
if (layer instanceof TextLayer) {
TextLayer textLayer = (TextLayer) layer;
if ("best".equals(textLayer.getText())) {
// Ohne diese Korrektur hier wird es eine Ausnahme geben wegen der chinesischen Schriftart
textLayer.updateText("ERFOLG");
}
}
}
}
} finally {
FontSettings.reset();
}