Aspose.PSD dla Javy 23.6 - Notatki dotyczące wydania

Klucz Podsumowanie Kategoria
PSDJAVA-479 Refaktoryzacja interfejsu API TimeLine Usprawnienie
PSDJAVA-480 Usunięcie artefaktów podczas renderowania deformacji Usprawnienie
PSDJAVA-481 Optymalizacja renderowania deformacji Usprawnienie
PSDJAVA-482 Obsługa warstwy dostosowania progów Funkcja
PSDJAVA-483 Obsługa warstwy dostosowania selektywnego koloru Funkcja
PSDJAVA-484 Możliwość eksportu TimeLine PSD do pliku Animated Gif Funkcja
PSDJAVA-485 Dodanie obsługi warstwy tekstowej bez prostokątnych ramek Funkcja
PSDJAVA-486 Obsługa warstwy kształtu Funkcja
PSDJAVA-487 Zastąpienie obrazu w inteligentnym obiekcie nie jest aktualizowane Błąd
PSDJAVA-488 Plik PSD nie może być zapisany jako PSD ze względu na następujący wyjątek: Przestrzenie Rgb i Lab nie mogą zawierać mniej niż 3 kanałów i więcej niż 4 kanałów Błąd
PSDJAVA-489 Centrowanie tekstu jest utracone podczas otwierania warstwy tekstowej w trybie edycji Photoshopa Błąd
PSDJAVA-490 Wyjątek z odwołaniem do null podczas zapisywania pliku PSD Błąd
PSDJAVA-491 Wyjątek podczas ładowania warstwy kształtu: Punkty dla granic wektora nie są jeszcze obsługiwane Błąd
PSDJAVA-492 Wyjątek podczas ładowania zasobu VogkResource: Punkty są zapisywane jako DoubleStructures, odczytujemy jako UnitStructures Błąd
PSDJAVA-493 LayerType warstwy kształtu jest puste Błąd

Zmiany w Publicznych API

Dodane API:

  • M:com.aspose.psd.PixelDataFormat.getRgba64Bpp
  • F:com.aspose.psd.fileformats.psd.PsdImage.horizontalResolution
  • M:com.aspose.psd.fileformats.psd.PsdImage.addSelectiveColorAdjustmentLayer
  • M:com.aspose.psd.fileformats.psd.PsdImage.addVibranceAdjustmentLayer
  • M:com.aspose.psd.fileformats.psd.PsdImage.addThresholdAdjustmentLayer
  • M:com.aspose.psd.fileformats.psd.PsdImage.getTimeline
  • M:com.aspose.psd.fileformats.psd.layers.fillsettings.GradientColorPoint.getColorMode
  • M:com.aspose.psd.fileformats.psd.layers.fillsettings.GradientColorPoint.setColorMode(short)
  • M:com.aspose.psd.fileformats.psd.layers.fillsettings.IPatternFillSettings.getAngle
  • M:com.aspose.psd.fileformats.psd.layers.fillsettings.IPatternFillSettings.setAngle(double)
  • M:com.aspose.psd.fileformats.psd.layers.fillsettings.PatternFillSettings.getAngle
  • M:com.aspose.psd.fileformats.psd.rawcolor.RawColor.#ctor(com.aspose.psd.PixelDataFormat,short)
  • M:com.aspose.psd.fileformats.psd.rawcolor.RawColor.getColorMode
  • M:com.aspose.psd.fileformats.psd.rawcolor.RawColor.setColorMode(short)
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.ShmdResource.getSubResources
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.vectorpaths.VectorShapeBoundingBox.getPointsUnitType
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.vectorpaths.VectorShapeBoundingBox.setPointsUnitType(int)
  • T:com.aspose.psd.fileformats.psd.layers.text.rendering.TextOrientation
  • F:com.aspose.psd.fileformats.psd.layers.text.rendering.TextOrientation.Horizontal
  • F:com.aspose.psd.fileformats.psd.layers.text.rendering.TextOrientation.Vertical
  • M:com.aspose.psd.imageoptions.PsdOptions.isColorModeSet
  • T:com.aspose.psd.fileformats.psd.layers.animation.Frame
  • M:com.aspose.psd.fileformats.psd.layers.animation.Frame.#ctor

