دستاوردهای نسخه 24.5 Aspose.PSD برای جاوا
Contents
[
Hide
]
این صفحه شامل دستاوردهای نسخه 24.5 Aspose.PSD برای جاوا است.
کلید | خلاصه | دستهبندی |
---|---|---|
PSDJAVA-617 | اضافه کردن پشتیبانی برای پروندههای AI دارای هدر EPSF | ویژگی |
PSDJAVA-620 | پیشنمایش نادرست شفافیت نیمه روی پرونده psd | اشکال |
PSDJAVA-621 | رندرینگ لایه شکل جزئیاً نادرست | اشکال |
PSDJAVA-622 | خطا هنگام ذخیره کردن فایلهای PSD با اندازه بیشتر از 200 مگابایت و ابعاد بزرگ (مشکلی در استفاده از حافظه) | اشکال |
PSDJAVA-623 | خطا در ذخیرهسازی تصویر هنگام ذخیره کردن در قالب PDF بعد از بهروزرسانی از 23.7 به 24.3 | اشکال |
PSDJAVA-624 | رفع مشکل در روش GetFontInfoRecords برای فونتهای چینی | اشکال |
تغییرات در API عمومی
APIهای اضافه شده:
- 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)
APIهای حذف شده:
- هیچکدام
نمونههای استفاده:
PSDJAVA-617. اضافه کردن پشتیبانی برای پروندههای AI دارای هدر EPSF
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, "Objects are not equal.");
}
static void assertAreEqual(Object expected, Object actual, String message) {
if (!expected.equals(actual)) {
throw new IllegalArgumentException(message);
}
}
PSDJAVA-620. پیشنمایش نادرست شفافیت نیمه روی پرونده psd
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); // سفید
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. رندرینگ لایه شکل جزئیاً نادرست
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);
}
// تغییر ویژگیهای لایه
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()), // نقطه مهم
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, "Objects are not equal.");
}
static void assertAreEqual(Object expected, Object actual, String message) {
if (!expected.equals(actual)) {
throw new IllegalArgumentException(message);
}
}
PSDJAVA-622. خطایی هنگام ذخیره کردن فایلهای PSD با اندازه بیشتر از 200 MB و ابعاد بزرگ (مشکلی در استفاده از حافظه)
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);
// در اینجا باید هیچ خطا وجود نداشته باشد
psdImage.save(outputFile, psdOptions);
}
PSDJAVA-623. خطای بازیابی تصویر هنگام ذخیره کردن به PDF پس از بهروزرسانی از 23.7 به 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. رفع مشکل در روش GetFontInfoRecords برای فونتهای چینی
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())) {
// بدون این تغییر، اینجا خطا خواهد بود به دلیل فونت چینی.
textLayer.updateText("موفقیت");
}
}
}
}
} finally {
FontSettings.reset();
}