Aspose.PSD for Java 20.2 - Release Notes

KeySummaryCategory
PSDJAVA-96Improvement of ability to render different colors text in Text LayerFeature
PSDJAVA-97Support of clbl resource (Layer resource contains info about Blend clipping elements)Feature
PSDJAVA-100Support of blwh resource (Resource contains Black & White Adjustment Layer Data)Feature
PSDJAVA-101Ability to export Layer Group to Jpeg/Png/Tiff/Gif/Bmp/Jpeg2000/Psd/Psb/PdfFeature
PSDJAVA-105Support of lspf Resource (Contains settings about Layer Protected setting)Feature
PSDJAVA-106Support of infx resource (Contains data about Blending of interior elements)Feature
PSDJAVA-99Refactoring of PsdImage and Layer to change Transformation behavior (Correct resize/rotate/crop for layer masks if we transform one layer separately)Enhancement
PSDJAVA-98In some globalization settings AI Image raster image can not be openedBug
PSDJAVA-102After performing the FlipRotate operation on Layer, PSD Image becomes unreadableBug
PSDJAVA-103System.ArgumentException during the loading of PSD fileBug
PSDJAVA-104After using a transformation method for a layer only, the saved layer has incorrect bounds or a maskBug

Public API Changes

This API is temporary disabled and will be turned on in the next release:

  • M:com.aspose.psd.fileformats.psd.PsdImage.addExposureAdjustmentLayer(float)
  • M:com.aspose.psd.fileformats.psd.PsdImage.addExposureAdjustmentLayer(float,float)
  • M:com.aspose.psd.fileformats.psd.layers.ChannelInformation.#ctor(short,byte[],byte[])
  • M:com.aspose.psd.fileformats.psd.layers.Layer.#ctor(com.aspose.psd.RasterImage)
  • M:com.aspose.psd.fileformats.psd.layers.Layer.saveData(com.aspose.psd.system.io.Stream)
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.CurvesContinuousManager.getChannelsCount
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.CurvesContinuousManager.isChannelUsed(int)
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.CurvesDiscreteManager.#ctor(int)
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.CurvesDiscreteManager.getChannelsCount
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.CurvesDiscreteManager.isChannelUsed(int)

 Please meantime use v19.4 if you have appropriate dependency.