Usunięte API:

  • M:com.aspose.psd.fileformats.psd.layers.layerresources.Lr16Resource.getKey
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.Lr16Resource.getLayers
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.Lr16Resource.getLength

Przykłady użycia:

PSDJAVA-482. Obsługa warstwy dostosowania progów

PSDJAVA-483. Obsługa warstwy dostosowania selektywnego koloru

PSDJAVA-484. Możliwość eksportu TimeLine PSD do pliku Animated Gif

PSDJAVA-487. Zastąpienie obrazu w inteligentnym obiekcie nie jest aktualizowane

PSDJAVA-479. Refaktoryzacja interfejsu TimeLine

PSDJAVA-488. Plik PSD nie może być zapisany jako PSD ze względu na wyjątek: Przestrzenie Rgb i Lab nie mogą zawierać mniej niż 3 kanałów i więcej niż 4 kanałów

PSDJAVA-480. Usunięcie artefaktów podczas renderowania deformacji

PSDJAVA-481. Optymalizacja renderowania deformacji

PSDJAVA-489. Centrowanie tekstu jest utracone podczas otwierania warstwy tekstowej w trybie edycji Photoshopa

PSDJAVA-485. Dodanie obsługi warstwy tekstowej bez prostokątnych ramek

PSDJAVA-491. Wyjątek podczas ładowania warstwy kształtu: Punkty dla granic wektora nie są jeszcze obsługiwane

PSDJAVA-492. Wyjątek podczas ładowania zasobu: Punkty są zapisywane jako DoubleStructures, odczytujemy jako UnitStructures

PSDJAVA-493. LayerType warstwy kształtu jest puste

PSDJAVA-486. Obsługa warstwy kształtu

PSDJAVA-486. Obsługa warstwy kształtu

    String srcFile = "ShapeLayerTest.psd";
    String outFile = "ShapeLayerTest-out.psd";

    PsdLoadOptions psdLoadOptions = new PsdLoadOptions();
    psdLoadOptions.setLoadEffectsResource(true);
    try (PsdImage image = (PsdImage) Image.load(srcFile, psdLoadOptions)) {
        ShapeLayer shapeLayer = (ShapeLayer)image.getLayers()[1];
        IPath layerPath = shapeLayer.getPath();

        IPathShape[] pathShapeSource = layerPath.getItems();
        List<IPathShape> pathShapesDest = new List<IPathShape>(pathShapeSource);

        // Source file contains 2 figures. Remove the seconds one.
        pathShapesDest.removeAt(1);

          layerPath.setItems(pathShapesDest.toArray(new IPathShape[0]));

        shapeLayer.update();

        image.save(outFile);
    } catch (Exception e) {
        e.printStackTrace();
    }

