Aspose.PSD pro Java 23.6 - Release Notes

Klíč Shrnutí Kategorie
PSDJAVA-479 Refaktorovat API s časovou osou Vylepšení
PSDJAVA-480 Odebrat artefakty při vykreslování deformace Vylepšení
PSDJAVA-481 Optimalizace vykreslování deformace Vylepšení
PSDJAVA-482 Podpora vrstvy přizpůsobení prahu Funkce
PSDJAVA-483 Podpora vrstvy selektivní korekce barev Funkce
PSDJAVA-484 Schopnost exportovat časovou osu PSD do souboru s animovaným gifem Funkce
PSDJAVA-485 Přidání podpory pro Textovou vrstvu bez obdélníkových hranic Funkce
PSDJAVA-486 Podpora Vrstvy tvaru Funkce
PSDJAVA-487 Nahrazení obrázku ve Smart objektu neaktualizuje Chyba
PSDJAVA-488 Soubor PSD nelze uložit jako PSD s následující výjimkou: Režimy Rgb a Lab nemohou obsahovat méně než 3 kanály a více než 4 kanály Chyba
PSDJAVA-489 Zarovnání textu se ztrácí při otevření Vrstvy s textem v editačním režimu Photoshopu Chyba
PSDJAVA-490 Výjimka s nulovým odkazem při ukládání souboru PSD Chyba
PSDJAVA-491 Výjimka při načítání Vrstvy tvaru: Body pro původní mez obrázkem nejsou podporovány Chyba
PSDJAVA-492 Výjimka při načítání VogkResource: Body jsou uloženy jako DoubleStructures, my čteme jako UnitStructures Chyba
PSDJAVA-493 Typ vrstvy Vrstvy tvaru je prázdný Chyba

Změny ve veřejném API