Added APIs:

  • M:com.aspose.psd.Color.op_Equality(com.aspose.psd.Color,com.aspose.psd.Color)
  • M:com.aspose.psd.Color.op_Inequality(com.aspose.psd.Color,com.aspose.psd.Color)
  • M:com.aspose.psd.CustomLineCap.getStrokeCaps(int[],int[])
  • M:com.aspose.psd.DisposableObject.finalize
  • F:com.aspose.psd.FileFormat.Otg
  • M:com.aspose.psd.FileStreamContainer.to_FileStream(com.aspose.psd.FileStreamContainer)
  • M:com.aspose.psd.FileStreamContainer.to_Stream(com.aspose.psd.FileStreamContainer)
  • M:com.aspose.psd.Font.#ctor
  • M:com.aspose.psd.Image.doAfterCreate(long[],long)
  • M:com.aspose.psd.Image.doAfterLoad(long[],java.io.InputStream)
  • M:com.aspose.psd.Image.getProgressEventHandler
  • M:com.aspose.psd.Image.getProgressEventHandlerInfo
  • M:com.aspose.psd.ImageOptionsBase.getProgressEventHandler
  • M:com.aspose.psd.ImageOptionsBase.setProgressEventHandler(com.aspose.psd.ProgressEventHandler)
  • T:com.aspose.psd.InterpolationMode
  • F:com.aspose.psd.InterpolationMode.Bicubic
  • F:com.aspose.psd.InterpolationMode.Bilinear
  • F:com.aspose.psd.InterpolationMode.Default
  • F:com.aspose.psd.InterpolationMode.High
  • F:com.aspose.psd.InterpolationMode.HighQualityBicubic
  • F:com.aspose.psd.InterpolationMode.HighQualityBilinear
  • F:com.aspose.psd.InterpolationMode.Invalid
  • F:com.aspose.psd.InterpolationMode.Low
  • F:com.aspose.psd.InterpolationMode.NearestNeighbor
  • M:com.aspose.psd.LoadOptions.getProgressEventHandler
  • M:com.aspose.psd.LoadOptions.setProgressEventHandler(com.aspose.psd.ProgressEventHandler)
  • F:com.aspose.psd.Matrix.TypeFlip
  • F:com.aspose.psd.Matrix.TypeGeneralRotation
  • F:com.aspose.psd.Matrix.TypeGeneralScale
  • F:com.aspose.psd.Matrix.TypeGeneralTransform
  • F:com.aspose.psd.Matrix.TypeIdentity
  • F:com.aspose.psd.Matrix.TypeMaskRotation
  • F:com.aspose.psd.Matrix.TypeMaskScale
  • F:com.aspose.psd.Matrix.TypeQuadrantRotation
  • F:com.aspose.psd.Matrix.TypeTranslation
  • F:com.aspose.psd.Matrix.TypeUniformScale
  • M:com.aspose.psd.Matrix.#ctor(com.aspose.psd.Matrix)
  • M:com.aspose.psd.Matrix.#ctor(com.aspose.psd.Rectangle,com.aspose.psd.Point[])
  • M:com.aspose.psd.Matrix.#ctor(com.aspose.psd.RectangleF,com.aspose.psd.PointF[])
  • M:com.aspose.psd.Matrix.#ctor(float,float,float,float,float,float)
  • M:com.aspose.psd.Matrix.equals(com.aspose.psd.Matrix,com.aspose.psd.Matrix)
  • M:com.aspose.psd.Matrix.getElements
  • M:com.aspose.psd.Matrix.getM11
  • M:com.aspose.psd.Matrix.getM12
  • M:com.aspose.psd.Matrix.getM21
  • M:com.aspose.psd.Matrix.getM22
  • M:com.aspose.psd.Matrix.getM31
  • M:com.aspose.psd.Matrix.getM32
  • M:com.aspose.psd.Matrix.multiply(com.aspose.psd.Matrix)
  • M:com.aspose.psd.Matrix.multiply(com.aspose.psd.Matrix,int)
  • M:com.aspose.psd.Matrix.reset
  • M:com.aspose.psd.Matrix.rotate(float)
  • M:com.aspose.psd.Matrix.rotate(float,int)
  • M:com.aspose.psd.Matrix.rotateAt(float,com.aspose.psd.PointF)
  • M:com.aspose.psd.Matrix.rotateAt(float,com.aspose.psd.PointF,int)
  • M:com.aspose.psd.Matrix.scale(float,float)
  • M:com.aspose.psd.Matrix.scale(float,float,int)
  • M:com.aspose.psd.Matrix.transformPoints(com.aspose.psd.PointF[])
  • M:com.aspose.psd.Matrix.translate(float,float)
  • M:com.aspose.psd.Matrix.translate(float,float,int)
  • M:com.aspose.psd.Metered.equals(java.lang.Object)
  • M:com.aspose.psd.NonGenericDictionary.copyTo(com.aspose.psd.internal.aL.g,int)
  • M:com.aspose.psd.NonGenericList.copyTo(com.aspose.psd.internal.aL.g,int)
  • M:com.aspose.psd.PixelDataFormat.op_Equality(com.aspose.psd.PixelDataFormat,com.aspose.psd.PixelDataFormat)
  • M:com.aspose.psd.PixelDataFormat.op_Inequality(com.aspose.psd.PixelDataFormat,com.aspose.psd.PixelDataFormat)
  • M:com.aspose.psd.Point.op_Addition(com.aspose.psd.Point,com.aspose.psd.Size)
  • M:com.aspose.psd.Point.op_Equality(com.aspose.psd.Point,com.aspose.psd.Point)
  • M:com.aspose.psd.Point.op_Inequality(com.aspose.psd.Point,com.aspose.psd.Point)
  • M:com.aspose.psd.Point.op_Subtraction(com.aspose.psd.Point,com.aspose.psd.Size)
  • M:com.aspose.psd.Point.to_PointF(com.aspose.psd.Point)
  • M:com.aspose.psd.Point.to_Size(com.aspose.psd.Point)
  • M:com.aspose.psd.PointF.op_Addition(com.aspose.psd.PointF,com.aspose.psd.Size)
  • M:com.aspose.psd.PointF.op_Addition(com.aspose.psd.PointF,com.aspose.psd.SizeF)
  • M:com.aspose.psd.PointF.op_Equality(com.aspose.psd.PointF,com.aspose.psd.PointF)
  • M:com.aspose.psd.PointF.op_Inequality(com.aspose.psd.PointF,com.aspose.psd.PointF)
  • M:com.aspose.psd.PointF.op_Subtraction(com.aspose.psd.PointF,com.aspose.psd.Size)
  • M:com.aspose.psd.PointF.op_Subtraction(com.aspose.psd.PointF,com.aspose.psd.SizeF)
  • T:com.aspose.psd.ProgressEventHandler
  • M:com.aspose.psd.ProgressEventHandler.#ctor
  • M:com.aspose.psd.ProgressEventHandler.beginInvoke(com.aspose.psd.progressmanagement.ProgressEventHandlerInfo,com.aspose.psd.system.AsyncCallback,java.lang.Object)
  • M:com.aspose.psd.ProgressEventHandler.endInvoke(com.aspose.psd.system.IAsyncResult)
  • M:com.aspose.psd.ProgressEventHandler.invoke(com.aspose.psd.progressmanagement.ProgressEventHandlerInfo)
  • M:com.aspose.psd.RasterImage.getSkewAngle
  • M:com.aspose.psd.RasterImage.normalizeAngle
  • M:com.aspose.psd.RasterImage.normalizeAngle(boolean,com.aspose.psd.Color)
  • M:com.aspose.psd.RawDataSettings.getColorPalette
  • M:com.aspose.psd.RawDataSettings.getCustomColorConverter
  • M:com.aspose.psd.RawDataSettings.getDitheringMethod
  • M:com.aspose.psd.RawDataSettings.getFallbackIndex
  • M:com.aspose.psd.RawDataSettings.getIndexedColorConverter
  • M:com.aspose.psd.RawDataSettings.getLineSize
  • M:com.aspose.psd.RawDataSettings.getPixelDataFormat
  • M:com.aspose.psd.RawDataSettings.setColorPalette(com.aspose.psd.IColorPalette)
  • M:com.aspose.psd.RawDataSettings.setCustomColorConverter(com.aspose.psd.IColorConverter)
  • M:com.aspose.psd.RawDataSettings.setDitheringMethod(int)
  • M:com.aspose.psd.RawDataSettings.setFallbackIndex(int)
  • M:com.aspose.psd.RawDataSettings.setIndexedColorConverter(com.aspose.psd.IIndexedColorConverter)
  • M:com.aspose.psd.RawDataSettings.setLineSize(int)
  • M:com.aspose.psd.RawDataSettings.setPixelDataFormat(com.aspose.psd.PixelDataFormat)
  • M:com.aspose.psd.Rectangle.op_Equality(com.aspose.psd.Rectangle,com.aspose.psd.Rectangle)
  • M:com.aspose.psd.Rectangle.op_Inequality(com.aspose.psd.Rectangle,com.aspose.psd.Rectangle)
  • M:com.aspose.psd.RectangleF.op_Equality(com.aspose.psd.RectangleF,com.aspose.psd.RectangleF)
  • M:com.aspose.psd.RectangleF.op_Inequality(com.aspose.psd.RectangleF,com.aspose.psd.RectangleF)
  • M:com.aspose.psd.RectangleF.to_RectangleF(com.aspose.psd.Rectangle)
  • M:com.aspose.psd.Size.op_Addition(com.aspose.psd.Size,com.aspose.psd.Size)
  • M:com.aspose.psd.Size.op_Equality(com.aspose.psd.Size,com.aspose.psd.Size)
  • M:com.aspose.psd.Size.op_Inequality(com.aspose.psd.Size,com.aspose.psd.Size)
  • M:com.aspose.psd.Size.op_Subtraction(com.aspose.psd.Size,com.aspose.psd.Size)
  • M:com.aspose.psd.Size.to_Point(com.aspose.psd.Size)
  • M:com.aspose.psd.Size.to_SizeF(com.aspose.psd.Size)
  • M:com.aspose.psd.SizeF.op_Addition(com.aspose.psd.SizeF,com.aspose.psd.SizeF)
  • M:com.aspose.psd.SizeF.op_Equality(com.aspose.psd.SizeF,com.aspose.psd.SizeF)
  • M:com.aspose.psd.SizeF.op_Inequality(com.aspose.psd.SizeF,com.aspose.psd.SizeF)
  • M:com.aspose.psd.SizeF.op_Subtraction(com.aspose.psd.SizeF,com.aspose.psd.SizeF)
  • M:com.aspose.psd.SizeF.to_PointF(com.aspose.psd.SizeF)
  • M:com.aspose.psd.StreamContainer.to_Stream(com.aspose.psd.StreamContainer)
  • T:com.aspose.psd.coreexceptions.IndexOutOFRangeException
  • M:com.aspose.psd.coreexceptions.IndexOutOFRangeException.#ctor(java.lang.String)
  • M:com.aspose.psd.coreexceptions.IndexOutOFRangeException.#ctor(java.lang.String,java.lang.RuntimeException)
  • M:com.aspose.psd.fileformats.ai.AiDataSection.releaseManagedResources
  • T:com.aspose.psd.fileformats.jpeg2000.Jpeg2000CustomException
  • M:com.aspose.psd.fileformats.jpeg2000.Jpeg2000CustomException.#ctor(java.lang.String)
  • M:com.aspose.psd.fileformats.psd.PsdImage.addRegularLayer
  • M:com.aspose.psd.fileformats.psd.ResourceBlock.getID
  • M:com.aspose.psd.fileformats.psd.ResourceBlock.setID(short)
  • M:com.aspose.psd.fileformats.psd.layers.LayerGroup.getHeight
  • M:com.aspose.psd.fileformats.psd.layers.LayerGroup.getWidth
  • M:com.aspose.psd.fileformats.psd.layers.LayerMaskDataFull.getUserMaskRectangle
  • M:com.aspose.psd.fileformats.psd.layers.LayerMaskDataFull.setUserMaskRectangle(com.aspose.psd.Rectangle)
  • T:com.aspose.psd.fileformats.psd.layers.LayerResourcesRegistry
  • M:com.aspose.psd.fileformats.psd.layers.LayerResourcesRegistry.#ctor
  • M:com.aspose.psd.fileformats.psd.layers.LayerResourcesRegistry.getFirstSupportedDescriptor(java.io.InputStream,int)
  • M:com.aspose.psd.fileformats.psd.layers.LayerResourcesRegistry.getFirstSupportedDescriptorByTypeName(java.lang.String)
  • M:com.aspose.psd.fileformats.psd.layers.LayerResourcesRegistry.getRegisteredDescriptors
  • M:com.aspose.psd.fileformats.psd.layers.LayerResourcesRegistry.loadResourceByFirstSupportedDescriptor(java.io.InputStream,int)
  • M:com.aspose.psd.fileformats.psd.layers.LayerResourcesRegistry.registerOpener(com.aspose.psd.fileformats.psd.layers.ILayerResourceLoader)
  • M:com.aspose.psd.fileformats.psd.layers.LayerResourcesRegistry.unregisterOpener(com.aspose.psd.fileformats.psd.layers.ILayerResourceLoader)
  • T:com.aspose.psd.fileformats.psd.layers.adjustmentlayers.BlackWhiteAdjustmentLayer
  • M:com.aspose.psd.fileformats.psd.layers.adjustmentlayers.BlackWhiteAdjustmentLayer.getBlackAndWhitePresetFileName
  • M:com.aspose.psd.fileformats.psd.layers.adjustmentlayers.BlackWhiteAdjustmentLayer.getBlues
  • M:com.aspose.psd.fileformats.psd.layers.adjustmentlayers.BlackWhiteAdjustmentLayer.getBwPresetKind
  • M:com.aspose.psd.fileformats.psd.layers.adjustmentlayers.BlackWhiteAdjustmentLayer.getCyans
  • M:com.aspose.psd.fileformats.psd.layers.adjustmentlayers.BlackWhiteAdjustmentLayer.getGreens
  • M:com.aspose.psd.fileformats.psd.layers.adjustmentlayers.BlackWhiteAdjustmentLayer.getMagentas
  • M:com.aspose.psd.fileformats.psd.layers.adjustmentlayers.BlackWhiteAdjustmentLayer.getReds
  • M:com.aspose.psd.fileformats.psd.layers.adjustmentlayers.BlackWhiteAdjustmentLayer.getTintColor
  • M:com.aspose.psd.fileformats.psd.layers.adjustmentlayers.BlackWhiteAdjustmentLayer.getTintColorBlue
  • M:com.aspose.psd.fileformats.psd.layers.adjustmentlayers.BlackWhiteAdjustmentLayer.getTintColorGreen
  • M:com.aspose.psd.fileformats.psd.layers.adjustmentlayers.BlackWhiteAdjustmentLayer.getTintColorRed
  • M:com.aspose.psd.fileformats.psd.layers.adjustmentlayers.BlackWhiteAdjustmentLayer.getUseTint
  • M:com.aspose.psd.fileformats.psd.layers.adjustmentlayers.BlackWhiteAdjustmentLayer.getYellows
  • M:com.aspose.psd.fileformats.psd.layers.adjustmentlayers.BlackWhiteAdjustmentLayer.setBlackAndWhitePresetFileName(java.lang.String)
  • M:com.aspose.psd.fileformats.psd.layers.adjustmentlayers.BlackWhiteAdjustmentLayer.setBlues(int)
  • M:com.aspose.psd.fileformats.psd.layers.adjustmentlayers.BlackWhiteAdjustmentLayer.setBwPresetKind(int)
  • M:com.aspose.psd.fileformats.psd.layers.adjustmentlayers.BlackWhiteAdjustmentLayer.setCyans(int)
  • M:com.aspose.psd.fileformats.psd.layers.adjustmentlayers.BlackWhiteAdjustmentLayer.setGreens(int)
  • M:com.aspose.psd.fileformats.psd.layers.adjustmentlayers.BlackWhiteAdjustmentLayer.setMagentas(int)
  • M:com.aspose.psd.fileformats.psd.layers.adjustmentlayers.BlackWhiteAdjustmentLayer.setReds(int)
  • M:com.aspose.psd.fileformats.psd.layers.adjustmentlayers.BlackWhiteAdjustmentLayer.setTintColor(int)
  • M:com.aspose.psd.fileformats.psd.layers.adjustmentlayers.BlackWhiteAdjustmentLayer.setTintColorBlue(double)
  • M:com.aspose.psd.fileformats.psd.layers.adjustmentlayers.BlackWhiteAdjustmentLayer.setTintColorGreen(double)
  • M:com.aspose.psd.fileformats.psd.layers.adjustmentlayers.BlackWhiteAdjustmentLayer.setTintColorRed(double)
  • M:com.aspose.psd.fileformats.psd.layers.adjustmentlayers.BlackWhiteAdjustmentLayer.setUseTint(boolean)
  • M:com.aspose.psd.fileformats.psd.layers.adjustmentlayers.BlackWhiteAdjustmentLayer.setYellows(int)
  • F:com.aspose.psd.fileformats.psd.layers.fillsettings.GradientType.Angle
  • T:com.aspose.psd.fileformats.psd.layers.layerresources.BlwhResource
  • F:com.aspose.psd.fileformats.psd.layers.layerresources.BlwhResource.TypeToolKey
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.BlwhResource.#ctor
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.BlwhResource.getBlackAndWhitePresetFileName
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.BlwhResource.getBlues
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.BlwhResource.getBwPresetKind
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.BlwhResource.getCyans
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.BlwhResource.getGreens
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.BlwhResource.getKey
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.BlwhResource.getLength
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.BlwhResource.getMagentas
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.BlwhResource.getPsdVersion
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.BlwhResource.getReds
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.BlwhResource.getTintColor
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.BlwhResource.getUseTint
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.BlwhResource.getYellows
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.BlwhResource.save(com.aspose.psd.StreamContainer,int)
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.BlwhResource.setBlackAndWhitePresetFileName(java.lang.String)
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.BlwhResource.setBlues(int)
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.BlwhResource.setBwPresetKind(int)
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.BlwhResource.setCyans(int)
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.BlwhResource.setGreens(int)
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.BlwhResource.setMagentas(int)
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.BlwhResource.setReds(int)
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.BlwhResource.setTintColor(int)
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.BlwhResource.setUseTint(boolean)
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.BlwhResource.setYellows(int)
  • T:com.aspose.psd.fileformats.psd.layers.layerresources.CurvResource
  • F:com.aspose.psd.fileformats.psd.layers.layerresources.CurvResource.TypeToolKey
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.CurvResource.#ctor(byte[])
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.CurvResource.#ctor(int)
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.CurvResource.getActiveManager
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.CurvResource.getChannelData(int)
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.CurvResource.getCurveManager
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.CurvResource.getKey
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.CurvResource.getLength
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.CurvResource.getPsdVersion
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.CurvResource.isDataStoredDiscretely
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.CurvResource.save(com.aspose.psd.StreamContainer,int)
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.CurvResource.setDataStoredDiscretely(boolean)
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.CurvesContinuousManager.loadFromBytes_internalized(byte[])
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.CurvesDiscreteManager.loadFromBytes_internalized(byte[])
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.Lr16Resource.#ctor
  • T:com.aspose.psd.fileformats.psd.resources.GridAndGuidesResource
  • M:com.aspose.psd.fileformats.psd.resources.GridAndGuidesResource.#ctor
  • M:com.aspose.psd.fileformats.psd.resources.GridAndGuidesResource.getDataSize
  • M:com.aspose.psd.fileformats.psd.resources.GridAndGuidesResource.getGridCycleX
  • M:com.aspose.psd.fileformats.psd.resources.GridAndGuidesResource.getGridCycleY
  • M:com.aspose.psd.fileformats.psd.resources.GridAndGuidesResource.getGuideCount
  • M:com.aspose.psd.fileformats.psd.resources.GridAndGuidesResource.getGuides
  • M:com.aspose.psd.fileformats.psd.resources.GridAndGuidesResource.getHeaderVersion
  • M:com.aspose.psd.fileformats.psd.resources.GridAndGuidesResource.getMinimalVersion
  • M:com.aspose.psd.fileformats.psd.resources.GridAndGuidesResource.saveData(com.aspose.psd.StreamContainer)
  • M:com.aspose.psd.fileformats.psd.resources.GridAndGuidesResource.setGridCycleX(int)
  • M:com.aspose.psd.fileformats.psd.resources.GridAndGuidesResource.setGridCycleY(int)
  • M:com.aspose.psd.fileformats.psd.resources.GridAndGuidesResource.setGuides(com.aspose.psd.fileformats.psd.resources.GuideResource[])
  • M:com.aspose.psd.fileformats.psd.resources.GridAndGuidesResource.setHeaderVersion(int)
  • M:com.aspose.psd.fileformats.tiff.filemanagement.TiffStreamWriter.writeSByte(byte)
  • M:com.aspose.psd.fileformats.tiff.filemanagement.TiffStreamWriter.writeSByteArray(byte[])
  • T:com.aspose.psd.imageoptions.TiffOptionsUtils
  • M:com.aspose.psd.imageoptions.TiffOptionsUtils.#ctor
  • M:com.aspose.psd.imageoptions.TiffOptionsUtils.getValidTagsCount(com.aspose.psd.fileformats.tiff.TiffDataType[])
  • T:com.aspose.psd.progressmanagement.EventType
  • F:com.aspose.psd.progressmanagement.EventType.Finalization
  • F:com.aspose.psd.progressmanagement.EventType.Initialization
  • F:com.aspose.psd.progressmanagement.EventType.PreProcessing
  • F:com.aspose.psd.progressmanagement.EventType.Processing
  • F:com.aspose.psd.progressmanagement.EventType.RelativeProgress
  • F:com.aspose.psd.progressmanagement.EventType.StageChange
  • T:com.aspose.psd.progressmanagement.ProgressEventHandlerInfo
  • M:com.aspose.psd.progressmanagement.ProgressEventHandlerInfo.getDescription
  • M:com.aspose.psd.progressmanagement.ProgressEventHandlerInfo.getEventType
  • M:com.aspose.psd.progressmanagement.ProgressEventHandlerInfo.getMaxValue
  • M:com.aspose.psd.progressmanagement.ProgressEventHandlerInfo.getValue
  • M:com.aspose.psd.progressmanagement.ProgressEventHandlerInfo.setMaxValue(int)
  • M:com.aspose.psd.progressmanagement.ProgressEventHandlerInfo.setValue(int)
  • M:com.aspose.psd.xmp.types.derived.RenditionClass.getDefinedValues