PSDJAVA-487. Zastąpienie obrazu w inteligentnym obiekcie nie jest aktualizowane

    String sourceFile = "neiyi.psd";
    String changeFile = "bg6.png";

    String exportFile = "export.psd";
    String exportImgBefore = "export_before.png";
    String exportImgAfter = "export_after.png";

    try (PsdImage psdImage = (PsdImage) Image.load(sourceFile)) {
        for (Layer layer : psdImage.getLayers()) {
            if (layer instanceof SmartObjectLayer && layer.getName().equals("sucai1")) {
                SmartObjectLayer smartObjectLayer = (SmartObjectLayer) layer;
                smartObjectLayer.replaceContents(changeFile);
                smartObjectLayer.embedLinked();

                break;
            }
        }

        psdImage.save(exportFile, new PsdOptions());
        psdImage.save(exportImgBefore, new PngOptions());
    }

    try (PsdImage psdImage = (PsdImage) Image.load(exportFile)) {
    {
        psdImage.save(exportImgAfter, new PngOptions());
    }

PSDJAVA-488. Plik PSD nie może być zapisany jako PSD ze względu na wyjątek: Przestrzenie Rgb i Lab nie mogą zawierać mniej niż 3 kanałów i więcej niż 4 kanałów

    String sourceFile = "Ex3_B1H1_Dave_Arthur.psd";
    String exportPath = "export.psd";

    try (PsdImage image = (PsdImage) Image.load(sourceFile)) {
        // It takes default saving options from header but header has wrong number of channels.
        try {
            image.save(exportPath);
        } catch (PsdImageException ex) {
            if (ex.getMessage() != "Rgb and Lab modes can not contain less than 3 channels and more than 4 channels") {
                throw new Exception("It is wrong PsdImageException");
            }
        }

        // Without error
        image.save(exportPath, new PsdOptions());
    }

PSDJAVA-489. Centrowanie tekstu jest utracone podczas otwierania warstwy tekstowej w trybie edycji Photoshopa

public static void main(String[] args) throws Exception {
    String sourceFile = "input-test.psd";
    String outputFile = "output.psd";

    try (PsdImage psdImage = (PsdImage) Image.load(sourceFile)) {
        IText textData = ((TextLayer) psdImage.getLayers()[2]).getTextData();

        ITextStyle defaultStyle = textData.getItems()[0].getStyle();
        ITextParagraph defaultParagraph = textData.getItems()[0].getParagraph();
        defaultParagraph.setJustification(JustificationMode.Center);
        textData.removePortion(0);

        addTextPortion("Lorem Ipsum", textData, defaultStyle, defaultParagraph);
        addTextPortion("\r", textData, defaultStyle, defaultParagraph);
        addTextPortion(
                "Lorem ipsum is placeholder text commonly used in the graphic, print, and publishing industries for previewing layouts and visual mockups.",
                textData,
                defaultStyle,
                defaultParagraph);

        textData.updateLayerData();

        psdImage.save(outputFile);
    } catch (Exception e) {
        e.printStackTrace();
    }

    try (PsdImage psdImage = (PsdImage) Image.load(sourceFile)) {
        // Get justification value from Txt2Resource
        Txt2Resource txt2Resource = (Txt2Resource) psdImage.getGlobalLayerResources()[1];

        String textData = Encoding.getEncoding("Windows-1251").getString(txt2Resource.getData());
        String search = ") /5 << /0 "; // specific character set to find justification value in this file.

        // Find last value of justification mode in text paragraph features
        int index = textData.lastIndexOf(search);
        String lastJustificationResult = textData.substring(index + search.length(), index + search.length() + 1);
        int justificationValue = Integer.parseInt(lastJustificationResult);

        // Check fix of Justification
        if (JustificationMode.Center != justificationValue) {
            throw new Exception("Incorrect Justification value.");
        }
    }
}

static void addTextPortion (String text, IText textData, ITextStyle style, ITextParagraph paragraph)
{
    ITextPortion newPortion = textData.producePortion();
    newPortion.getStyle().apply(style);
    newPortion.getParagraph().apply(paragraph);
    newPortion.setText(text);
    textData.addPortion(newPortion);
}

PSDJAVA-490. Wyjątek z odwołaniem do null podczas zapisywania pliku PSD

    String sourceFile = "test.psd";
    String outputFile = "output.psd";

     try (PsdImage pfile = (PsdImage) Image.load(sourceFile)) {
        TextLayer textLayer = (TextLayer)pfile.getLayers()[1];
        textLayer.updateText("save");

        pfile.save(outputFile);
    } catch (Exception e) {
        e.printStackTrace();
    }

PSDJAVA-485. Dodanie obsługi warstwy tekstowej bez prostokątnych ramek

    String sourceFile = "textNoBounds.psd";
    String outputFile = "output.psd";

    try (PsdImage psdImage = (PsdImage) Image.load(sourceFile)) {
        TextLayer noBoundsTextLayer = (TextLayer) psdImage.getLayers()[1];
        TextLayer boundsTextLayer = (TextLayer) psdImage.getLayers()[2];

        boundsTextLayer.setTextBoundBox(RectangleF.getEmpty());
        noBoundsTextLayer.setTextBoundBox(new RectangleF(0, 0, 200, 100));

        TextLayer newTextLayerNoTextBox = psdImage.addTextLayer(
                "New text - no text box",
                new Rectangle(10, 300, 0, 0)
        );

        TextLayer newTextLayerWithTextBox = psdImage.addTextLayer(
                "New text - with text box",
                new Rectangle(10, 400, 400, 100)
        );

        boundsTextLayer.getTextData().updateLayerData();
        noBoundsTextLayer.getTextData().updateLayerData();

        psdImage.save(outputFile);
    } catch (Exception e) {
        e.printStackTrace();
    }