Přidaná 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
  • M:com.aspose.psd.fileformats.psd.layers.animation.Frame.getDelay
  • M:com.aspose.psd.fileformats.psd.layers.animation.Frame.getDisposalMethod
  • M:com.aspose.psd.fileformats.psd.layers.animation.Frame.getFrGA
  • M:com.aspose.psd.fileformats.psd.layers.animation.Frame.getId
  • M:com.aspose.psd.fileformats.psd.layers.animation.Frame.getLayerStates
  • M:com.aspose.psd.fileformats.psd.layers.animation.Frame.setDelay(int)
  • M:com.aspose.psd.fileformats.psd.layers.animation.Frame.setDisposalMethod(int)
  • M:com.aspose.psd.fileformats.psd.layers.animation.Frame.setFrGA(double)
  • M:com.aspose.psd.fileformats.psd.layers.animation.Frame.setId(int)
  • M:com.aspose.psd.fileformats.psd.layers.animation.Frame.setLayerStates(com.aspose.psd.fileformats.psd.layers.animation.LayerState[])
  • T:com.aspose.psd.fileformats.psd.layers.animation.FrameDisposalMethod
  • F:com.aspose.psd.fileformats.psd.layers.animation.FrameDisposalMethod.Dispose
  • F:com.aspose.psd.fileformats.psd.layers.animation.FrameDisposalMethod.DoNotDispose
  • F:com.aspose.psd.fileformats.psd.layers.animation.FrameDisposalMethod.Automatic
  • T:com.aspose.psd.fileformats.psd.layers.animation.LayerState
  • M:com.aspose.psd.fileformats.psd.layers.animation.LayerState.#ctor
  • M:com.aspose.psd.fileformats.psd.layers.animation.LayerState.getBlendMode
  • M:com.aspose.psd.fileformats.psd.layers.animation.LayerState.getEnabled
  • M:com.aspose.psd.fileformats.psd.layers.animation.LayerState.getFillOpacity
  • M:com.aspose.psd.fileformats.psd.layers.animation.LayerState.getHorizontalFXRf
  • M:com.aspose.psd.fileformats.psd.layers.animation.LayerState.getId
  • M:com.aspose.psd.fileformats.psd.layers.animation.LayerState.getOpacity
  • M:com.aspose.psd.fileformats.psd.layers.animation.LayerState.getPositionOffset
  • M:com.aspose.psd.fileformats.psd.layers.animation.LayerState.getStateEffects
  • M:com.aspose.psd.fileformats.psd.layers.animation.LayerState.getVerticalFXRf
  • M:com.aspose.psd.fileformats.psd.layers.animation.LayerState.setBlendMode(long)
  • M:com.aspose.psd.fileformats.psd.layers.animation.LayerState.setEnabled(boolean)
  • M:com.aspose.psd.fileformats.psd.layers.animation.LayerState.setFillOpacity(double)
  • M:com.aspose.psd.fileformats.psd.layers.animation.LayerState.setHorizontalFXRf(double)
  • M:com.aspose.psd.fileformats.psd.layers.animation.LayerState.setId(int)
  • M:com.aspose.psd.fileformats.psd.layers.animation.LayerState.setOpacity(double)
  • M:com.aspose.psd.fileformats.psd.layers.animation.LayerState.setPositionOffset(com.aspose.psd.Point)
  • M:com.aspose.psd.fileformats.psd.layers.animation.LayerState.setVerticalFXRf(double)
  • T:com.aspose.psd.fileformats.psd.layers.animation.Timeline
  • M:com.aspose.psd.fileformats.psd.layers.animation.Timeline.#ctor
  • M:com.aspose.psd.fileformats.psd.layers.animation.Timeline.getAFSt
  • M:com.aspose.psd.fileformats.psd.layers.animation.Timeline.getActiveFrameIndex
  • M:com.aspose.psd.fileformats.psd.layers.animation.Timeline.getFrame(int)
  • M:com.aspose.psd.fileformats.psd.layers.animation.Timeline.getFrames
  • M:com.aspose.psd.fileformats.psd.layers.animation.Timeline.getFramesList
  • M:com.aspose.psd.fileformats.psd.layers.animation.Timeline.getFsID
  • M:com.aspose.psd.fileformats.psd.layers.animation.Timeline.getLoopesCount
  • M:com.aspose.psd.fileformats.psd.layers.animation.Timeline.getPsdImage
  • M:com.aspose.psd.fileformats.psd.layers.animation.Timeline.save(java.lang.String,com.aspose.psd.ImageOptionsBase)
  • M:com.aspose.psd.fileformats.psd.layers.animation.Timeline.save(com.aspose.psd.system.io.Stream,com.aspose.psd.ImageOptionsBase)
  • M:com.aspose.psd.fileformats.psd.layers.animation.Timeline.setAFSt(int)
  • M:com.aspose.psd.fileformats.psd.layers.animation.Timeline.setFrames(com.aspose.psd.fileformats.psd.layers.animation.Frame[])
  • M:com.aspose.psd.fileformats.psd.layers.animation.Timeline.setFsID(int)
  • M:com.aspose.psd.fileformats.psd.layers.animation.Timeline.setLoopesCount(int)
  • M:com.aspose.psd.fileformats.psd.layers.animation.Timeline.setPsdImage(com.aspose.psd.fileformats.psd.PsdImage)
  • M:com.aspose.psd.fileformats.psd.layers.animation.Timeline.switchActiveFrame(int)
  • T:com.aspose.psd.fileformats.psd.layers.animation.LayerStateEffects
  • M:com.aspose.psd.fileformats.psd.layers.animation.LayerStateEffects.addColorOverlay
  • M:com.aspose.psd.fileformats.psd.layers.animation.LayerStateEffects.addDropShadow
  • M:com.aspose.psd.fileformats.psd.layers.animation.LayerStateEffects.addGradientOverlay
  • M:com.aspose.psd.fileformats.psd.layers.animation.LayerStateEffects.addInnerShadow
  • M:com.aspose.psd.fileformats.psd.layers.animation.LayerStateEffects.addOuterGlow
  • M:com.aspose.psd.fileformats.psd.layers.animation.LayerStateEffects.addOrReplaceEffect(int)
  • M:com.aspose.psd.fileformats.psd.layers.animation.LayerStateEffects.addPatternOverlay
  • M:com.aspose.psd.fileformats.psd.layers.animation.LayerStateEffects.addStroke(int)
  • M:com.aspose.psd.fileformats.psd.layers.animation.LayerStateEffects.getEffects
  • M:com.aspose.psd.fileformats.psd.layers.animation.LayerStateEffects.getLayerStyleFX
  • M:com.aspose.psd.fileformats.psd.layers.animation.LayerStateEffects.getScale
  • M:com.aspose.psd.fileformats.psd.layers.animation.LayerStateEffects.setScale(double)
  • M:com.aspose.psd.fileformats.psd.layers.animation.LayerStateEffects.setVisible(boolean)
  • M:com.aspose.psd.fileformats.psd.layers.animation.LayerStateEffects.clearLayerStyle
  • M:com.aspose.psd.fileformats.psd.layers.animation.LayerStateEffects.removeEffectAt(int)
  • M:com.aspose.psd.fileformats.psd.layers.animation.LayerStateEffects.isVisible
  • T:com.aspose.psd.fileformats.psd.layers.layereffects.OuterGlowEffect
  • M:com.aspose.psd.fileformats.psd.layers.layereffects.OuterGlowEffect.getBlendMode
  • M:com.aspose.psd.fileformats.psd.layers.layereffects.OuterGlowEffect.getEffectType
  • M:com.aspose.psd.fileformats.psd.layers.layereffects.OuterGlowEffect.getFillColor
  • M:com.aspose.psd.fileformats.psd.layers.layereffects.OuterGlowEffect.getIntensity
  • M:com.aspose.psd.fileformats.psd.layers.layereffects.OuterGlowEffect.getJitter
  • M:com.aspose.psd.fileformats.psd.layers.layereffects.OuterGlowEffect.getNoise
  • M:com.aspose.psd.fileformats.psd.layers.layereffects.OuterGlowEffect.getOpacity
  • M:com.aspose.psd.fileformats.psd.layers.layereffects.OuterGlowEffect.getRange
  • M:com.aspose.psd.fileformats.psd.layers.layereffects.OuterGlowEffect.getSpread
  • M:com.aspose.psd.fileformats.psd.layers.layereffects.OuterGlowEffect.getSize
  • M:com.aspose.psd.fileformats.psd.layers.layereffects.OuterGlowEffect.isAntiAliasing
  • M:com.aspose.psd.fileformats.psd.layers.layereffects.OuterGlowEffect.isSoftBlend
  • M:com.aspose.psd.fileformats.psd.layers.layereffects.OuterGlowEffect.isVisible
  • M:com.aspose.psd.fileformats.psd.layers.layereffects.OuterGlowEffect.setAntiAliasing(boolean)
  • M:com.aspose.psd.fileformats.psd.layers.layereffects.OuterGlowEffect.setBlendMode(long)
  • M:com.aspose.psd.fileformats.psd.layers.layereffects.OuterGlowEffect.setFillColor(com.aspose.psd.fileformats.psd.layers.fillsettings.IFillSettings)
  • M:com.aspose.psd.fileformats.psd.layers.layereffects.OuterGlowEffect.setIntensity(int)
  • M:com.aspose.psd.fileformats.psd.layers.layereffects.OuterGlowEffect.setJitter(int)
  • M:com.aspose.psd.fileformats.psd.layers.layereffects.OuterGlowEffect.setNoise(int)
  • M:com.aspose.psd.fileformats.psd.layers.layereffects.OuterGlowEffect.setOpacity(byte)
  • M:com.aspose.psd.fileformats.psd.layers.layereffects.OuterGlowEffect.setRange(int)
  • M:com.aspose.psd.fileformats.psd.layers.layereffects.OuterGlowEffect.setSpread(int)
  • M:com.aspose.psd.fileformats.psd.layers.layereffects.OuterGlowEffect.setSoftBlend(boolean)
  • M:com.aspose.psd.fileformats.psd.layers.layereffects.OuterGlowEffect.setSize(int)
  • M:com.aspose.psd.fileformats.psd.layers.layereffects.OuterGlowEffect.setVisible(boolean)
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.Lr32Resource.#ctor
  • T:com.aspose.psd.fileformats.psd.layers.layerresources.LrXxResource
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.LrXxResource.#ctor
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.LrXxResource.getKey
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.LrXxResource.getLayers
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.LrXxResource.getLength
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.LrXxResource.getLength(int)
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.LrXxResource.getPsdVersion
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.LrXxResource.getSignature
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.LrXxResource.save(com.aspose.psd.StreamContainer,int)
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.LrXxResource.setLayers(com.aspose.psd.fileformats.psd.layers.Layer[])