Removed APIs:

  • F:com.aspose.psd.xmp.types.derived.RenditionClass.DefinedValues
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.CurvesManager.isChannelUsed(int)
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.CurvesManager.getChannelsCount
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.Lr16Resource.#ctor(int)
  • T:com.aspose.psd.fileformats.psd.resources.GridAndGuidesResouce
  • M:com.aspose.psd.fileformats.psd.resources.GridAndGuidesResouce.#ctor
  • M:com.aspose.psd.fileformats.psd.resources.GridAndGuidesResouce.getGuides
  • M:com.aspose.psd.fileformats.psd.resources.GridAndGuidesResouce.setGuides(com.aspose.psd.fileformats.psd.resources.GuideResource[])
  • M:com.aspose.psd.fileformats.psd.resources.GridAndGuidesResouce.getGuideCount
  • M:com.aspose.psd.fileformats.psd.resources.GridAndGuidesResouce.getHeaderVersion
  • M:com.aspose.psd.fileformats.psd.resources.GridAndGuidesResouce.setHeaderVersion(int)
  • M:com.aspose.psd.fileformats.psd.resources.GridAndGuidesResouce.getGridCycleX
  • M:com.aspose.psd.fileformats.psd.resources.GridAndGuidesResouce.setGridCycleX(int)
  • M:com.aspose.psd.fileformats.psd.resources.GridAndGuidesResouce.getGridCycleY
  • M:com.aspose.psd.fileformats.psd.resources.GridAndGuidesResouce.setGridCycleY(int)
  • M:com.aspose.psd.fileformats.psd.resources.GridAndGuidesResouce.getDataSize
  • M:com.aspose.psd.fileformats.psd.resources.GridAndGuidesResouce.getMinimalVersion
  • M:com.aspose.psd.fileformats.ai.AiDataSection.dispose
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.CurvesContinuousManager.loadFromBytes(byte[])
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.CurvesDiscreteManager.loadFromBytes(byte[])
  • M:com.aspose.psd.fileformats.psd.resources.GridAndGuidesResouce.saveData(com.aspose.psd.StreamContainer)
  • M:com.aspose.psd.NonGenericDictionary.copyTo(com.aspose.psd.internal.dW.g,int)
  • M:com.aspose.psd.NonGenericList.copyTo(com.aspose.psd.internal.dW.g,int)
  • M:com.aspose.psd.StreamContainer.#ctor(com.aspose.psd.system.io.Stream)
  • M:com.aspose.psd.StreamContainer.#ctor(com.aspose.psd.system.io.Stream,boolean)

Usage examples:

PSDJAVA-96. Improvement of ability to render different colors text in Text Layer

 String targetFilePath = "text_ethalon_different_colors.psd";

String resultFilePath = "output.png";

PsdImage psdImage = null;

try

{

    psdImage = (PsdImage) Image.load(targetFilePath);

    TextLayer txtLayer = (TextLayer)psdImage.getLayers()[1];

    txtLayer.getTextData().updateLayerData();

    PngOptions pngOptions = new PngOptions();

    pngOptions.setColorType(PngColorType.TruecolorWithAlpha);

    psdImage.save(resultFilePath, pngOptions);

}

finally

{

    if (psdImage != null) psdImage.dispose();

}

PSDJAVA-97. Support of clbl resource (Layer resource contains info about Blend clipping elements)

 class LocalScope

{

    void assertIsTrue(boolean condition, String message)

    {

        if (!condition)

        {

            throw new FormatException(message);

        }

    }

    ClblResource getClblResource(PsdImage im)

    {

        for (Layer layer : im.getLayers())

        {

            for (LayerResource layerResource : layer.getResources())

            {

                if (layerResource instanceof ClblResource)

                {

                    return (ClblResource)layerResource;

                }

            }

        }

        throw new Exception("The specified ClblResource not found");

    }

}