Odstraněná 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
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.Lr16Resource.getPsdVersion
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.Lr16Resource.getSignature
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.Lr16Resource.save(com.aspose.psd.StreamContainer,int)
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.Lr16Resource.setLayers(com.aspose.psd.fileformats.psd.layers.Layer[])
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.Lr32Resource.#ctor(int)
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.Lr32Resource.getKey
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.Lr32Resource.getLayers
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.Lr32Resource.getLength
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.Lr32Resource.getPsdVersion
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.Lr32Resource.getSignature
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.Lr32Resource.save(com.aspose.psd.StreamContainer,int)
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.Lr32Resource.setLayers(com.aspose.psd.fileformats.psd.layers.Layer[])

Příklady použití:

PSDJAVA-482. Podpora vrstvy přizpůsobení prahu

public static void main(String[] args) throws Exception {
    String souborZdrojeSPrahem = "flowers_threshold_source.psd";
    String výstupníPsdSPrahem = "flowers_threshold_output.psd";
    String výstupníPngSPrahem = "flowers_threshold_output.png";

    String souborBezPrahu = "flowers_source.psd";
    String výstupníPsdBezPrahu = "flowers_output.psd";
    String výstupníPngBezPrahu = "flowers_output.png";

    // Získejte, zkontrolujte a změňte vrstvu úpravy prahu ze snímku.
    try (PsdImage image = (PsdImage) Image.load(souborZdrojeSPrahem)) {
        for (Layer vrstva : image.getLayers()) {
            if (vrstva instanceof ThresholdLayer) {
                // Získejte vrstvu úpravy prahu.
                ThresholdLayer vrstvaPrah = (ThresholdLayer) vrstva;
                short úroveň = vrstvaPrah.getLevel();

                // Ověřte parametry vrstvy.
                assertAreEqual(úroveň, (short) 115);

                // Nastavte parametry vrstvy.
                vrstvaPrah.setLevel((short) 50);

                image.save(výstupníPsdSPrahem);
                image.save(výstupníPngSPrahem, new PngOptions());
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }

    // Přidejte a nastavte vrstvu úpravy prahu do snímku.
    try (PsdImage image = (PsdImage) Image.load(souborBezPrahu)) {
        // Přidejte vrstvu úpravy prahu.
        ThresholdLayer vrstvaPrah = image.addThresholdAdjustmentLayer();

        // Nastavte parametry vrstvy.
        vrstvaPrah.setLevel((short) 115);

        image.save(výstupníPsdBezPrahu);
        image.save(výstupníPngBezPrahu, new PngOptions());
    } catch (Exception e) {
        e.printStackTrace();
    }
}

PSDJAVA-483. Podpora vrstvy selektivní korekce barev

public static void main(String[] args) throws Exception {
    String souborSeSelektivníKorekcíBarev = "houses_selectiveColor_source.psd";
    String výstupníPsdSeSelektivníKorekcíBarev = "houses_selectiveColor_output.psd";
    String výstupníPngSeSelektivníKorekcíBarev = "houses_selectiveColor_output.png";

    String souborBezSelektivníKorekceBarev = "houses_source.psd";
    String výstupníPsdBezSelektivníKorekceBarev = "houses_output.psd";
    String výstupníPngBezSelektivníKorekceBarev = "houses_output.png";

    // Získejte, zkontrolujte a změňte vrstvu selektivní korekce barev ze snímku.
    try (PsdImage image = (PsdImage) Image.load(souborSeSelektivníKorekcíBarev)) {
        for (Layer vrstva : image.getLayers()) {
            if (vrstva instanceof SelectiveColorLayer) {
                // Získejte vrstvu selektivní korekce barev.
                SelectiveColorLayer vrstvaSelektivníchBarev = (SelectiveColorLayer) vrstva;
                CmykCorrection korekceČervené = vrstvaSelektivníchBarev.getCmykCorrection(SelectiveColorsTypes.Reds);
                CmykCorrection korekceŽluté = vrstvaSelektivníchBarev.getCmykCorrection(SelectiveColorsTypes.Yellows);
                CmykCorrection korekceZelené = vrstvaSelektivníchBarev.getCmykCorrection(SelectiveColorsTypes.Greens);
                CmykCorrection korekceModré = vrstvaSelektivníchBarev.getCmykCorrection(SelectiveColorsTypes.Blues);

                // Ověřte parametry vrstvy.
                assertAreEqual(CorrectionMethodTypes.Absolute, vrstvaSelektivníchBarev.getCorrectionMethod());

                assertAreEqual(korekceČervené.getCyan(), (short) -31);
                assertAreEqual(korekceČervené.getMagenta(), (short) -12);
                assertAreEqual(korekceČervené.getYellow(), (short) 27);
                assertAreEqual(korekceČervené.getBlack(), (short) 33);

                assertAreEqual(korekceŽluté.getCyan(), (short) -22);
                assertAreEqual(korekceŽluté.getMagenta(), (short) -19);
                assertAreEqual(korekceŽluté.getYellow(), (short) 8);
                assertAreEqual(korekceŽluté.getBlack(), (short) 0);

                assertAreEqual(korekceZelené.getCyan(), (short) 0);
                assertAreEqual(korekceZelené.getMagenta(), (short) 0);
                assertAreEqual(korekceZelené.getYellow(), (short) 0);
                assertAreEqual(korekceZelené.getBlack(), (short) 0);

                assertAreEqual(korekceModré.getCyan(), (short) 58);
                assertAreEqual(korekceModré.getMagenta(), (short) 18);
                assertAreEqual(korekceModré.getYellow(), (short) 1);
                assertAreEqual(korekceModré.getBlack(), (short) 7);

                // Změňte parametry vrstvy.
                vrstvaSelektivníchBarev.setCorrectionMethod(CorrectionMethodTypes.Relative);
                CmykCorrection korekceČervenéNastavené = new CmykCorrection();
                korekceČervenéNastavené.setCyan((short) 12);
                korekceČervenéNastavené.setMagenta((short) -20);
                korekceČervenéNastavené.setYellow((short) 10);
                korekceČervenéNastavené.setBlack((short) -15);
                vrstvaSelektivníchBarev.setCmykCorrection(SelectiveColorsTypes.Reds, korekceČervenéNastavené);

                CmykCorrection korekceBílé = new CmykCorrection();
                korekceBílé.setCyan((short) 15);
                korekceBílé.setMagenta((short) 20);
                korekceBílé.setYellow((short) -75);
                korekceBílé.setBlack((short) 42);
                vrstvaSelektivníchBarev.setCmykCorrection(SelectiveColorsTypes.Whites, korekceBílé);

                image.save(výstupníPsdSeSelektivníKorekcíBarev);
                image.save(výstupníPngSeSelektivníKorekcíBarev, new PngOptions());
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }

    // Přidejte a nastavte vrstvu selektivní korekce barev do snímku.
    try (PsdImage image = (PsdImage) Image.load(souborBezSelektivníKorekceBarev)) {
        // Přidejte vrstvu selektivní korekce barev.
        SelectiveColorLayer vrstvaSelektivníchBarev = image.addSelectiveColorAdjustmentLayer();

        // Nastavte parametry vrstvy.
        vrstvaSelektivníchBarev.setCorrectionMethod(CorrectionMethodTypes.Absolute);

        CmykCorrection korekceBílé = new CmykCorrection();
        korekceBílé.setCyan((short) 100);
        korekceBílé.setMagenta((short) -100);
        korekceBílé.setYellow((short) 100);
        korekceBílé.setBlack((short) 0);
        vrstvaSelektivníchBarev.setCmykCorrection(SelectiveColorsTypes.Whites, korekceBílé);

        CmykCorrection korekceČerné = new CmykCorrection();
        korekceČerné.setCyan((short) 10);
        korekceČerné.setMagenta((short) 15);
        korekceČerné.setYellow((short) 17);
        korekceČerné.setBlack((short) -3);
        vrstvaSelektivníchBarev.setCmykCorrection(SelectiveColorsTypes.Blacks, korekceČerné);

        CmykCorrection korekceNeutrální = new CmykCorrection();
        korekceNeutrální.setCyan((short) 45);
        korekceNeutrální.setMagenta((short) 21);
        korekceNeutrální.setYellow((short) -14);
        korekceNeutrální.setBlack((short) 0);
        vrstvaSelektivníchBarev.setCmykCorrection(SelectiveColorsTypes.Neutrals, korekceNeutrální);
        
        CmykCorrection korekceMagenta = new CmykCorrection();
        korekceMagenta.setCyan((short) 8);
        korekceMagenta.setMagenta((short) -10);
        korekceMagenta.setYellow((short) -14);
        korekceMagenta.setBlack((short) 25);
        vrstvaSelektivníchBarev.setCmykCorrection(SelectiveColorsTypes.Magentas, korekceMagenta);

        image.save(výstupníPsdBezSelektivníKorekceBarev);
        image.save(výstupníPngBezSelektivníKorekceBarev, new PngOptions());
    } catch (Exception e) {
        e.printStackTrace();
    }
}

PSDJAVA-484. Schopnost exportovat časovou osu PSD do souboru s animovaným gifem

    String sourceFile = "4_animated.psd";
    String outputGif = "out_4_animated.psd.gif";

    PsdLoadOptions psdLoadOptions = new PsdLoadOptions();
    psdLoadOptions.setLoadEffectsResource(true);
    try (PsdImage psdImage = (PsdImage) Image.load(sourceFile, psdLoadOptions)) {
        psdImage.getTimeline().save(outputGif, new GifOptions());
    } catch (Exception e) {
        e.printStackTrace();
    }

PSDJAVA-487. Nahrazení obrázku ve Smart objektu neaktualizuje

    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-479. Refaktorovat API s časovou osou

    String sourceFile = "4_animated.psd";
    String outputFile = "output_edited.psd";

    try (PsdImage psdImage = (PsdImage) Image.load(sourceFile)) {
        Timeline timeline = psdImage.getTimeline();

        // Přidejte ještě jeden snímek
        List<Frame> snímky = new List<Frame>(timeline.getFrames());
        snímky.add(new Frame());
        timeline.setFrames(snímky.toArray(new Frame[0]));

        timeline.switchActiveFrame(4);

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

PSDJAVA-488. Soubor PSD nelze uložit jako PSD s následující výjimkou: Režimy Rgb a Lab nemohou obsahovat méně než 3 kanály a více než 4 kanály

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

    try (PsdImage image = (PsdImage) Image.load(sourceFile)) {
        // Přijímá výchozí uložení z možností hlavičky, ale hlavička má nesprávný počet kanálů.
        try {
            image.save(exportPath);
        } catch (PsdImageException ex) {
            if (!ex.getMessage().equals("Režimy Rgb a Lab nemohou obsahovat méně než 3 kanály a více než 4 kanály")) {
                throw new Exception("Je to chybná výjimka PsdImage");
            }
        }

        // Bez chyby
        image.save(exportPath, new PsdOptions());
    }

PSDJAVA-480. Odebrat artefakty při vykreslování deformace

    String sourceFile = "smart_Test.psd";
    String changeFile = "newImage.png";

    String exportFile = "export.psd";
    String exportImg = "export_new.png";

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

                break;
            }
        }

        psdImage.save(exportFile, new PsdOptions());
    } catch (Exception e) {
        e.printStackTrace();
    }

    PsdLoadOptions psdLoadOptions = new PsdLoadOptions();
    psdLoadOptions.setAllowWarpRepaint(true);

    try (PsdImage psdImage = (PsdImage) Image.load(exportFile, psdLoadOptions)) {
        psdImage.save(exportImg, new PngOptions());
    } catch (Exception e) {
        e.printStackTrace();
    }

PSDJAVA-481. Optimalizace vykreslování deformace

    String sourceFile = "Bottom_Right.psd";
    String exportFile = "output.png";

    DateTime dtStart = DateTime.getNow();

    PsdLoadOptions psdLoadOptions = new PsdLoadOptions();
    psdLoadOptions.setAllowWarpRepaint(true);
    try (PsdImage psdImage = (PsdImage) Image.load(sourceFile)) {
        psdImage.save(exportFile, new PngOptions());
    } catch (Exception e) {
        e.printStackTrace();
    }

    DateTime dtFinish = DateTime.getNow();

    double totalSeconds = TimeSpan.fromTicks(dtFinish.getTicks()).getTotalSeconds() 
            - TimeSpan.fromTicks(dtStart.getTicks()).getTotalSeconds();

    final int MaxAllowableSecunds = 5;

    // Stará doba vykreslování byla asi 1 minuta