LocalScope localScope = new LocalScope();

String sourceFileName = "SampleForResource.psd";

String destinationFileName = "Output" + sourceFileName;

PsdImage im = null;

try

{

    im = (PsdImage)Image.load(sourceFileName);

    ClblResource resource = localScope.getClblResource(im);

    localScope.assertIsTrue(resource.getBlendClippedElements(), "The ClblResource.BlendClippedElements should be true");

    // Test editing and saving

    resource.setBlendClippedElements(false);

    im.save(destinationFileName);

}

finally

{

    if (im != null) im.dispose();

}

PsdImage im2 = null;

try

{

    im2 = (PsdImage)Image.load(destinationFileName);

    ClblResource resource = localScope.getClblResource(im2);

    localScope.assertIsTrue(!resource.getBlendClippedElements(), "The ClblResource.BlendClippedElements should change to false");

}

finally

{

    if (im2 != null) im2.dispose();

}

PSDJAVA-100. Support of blwh resource (Resource contains Black & White Adjustment Layer Data)

 final String actualPropertyValueIsWrongMessage = "Expected property value is not equal to actual value";

class LocalScope

{

    void assertIsTrue(boolean condition, String message)

    {

        if (!condition)

        {

            throw new FormatException(message);

        }

    }

    void exampleSupportOfBlwhResource(

            String sourceFileName,

            int reds,

            int yellows,

            int greens,

            int cyans,

            int blues,

            int magentas,

            boolean useTint,

            int bwPresetKind,

            String bwPresetFileName,

            double tintColorRed,

            double tintColorGreen,

            double tintColorBlue,

            int tintColor,

            int newTintColor)

    {

        String destinationFileName = "Output" + sourceFileName;

        boolean isRequiredResourceFound = false;

        PsdImage im = null;

        try

        {

            im = (PsdImage)Image.load(sourceFileName);

            for (Layer layer : im.getLayers())

            {

                for (LayerResource layerResource : layer.getResources())

                {

                    if (layerResource instanceof BlwhResource)

                    {

                        BlwhResource blwhResource = (BlwhResource)layerResource;

                        BlackWhiteAdjustmentLayer blwhLayer = (BlackWhiteAdjustmentLayer)layer;

                        isRequiredResourceFound = true;

                        assertIsTrue(blwhResource.getReds() == reds, actualPropertyValueIsWrongMessage);

                        assertIsTrue(blwhResource.getYellows() == yellows, actualPropertyValueIsWrongMessage);

                        assertIsTrue(blwhResource.getGreens() == greens, actualPropertyValueIsWrongMessage);

                        assertIsTrue(blwhResource.getCyans() == cyans, actualPropertyValueIsWrongMessage);

                        assertIsTrue(blwhResource.getBlues() == blues, actualPropertyValueIsWrongMessage);

                        assertIsTrue(blwhResource.getMagentas() == magentas, actualPropertyValueIsWrongMessage);

                        assertIsTrue(blwhResource.getUseTint() == useTint, actualPropertyValueIsWrongMessage);

                        assertIsTrue(blwhResource.getTintColor() == tintColor, actualPropertyValueIsWrongMessage);

                        assertIsTrue(blwhResource.getBwPresetKind() == bwPresetKind, actualPropertyValueIsWrongMessage);

                        assertIsTrue(blwhResource.getBlackAndWhitePresetFileName().equals(bwPresetFileName), actualPropertyValueIsWrongMessage);

                        assertIsTrue(Math.abs(blwhLayer.getTintColorRed() - tintColorRed) < 1e-6, actualPropertyValueIsWrongMessage);

                        assertIsTrue(Math.abs(blwhLayer.getTintColorGreen() - tintColorGreen) < 1e-6, actualPropertyValueIsWrongMessage);

                        assertIsTrue(Math.abs(blwhLayer.getTintColorBlue() - tintColorBlue) < 1e-6, actualPropertyValueIsWrongMessage);

                        // Test editing and saving

                        blwhResource.setReds(reds - 15);

                        blwhResource.setYellows(yellows - 15);

                        blwhResource.setGreens(greens + 15);

                        blwhResource.setCyans(cyans + 15);

                        blwhResource.setBlues(blues - 15);

                        blwhResource.setMagentas(magentas - 15);

                        blwhResource.setUseTint(!useTint);

                        blwhResource.setBwPresetKind(4);

                        blwhResource.setBlackAndWhitePresetFileName("bwPresetFileName");

                        blwhLayer.setTintColorRed(tintColorRed - 60);

                        blwhLayer.setTintColorGreen(tintColorGreen - 60);

                        blwhLayer.setTintColorBlue(tintColorBlue - 60);

                        im.save(destinationFileName);

                        break;

                    }

                }

            }

        }

        finally

        {

            if (im != null) im.dispose();

        }

        assertIsTrue(isRequiredResourceFound, "The specified BlwhResource not found");

        isRequiredResourceFound = false;

        PsdImage im2 = null;

        try

        {

            im2 = (PsdImage)Image.load(destinationFileName);

            for (Layer layer : im2.getLayers())

            {

                for (LayerResource layerResource : layer.getResources())

                {

                    if (layerResource instanceof BlwhResource)

                    {

                        BlwhResource blwhResource = (BlwhResource)layerResource;

                        BlackWhiteAdjustmentLayer blwhLayer = (BlackWhiteAdjustmentLayer)layer;

                        isRequiredResourceFound = true;

                        assertIsTrue(blwhResource.getReds() == reds - 15, actualPropertyValueIsWrongMessage);

                        assertIsTrue(blwhResource.getYellows() == yellows - 15, actualPropertyValueIsWrongMessage);

                        assertIsTrue(blwhResource.getGreens() == greens + 15, actualPropertyValueIsWrongMessage);

                        assertIsTrue(blwhResource.getCyans() == cyans + 15, actualPropertyValueIsWrongMessage);

                        assertIsTrue(blwhResource.getBlues() == blues - 15, actualPropertyValueIsWrongMessage);

                        assertIsTrue(blwhResource.getMagentas() == magentas - 15, actualPropertyValueIsWrongMessage);

                        assertIsTrue(blwhResource.getUseTint() == !useTint, actualPropertyValueIsWrongMessage);

                        assertIsTrue(blwhResource.getTintColor() == newTintColor, actualPropertyValueIsWrongMessage);

                        assertIsTrue(blwhResource.getBwPresetKind() == 4, actualPropertyValueIsWrongMessage);

                        assertIsTrue(blwhResource.getBlackAndWhitePresetFileName().equals("bwPresetFileName"), actualPropertyValueIsWrongMessage);

                        assertIsTrue(Math.abs(blwhLayer.getTintColorRed() - tintColorRed + 60) < 1e-6, actualPropertyValueIsWrongMessage);

                        assertIsTrue(Math.abs(blwhLayer.getTintColorGreen() - tintColorGreen + 60) < 1e-6, actualPropertyValueIsWrongMessage);

                        assertIsTrue(Math.abs(blwhLayer.getTintColorBlue() - tintColorBlue + 60) < 1e-6, actualPropertyValueIsWrongMessage);

                        break;

                    }

                }

            }

        }

        finally

        {

            if (im2 != null) im2.dispose();

        }

        assertIsTrue(isRequiredResourceFound, "The specified BlwhResource not found");

    }

}

LocalScope localScope = new LocalScope();

localScope.exampleSupportOfBlwhResource(

        "BlackWhiteAdjustmentLayerStripesMask.psd",

        0x28,

        0x3c,

        0x28,

        0x3c,

        0x14,

        0x50,

        false,

        1,

        "\0",

        225.00045776367188,

        211.00067138671875,

        179.00115966796875,

        -1977421,

        -5925001);

localScope.exampleSupportOfBlwhResource(

        "BlackWhiteAdjustmentLayerStripesMask2.psd",

        0x80,

        0x40,

        0x20,

        0x10,

        0x08,

        0x04,

        true,

        4,

        "\0",

        239.996337890625,

        127.998046875,

        63.9990234375,

        -1015744,

        -4963324);

System.out.println("BlwhResource updating works as expected. Press any key.");

PSDJAVA-101. Ability to export Layer Group to Jpeg/Png/Tiff/Gif/Bmp/Jpeg2000/Psd/Psb/Pdf

 PsdImage psdImage = null;

try

{

    psdImage = (PsdImage)Image.load("1.psd");

    // folder with background

    LayerGroup bgFolder = (LayerGroup)psdImage.getLayers()[0];

    // folder with content

    LayerGroup contentFolder = (LayerGroup)psdImage.getLayers()[4];

    bgFolder.save("background.png", new PngOptions());

    contentFolder.save("content.png", new PngOptions());

}

finally

{

    if (psdImage != null) psdImage.dispose();

}

PSDJAVA-105. Support of lspf Resource (Contains settings about Layer Protected setting)

 final String actualPropertyValueIsWrongMessage = "Expected property value is not equal to actual value";

class LocalScope

{

    void assertIsTrue(boolean condition, String message)

    {

        if (!condition)

        {

            throw new FormatException(message);

        }

    }

}

LocalScope localScope = new LocalScope();

String sourceFileName = "SampleForResource.psd";

String destinationFileName = "Output" + sourceFileName;

boolean isRequiredResourceFound = false;

PsdImage im = null;

try

{

    im = (PsdImage)Image.load(sourceFileName);

    for (Layer layer : im.getLayers())

    {

        for (LayerResource layerResource : layer.getResources())

        {

            if (layerResource instanceof LspfResource)

            {

                LspfResource resource = (LspfResource)layerResource;

                isRequiredResourceFound = true;

                localScope.assertIsTrue(!resource.isCompositeProtected(), actualPropertyValueIsWrongMessage);

                localScope.assertIsTrue(!resource.isPositionProtected(), actualPropertyValueIsWrongMessage);

                localScope.assertIsTrue(!resource.isTransparencyProtected(), actualPropertyValueIsWrongMessage);

                // Test editing and saving

                resource.setCompositeProtected(true);

                localScope.assertIsTrue(resource.isCompositeProtected(), actualPropertyValueIsWrongMessage);

                localScope.assertIsTrue(!resource.isPositionProtected(), actualPropertyValueIsWrongMessage);

                localScope.assertIsTrue(!resource.isTransparencyProtected(), actualPropertyValueIsWrongMessage);

                resource.setCompositeProtected(false);

                resource.setPositionProtected(true);

                localScope.assertIsTrue(!resource.isCompositeProtected(), actualPropertyValueIsWrongMessage);

                localScope.assertIsTrue(resource.isPositionProtected(), actualPropertyValueIsWrongMessage);

                localScope.assertIsTrue(!resource.isTransparencyProtected(), actualPropertyValueIsWrongMessage);

                resource.setPositionProtected(false);

                resource.setTransparencyProtected(true);

                localScope.assertIsTrue(!resource.isCompositeProtected(), actualPropertyValueIsWrongMessage);

                localScope.assertIsTrue(!resource.isPositionProtected(), actualPropertyValueIsWrongMessage);

                localScope.assertIsTrue(resource.isTransparencyProtected(), actualPropertyValueIsWrongMessage);

                resource.setCompositeProtected(true);

                resource.setPositionProtected(true);

                resource.setTransparencyProtected(true);

                im.save(destinationFileName);

                break;

            }

        }

    }

}

finally

{

    if (im != null) im.dispose();

}

localScope.assertIsTrue(isRequiredResourceFound, "The specified LspfResource not found");

isRequiredResourceFound = false;

PsdImage im2 = null;

try

{

    im2 = (PsdImage)Image.load(destinationFileName);

    for (Layer layer : im2.getLayers())

    {

        for (LayerResource layerResource : layer.getResources())

        {

            if (layerResource instanceof LspfResource)

            {

                LspfResource resource = (LspfResource)layerResource;

                isRequiredResourceFound = true;

                localScope.assertIsTrue(resource.isCompositeProtected(), actualPropertyValueIsWrongMessage);

                localScope.assertIsTrue(resource.isPositionProtected(), actualPropertyValueIsWrongMessage);

                localScope.assertIsTrue(resource.isTransparencyProtected(), actualPropertyValueIsWrongMessage);

                break;

            }

        }

    }

}

finally

{

    if (im2 != null) im2.dispose();

}

localScope.assertIsTrue(isRequiredResourceFound, "The specified LspfResource not found");

System.out.println("LspfResource updating works as expected. Press any key.");

PSDJAVA-106. Support of infx resource (Contains data about Blending of interior elements)

 class LocalScope

{

    void assertIsTrue(boolean condition, String message)

    {

        if (!condition)

        {

            throw new FormatException(message);

        }

    }

}

LocalScope localScope = new LocalScope();

String sourceFileName = "SampleForResource.psd";

String destinationFileName = "Output" + sourceFileName;

boolean isRequiredResourceFound = false;

PsdImage im = null;

try

{

    im = (PsdImage)Image.load(sourceFileName);

    for (Layer layer : im.getLayers())

    {

        for (LayerResource layerResource : layer.getResources())

        {

            if (layerResource instanceof InfxResource)

            {

                InfxResource resource = (InfxResource)layerResource;

                isRequiredResourceFound = true;

                localScope.assertIsTrue(!resource.getBlendInteriorElements(), "The InfxResource.BlendInteriorElements should be false");

                // Test editing and saving

                resource.setBlendInteriorElements(true);

                im.save(destinationFileName);

                break;

            }

        }

    }

}

finally

{

    if (im != null) im.dispose();

}

localScope.assertIsTrue(isRequiredResourceFound, "The specified InfxResource not found");

isRequiredResourceFound = false;

PsdImage im2 = null;

try

{

    im2 = (PsdImage)Image.load(destinationFileName);

    for (Layer layer : im2.getLayers())

    {

        for (LayerResource layerResource : layer.getResources())

        {

            if (layerResource instanceof InfxResource)

            {

                InfxResource resource = (InfxResource)layerResource;

                isRequiredResourceFound = true;

                localScope.assertIsTrue(resource.getBlendInteriorElements(), "The InfxResource.BlendInteriorElements should change to true");

                break;

            }

        }

    }

}

finally

{

    if (im2 != null) im2.dispose();

}

localScope.assertIsTrue(isRequiredResourceFound, "The specified InfxResource not found");

PSDJAVA-99. Refactoring of PsdImage and Layer to change Transformation behavior (Correct resize/rotate/crop for layer masks if we transform one layer separately)

 Long[] enums = Enum.getValues(RotateFlipType.class);

String[] fileNames = new String[]

        {

                "OneRegularAndOneAdjustmentWithVectorAndLayerMask",

                "OneRegularAndOneAdjustmentWithLayerMask",

                "TextLayer",

                "LinkedShapesWithText"

        };

for (String fileName : fileNames)

{

    for (Long rotateFlipType : enums)

    {

        String sourceFileName = fileName + ".psd";

        String destinationFileName = fileName + "_" + Enum.getName(RotateFlipType.class, rotateFlipType) + ".psd";

        PsdLoadOptions psdLoadOptions = new PsdLoadOptions();

        psdLoadOptions.setLoadEffectsResource(true);

        PsdImage image = null;

        try

        {

            image = (PsdImage)Image.load(sourceFileName, psdLoadOptions);

            image.rotateFlip(rotateFlipType.intValue());

            image.save(destinationFileName);

        }

        finally

        {

            if (image != null) image.dispose();

        }

    }

}

PSDJAVA-98. In some globalization settings AI Image raster image can not be opened

 String sourceFileName = "form_raster_8.ai";

Locale.setDefault(new Locale("ru", "RU"));

AiImage image = null;

try

{

    // no exception should be thrown

    image = (AiImage)Image.load(sourceFileName);

}

finally

{

    if (image != null) image.dispose();

}        

PSDJAVA-102. After performing the FlipRotate operation on Layer, PSD Image becomes unreadable

 String sourceFileName = "1.psd";

int flipType = RotateFlipType.Rotate90FlipNone;

String outFileNamePsd = "Rotate90FlipNoneTest2617Output.psd";

PsdImage image = null;

try

{

    image = (PsdImage)Image.load(sourceFileName);

    for (int i = 0; i < image.getLayers().length; i++)

    {

        Layer layer = image.getLayers()[i];

        if (!layer.getBounds().isEmpty())

        {

            layer.rotateFlip(flipType);

        }

    }

    image.save(outFileNamePsd);

}

finally

{

    if (image != null) image.dispose();

}

// Here we should get no exception. This file should readable for PhotoShop too,

PsdImage image2 = null;

try

{

    image2 = (PsdImage)Image.load(outFileNamePsd);

    // Do nothing

}

finally

{

    if (image2 != null) image2.dispose();

}

Long[] enums = Enum.getValues(RotateFlipType.class);

String[] fileNames = new String[]

        {

                "OneRegularAndOneAdjustmentWithVectorAndLayerMask",

                "OneRegularAndOneAdjustmentWithLayerMask",

                "LinkedShapesWithText"

        };

for (String fileName : fileNames)

{

    for (Long rotateFlipType : enums)

    {

        sourceFileName = fileName + ".psd";

        String destinationFileName = fileName + "_" + Enum.getName(RotateFlipType.class, rotateFlipType) + ".psd";

        PsdLoadOptions psdLoadOptions = new PsdLoadOptions();

        psdLoadOptions.setLoadEffectsResource(true);

        PsdImage image3 = null;

        try

        {

            image3 = (PsdImage)Image.load(sourceFileName, psdLoadOptions);

            image3.rotateFlip(rotateFlipType.intValue());

            image3.save(destinationFileName);

        }

        finally

        {

            if (image3 != null) image3.dispose();

        }

    }

}

PSDJAVA-103. System.ArgumentException during the loading of psd file

 String sourcePath = "1.psd";

String psdPath = "RotateFlipTest2617.psd";

int flipType = RotateFlipType.Rotate270FlipXY;

PsdImage im = null;

try

{

    im = (PsdImage)Image.load(sourcePath);

    im.rotateFlip(flipType);

    im.save(psdPath);

}

finally

{

    if (im != null) im.dispose();

}

PsdImage im2 = null;

try // Here we should get no exceptions

{

    im2 = (PsdImage)Image.load(psdPath);

    // do nothing

}

finally

{

    if (im2 != null) im2.dispose();

}

PSDJAVA-104. After using a transformation method for a layer only, the saved layer has incorrect bounds or a mask

 String sourcePath = "1.psd";

String psdPath = "RotateFlipTest2617.psd";

int flipType = RotateFlipType.Rotate270FlipXY;

PsdImage im = null;

try

{

    im = (PsdImage)Image.load(sourcePath);

    im.rotateFlip(flipType);

    im.save(psdPath);

}

finally

{

    if (im != null) im.dispose();

}

PsdImage im2 = null;

try // Here we should get no exceptions

{

    im2 = (PsdImage)Image.load(psdPath);

    // do nothing

}

finally

{

    if (im2 != null) im2.dispose();

}