Manipulating Photoshop Formats
Color Replacement in PSD Layers
Aspose.PSD for Java allows you to change background color of each layer of a PSD file. Please use the Aspose.PSD.FileFormats.Psd.Layers.BackgroundColor class to change layer background color in PSD layer. The following code snippet loads a PSD file, access the layer, update the background color and save the PSD file.
String dataDir = Utils.getDataDir(ColorReplacementInPSD.class) + "PSD/"; | |
// Load a PSD file as an image and caste it into PsdImage | |
try (PsdImage image = (PsdImage) Image.load(dataDir + "sample.psd")) { | |
for (int i = 0; i < image.getLayers().length; i++) { | |
if (image.getLayers()[i].getName() == "Rectangle 1") { | |
Layer layer = image.getLayers()[i]; | |
int dd = 0; | |
layer.hasBackgroundColor(); | |
layer.setBackgroundColor(Color.getOrange()); | |
} | |
} | |
image.save(dataDir + "asposeImage02.psd"); | |
} |
Update Text Layer In PSD File
Aspose.PSD for Java allows you to manipulate the text in the text layer of a PSD file. Please use the Aspose.PSD.FileFormats.Psd.Layers.TextLayer class to update text in PSD layer. The following code snippet loads a PSD file, access the text layer, update the text and save the PSD file with a new name using Aspose.PSD.FileFormats.Psd.Layers.TextLayer.UpdateText method.
String dataDir = Utils.getDataDir(UpdateTextLayerInPSDFile.class) + "PSD/"; | |
// Load a PSD file as an image and cast it into PsdImage | |
try (PsdImage psdImage = (PsdImage) Image.load(dataDir + "layers.psd")) { | |
for (int i = 0; i < psdImage.getLayers().length; i++) { | |
if (psdImage.getLayers()[i] instanceof TextLayer) { | |
TextLayer textLayer = (TextLayer) psdImage.getLayers()[i]; | |
textLayer.updateText("test update", new Point(0, 0), 15.0f, Color.getPurple()); | |
} | |
} | |
psdImage.save(dataDir + "UpdateTextLayerInPSDFile_out.psd"); | |
} |
Detecting Flattened PSD
Aspose.PSD for Java allows you to detect whether a given PSD file is flatten or not. IsFlatten property has been introduced in the Aspose.PSD.FileFormats.Psd.PsdImage class to achieve this functionality. The following code snippet loads a PSD file and access the property IsFlatten.
String dataDir = Utils.getDataDir(DetectFlattenedPSD.class) + "PSD/"; | |
// Load a PSD file as an image and cast it into PsdImage | |
try (PsdImage psdImage = (PsdImage) Image.load(dataDir + "layers.psd")) { | |
// Do processing, Get the true value if PSD is flatten and false in case the PSD is not flatten. | |
System.out.println(psdImage.isFlatten()); | |
} |
Merge PSD Layers
This article shows how to merge layers in a PSD file while converting a PSD file to JPG with Aspose.PSD. In the example below, an existing PSD file is loaded by passing the file path to the Image class static Load method. Once it is loaded, convert/cast the image to PsdImage. Create an instance of the JpegOptions class and set it various properties. Now call the Save method of the PsdImage instance. The following code snippet shows you how to merge PSD layers.
String dataDir = Utils.getDataDir(MergePSDLayers.class) + "PSD/"; | |
// Load a PSD file as an image and cast it into PsdImage | |
try (PsdImage psdImage = (PsdImage) Image.load(dataDir + "layers.psd")) { | |
// Create JPEG option class object, Set its properties and save image | |
JpegOptions jpgOptions = new JpegOptions(); | |
psdImage.save(dataDir + "MergePSDlayers_output.jpg", jpgOptions); | |
} |
Grayscale Support With Alpha for PSD
This article shows how to support Grayscale with alpha for PSD file while converting a PSD file to PNG with Aspose.PSD. In the example below, an existing PSD file is loaded by passing the file path to the Image class static Load method. Once it is loaded, convert/cast the image to PsdImage. Create an instance of the PngOptions class and set its various properties. Set the ColorType property to TruecolorWithAlpha. Now call the Save method of the PngOptions instance. The following code snippet shows you how to convert to Grayscale PNG with Alpha.
String dataDir = Utils.getDataDir(GrayScaleSupportForAlpha.class) + "PSD/"; | |
// Load a PSD file as an image and cast it into PsdImage | |
try (PsdImage psdImage = (PsdImage) Image.load(dataDir + "sample.psd")) { | |
// Create an instance of PngOptions class | |
PngOptions pngOptions = new PngOptions(); | |
pngOptions.setColorType(PngColorType.TruecolorWithAlpha); | |
psdImage.save(dataDir + "GrayScaleSupportForAlpha_out.png", pngOptions); | |
} |
Support Layer Effects For PSD
This article shows how support different effects like Blur, Inner Glow, Outer Glow for PSD layer. The following code snippet shows you how to support layer effects.
String dataDir = Utils.getDataDir(SupportLayerForPSD.class) + "PSD/"; | |
String sourceFileName = dataDir + "layers.psd"; | |
String output = dataDir + "layers.png"; | |
PsdLoadOptions imageLoadOptions = new PsdLoadOptions(); | |
imageLoadOptions.setLoadEffectsResource(true); | |
imageLoadOptions.setUseDiskForLoadEffectsResource(true); | |
try (PsdImage image = (PsdImage) Image.load(sourceFileName, imageLoadOptions)) { | |
PngOptions saveOptions = new PngOptions(); | |
saveOptions.setColorType(PngColorType.TruecolorWithAlpha); | |
image.save(output, saveOptions); | |
} |
Support Layer Creation Date and Time
This article shows how to support date and time layer creation for PSD layer. The following code snippet shows you how to create layers.
String dataDir = Utils.getDataDir(LayerCreationDateTime.class) + "PSD/"; | |
String sourceName = dataDir + "OneLayer.psd"; | |
// Load a PSD file as an image and cast it into PsdImage | |
try (PsdImage im = (PsdImage) Image.load(sourceName)) { | |
Layer layer = im.getLayers()[0]; | |
Date creationDateTime = layer.getLayerCreationDateTime(); | |
DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); | |
Date expectedDateTime = new Date("2018/7/17 8:57:24"); | |
Assert.areEqual(expectedDateTime, creationDateTime); | |
Date now = new Date(); | |
Layer createdLayer = im.addLevelsAdjustmentLayer(); | |
} |
Support for Sheet Color High Lighting
This article shows how to load psd images than change and highlight sheet colours and save that as image. The code snippet has been provided.
String dataDir = Utils.getDataDir(SheetColorHighlighting.class) + "PSD/"; | |
String sourceFileName = dataDir + "SheetColorHighlightExample.psd"; | |
String exportPath = dataDir + "SheetColorHighlightExampleChanged.psd"; | |
// Load a PSD file as an image and cast it into PsdImage | |
try (PsdImage im = (PsdImage) Image.load(sourceFileName)) { | |
Layer layer1 = im.getLayers()[0]; | |
Assert.areEqual(SheetColorHighlightEnum.Violet, layer1.getSheetColorHighlight()); | |
Layer layer2 = im.getLayers()[1]; | |
Assert.areEqual(SheetColorHighlightEnum.Orange, layer2.getSheetColorHighlight()); | |
layer1.setSheetColorHighlight(SheetColorHighlightEnum.Yellow); | |
im.save(exportPath); | |
} |
Support of Text Layers on Runtime
This article shows how to add text layers on runtime for PSD images. The code snippet has been provided below.
String dataDir = Utils.getDataDir(AddEffectAtRunTime.class) + "DrawingAndFormattingImages/"; | |
String sourceFileName = dataDir + "ThreeRegularLayers.psd"; | |
String exportPath = dataDir + "ThreeRegularLayersChanged.psd"; | |
PsdLoadOptions loadOptions = new PsdLoadOptions(); | |
loadOptions.setLoadEffectsResource(true); | |
try (PsdImage im = (PsdImage) Image.load(sourceFileName, loadOptions)) { | |
ColorOverlayEffect effect = im.getLayers()[1].getBlendingOptions().addColorOverlay(); | |
effect.setColor(Color.getGreen()); | |
effect.setOpacity((byte) 128); | |
effect.setBlendMode(BlendMode.Normal); | |
im.save(exportPath); | |
} |
Support of Adjustment Layers
This article shows how to adjust layers and than if layer is null than merge layer and save as PSD images. The code snippet has been provided below.
String dataDir = Utils.getDataDir(SupportOfAdjusmentLayers.class) + "PSD/"; | |
// Channel Mixer Adjustment Layer | |
String sourceFileName1 = dataDir + "ChannelMixerAdjustmentLayer.psd"; | |
String exportPath1 = dataDir + "ChannelMixerAdjustmentLayerChanged.psd"; | |
try (PsdImage im = (PsdImage) Image.load(sourceFileName1)) { | |
for (int i = 0; i < im.getLayers().length; i++) { | |
if (im.getLayers()[i] instanceof AdjustmentLayer) { | |
AdjustmentLayer adjustmentLayer = (AdjustmentLayer) im.getLayers()[i]; | |
if (adjustmentLayer != null) { | |
adjustmentLayer.mergeLayerTo(im.getLayers()[0]); | |
} | |
} | |
} | |
// Save PSD | |
im.save(exportPath1); | |
} | |
// Levels adjustment layer | |
String sourceFileName2 = dataDir + "LevelsAdjustmentLayerRgb.psd"; | |
String exportPath2 = dataDir + "LevelsAdjustmentLayerRgbChanged.psd"; | |
try (PsdImage img = (PsdImage) Image.load(sourceFileName2)) { | |
for (int i = 0; i < img.getLayers().length; i++) { | |
if (img.getLayers()[i] instanceof AdjustmentLayer) { | |
AdjustmentLayer adjustmentLayer = (AdjustmentLayer) img.getLayers()[i]; | |
if (adjustmentLayer != null) { | |
adjustmentLayer.mergeLayerTo(img.getLayers()[0]); | |
} | |
} | |
} | |
// Save PSD | |
img.save(exportPath2); | |
} |
Manage Brightness and Contrast in Adjustment Layers
This article shows how to iterate through layers and manage brightness and contrast in layers and than save as PSD images. The code snippet has been provided below.
String dataDir = Utils.getDataDir(ManageBrightnessContrastAdjustmentLayer.class) + "PSD/"; | |
// Brightness/Contrast layer editing | |
String sourceFileName = dataDir + "BrightnessContrastModern.psd"; | |
String psdPathAfterChange = dataDir + "BrightnessContrastModernChanged.psd"; | |
try (PsdImage im = (PsdImage) Image.load(sourceFileName)) { | |
for (int i = 0; i < im.getLayers().length; i++) { | |
if (im.getLayers()[i] instanceof BrightnessContrastLayer) { | |
BrightnessContrastLayer brightnessContrastLayer = (BrightnessContrastLayer) im.getLayers()[i]; | |
brightnessContrastLayer.setBrightness(50); | |
brightnessContrastLayer.setContrast(50); | |
} | |
} | |
// Save PSD | |
im.save(psdPathAfterChange); | |
} |
Manage Exposure Layers
This article shows how to add and edit exposure layers and manage exposure layers and than save as PSD images. The code snippet has been provided below.
String dataDir = Utils.getDataDir(ManageExposureAdjustmentLayer.class) + "PSD/"; | |
// Exposure layer editing | |
String sourceFileName = dataDir + "ExposureAdjustmentLayer.psd"; | |
String psdPathAfterChange = dataDir + "ExposureAdjustmentLayerChanged.psd"; | |
try (PsdImage im = (PsdImage) Image.load(sourceFileName)) { | |
for (int i = 0; i < im.getLayers().length; i++) { | |
if (im.getLayers()[i] instanceof ExposureLayer) { | |
ExposureLayer expLayer = (ExposureLayer) im.getLayers()[i]; | |
expLayer.setExposure(2); | |
expLayer.setOffset(-0.25f); | |
expLayer.setGammaCorrection(0.5f); | |
} | |
} | |
im.save(psdPathAfterChange); | |
} | |
// Exposure layer adding | |
sourceFileName = dataDir + "PhotoExample.psd"; | |
psdPathAfterChange = dataDir + "PhotoExampleAddedExposure.psd"; | |
try (PsdImage img = (PsdImage) Image.load(sourceFileName)) { | |
ExposureLayer newlayer = img.addExposureAdjustmentLayer(10, -0.25f, 2f); | |
img.save(psdPathAfterChange); | |
} |
Manage Channel Mixer Adjust Layers
This article shows how to manage adjustment layers and set different colours and than save as PSD images. The code snippet has been provided below.
String dataDir = Utils.getDataDir(ManageChannelMixerAdjusmentLayer.class) + "PSD/"; | |
// Rgb Channel Mixer | |
String sourceFileName = dataDir + "ChannelMixerAdjustmentLayerRgb.psd"; | |
String psdPathAfterChange = dataDir + "ChannelMixerAdjustmentLayerRgbChanged.psd"; | |
try (PsdImage im = (PsdImage) Image.load(sourceFileName)) { | |
for (int i = 0; i < im.getLayers().length; i++) { | |
if (im.getLayers()[i] instanceof RgbChannelMixerLayer) { | |
RgbChannelMixerLayer rgbLayer = (RgbChannelMixerLayer) im.getLayers()[i]; | |
rgbLayer.getRedChannel().setBlue((short) 100); | |
rgbLayer.getBlueChannel().setGreen((short) -100); | |
rgbLayer.getGreenChannel().setConstant((short) 50); | |
} | |
} | |
im.save(psdPathAfterChange); | |
} | |
// Adding the new layer(Cmyk for this example) | |
sourceFileName = dataDir + "CmykWithAlpha.psd"; | |
psdPathAfterChange = dataDir + "ChannelMixerAdjustmentLayerCmykChanged.psd"; | |
try (PsdImage img = (PsdImage) Image.load(sourceFileName)) { | |
ChannelMixerLayer newlayer = img.addChannelMixerAdjustmentLayer(); | |
newlayer.getChannelByIndex(2).setConstant((short) 50); | |
newlayer.getChannelByIndex(0).setConstant((short) 50); | |
img.save(psdPathAfterChange); | |
} |
Merge PSD Layers into Other layers
This article shows how to merge layers into other layers in a PSD file with Aspose.PSD. In the example below, an existing PSD file is loaded by passing the file path to the Image class static Load method. Now call the Save method of the PsdImage instance. The following code snippet shows you how to merge PSD layers.
String dataDir = Utils.getDataDir(MergeOnePSDlayerToOther.class) + "PSD/"; | |
String sourceFile1 = dataDir + "FillOpacitySample.psd"; | |
String sourceFile2 = dataDir + "ThreeRegularLayersSemiTransparent.psd"; | |
String exportPath = dataDir + "MergedLayersFromTwoDifferentPsd.psd"; | |
try (PsdImage im1 = (PsdImage) Image.load(sourceFile1); | |
PsdImage im2 = (PsdImage) Image.load(sourceFile2)) { | |
Layer layer1 = im1.getLayers()[1]; | |
Layer layer2 = im2.getLayers()[0]; | |
layer1.mergeLayerTo(layer2); | |
im2.save(exportPath); | |
} |
Support For TextBoundBox
This article shows how to Support text bound box in a PSD file with Aspose.PSD. In the example below, an existing PSD file is loaded by passing the file path to the Image class static Load method. TextBoundBox is the maximum layer size for Text layer. Now call the Save method of the PsdImage instance. The following code snippet shows you how to merge PSD layers.
String dataDir = Utils.getDataDir(TextLayerBoundBox.class) + "PSD/"; | |
String sourceFileName = dataDir + "LayerWithText.psd"; | |
Size correctOpticalSize = new Size(127, 45); | |
Size correctBoundBox = new Size(172, 62); | |
try (PsdImage im = (PsdImage) Image.load(sourceFileName)) { | |
TextLayer textLayer = (TextLayer) im.getLayers()[1]; | |
// Size of the layer is the size of the rendered area | |
Size opticalSize = textLayer.getSize(); | |
Assert.areEqual(correctOpticalSize, opticalSize); | |
// TextBoundBox is the maximum layer size for Text Layer. | |
// In this area PS will try to fit your text | |
Size boundBox = textLayer.getTextBoundBox(); | |
Assert.areEqual(correctBoundBox, boundBox); | |
} |
Support For IOPA Resources
This article shows how to support IOPA resource in a PSD file with Aspose.PSD. The following code snippet shows you how to support IOPA in PSD layers.
String dataDir = Utils.getDataDir(AddIopaResource.class) + "PSD/"; | |
String sourceFileName = dataDir + "FillOpacitySample.psd"; | |
String exportPath = dataDir + "FillOpacitySampleChanged.psd"; | |
try (PsdImage im = (PsdImage) (Image.load(sourceFileName))) { | |
Layer layer = im.getLayers()[2]; | |
LayerResource[] resources = layer.getResources(); | |
for (int i = 0; i < resources.length; i++) { | |
if (resources[i] instanceof IopaResource) { | |
IopaResource iopaResource = (IopaResource) resources[i]; | |
iopaResource.setFillOpacity((byte) 200); | |
} | |
} | |
im.save(exportPath); | |
} |
Manage Opacity of Layers
This article shows how to manage opacity of layers in a PSD file with Aspose.PSD. The code snippet has been provided below.
String dataDir = Utils.getDataDir(FillOpacityOfLayers.class) + "PSD/"; | |
// Change the Fill Opacity property | |
String sourceFileName = dataDir + "FillOpacitySample.psd"; | |
String exportPath = dataDir + "FillOpacitySampleChanged.psd"; | |
try (PsdImage im = (PsdImage) (Image.load(sourceFileName))) { | |
Layer layer = im.getLayers()[2]; | |
layer.setFillOpacity(5); | |
im.save(exportPath); | |
} |
Rendering of Curves Adjustment Layers
This article shows how to rendered curves adjust of layers in a PSD file and render them into PNG as well with Aspose.PSD. The code snippet has been provided below.
String dataDir = Utils.getDataDir(RenderingOfCurvesAdjustmentLayer.class) + "PSD/"; | |
// Curves layer editing | |
String sourceFileName = dataDir + "CurvesAdjustmentLayer"; | |
String psdPathAfterChange = dataDir + "CurvesAdjustmentLayerChanged"; | |
String pngExportPath = dataDir + "CurvesAdjustmentLayerChanged"; | |
for (int j = 1; j < 2; j++) { | |
try (PsdImage im = (PsdImage) Image.load(sourceFileName + Integer.toString(j) + ".psd")) { | |
for (int i = 0; i < im.getLayers().length; i++) { | |
if (im.getLayers()[i] instanceof CurvesLayer) { | |
CurvesLayer curvesLayer = (CurvesLayer) im.getLayers()[i]; | |
if (curvesLayer.isDiscreteManagerUsed()) { | |
CurvesDiscreteManager manager = (CurvesDiscreteManager) curvesLayer.getCurvesManager(); | |
for (int k = 10; k < 50; k++) { | |
manager.setValueInPosition(0, (byte) k, (byte) (15 + (k * 2))); | |
} | |
} else { | |
CurvesContinuousManager manager = (CurvesContinuousManager) curvesLayer.getCurvesManager(); | |
manager.addCurvePoint((byte) 0, (byte) 50, (byte) 100); | |
manager.addCurvePoint((byte) 0, (byte) 150, (byte) 130); | |
} | |
} | |
} | |
// Save PSD | |
im.save(psdPathAfterChange + Integer.toString(j) + ".psd"); | |
// Save PNG | |
PngOptions saveOptions = new PngOptions(); | |
saveOptions.setColorType(PngColorType.TruecolorWithAlpha); | |
im.save(pngExportPath + Integer.toString(j) + ".png", saveOptions); | |
} | |
} |
Add Curves Adjustment Layers
This article shows how to add curves adjustment layers in a PSD file with Aspose.PSD. The code snippet has been provided below.
String dataDir = Utils.getDataDir(AddCurvesAdjustmentLayer.class) + "PSD/"; | |
// Curves layer editing | |
String sourceFileName = dataDir + "CurvesAdjustmentLayer"; | |
String psdPathAfterChange = dataDir + "CurvesAdjustmentLayerChanged"; | |
for (int j = 1; j < 2; j++) { | |
String fileName = sourceFileName + ".psd"; | |
try (PsdImage im = (PsdImage) Image.load(fileName)) { | |
for (int k = 0; k < im.getLayers().length; k++) { | |
if (im.getLayers()[k] instanceof CurvesLayer) { | |
CurvesLayer curvesLayer = (CurvesLayer) im.getLayers()[k]; | |
if (curvesLayer.isDiscreteManagerUsed()) { | |
CurvesDiscreteManager manager = (CurvesDiscreteManager) curvesLayer.getCurvesManager(); | |
for (int i = 10; i < 50; i++) { | |
manager.setValueInPosition(0, (byte) i, (byte) (15 + (i * 2))); | |
} | |
} else { | |
CurvesContinuousManager manager = (CurvesContinuousManager) curvesLayer.getCurvesManager(); | |
manager.addCurvePoint((byte) 0, (byte) 50, (byte) 100); | |
manager.addCurvePoint((byte) 0, (byte) 150, (byte) 130); | |
} | |
} | |
} | |
// Save PSD | |
im.save(psdPathAfterChange + Integer.toString(j) + ".psd"); | |
} |
Manager Photo Filter Adjustment Layer
This article shows how to iterate through each photo filter layers and add and edit them and save them as PSD file with Aspose.PSD. The code snippet has been provided below.
String dataDir = Utils.getDataDir(ManagePhotoFilterAdjustmentLayer.class) + "PSD/"; | |
// Photo Filter layer editing | |
String sourceFileName = dataDir + "PhotoFilterAdjustmentLayer.psd"; | |
String psdPathAfterChange = dataDir + "PhotoFilterAdjustmentLayerChanged.psd"; | |
try (PsdImage im = (PsdImage) Image.load(sourceFileName)) { | |
for (int i = 0; i < im.getLayers().length; i++) { | |
if (im.getLayers()[i] instanceof PhotoFilterLayer) { | |
PhotoFilterLayer photoLayer = (PhotoFilterLayer) im.getLayers()[i]; | |
photoLayer.setColor(Color.fromArgb(255, 60, 60)); | |
photoLayer.setDensity(78); | |
photoLayer.setPreserveLuminosity(false); | |
} | |
} | |
im.save(psdPathAfterChange); | |
} | |
// Photo Filter layer adding | |
sourceFileName = dataDir + "PhotoExample.psd"; | |
psdPathAfterChange = dataDir + "PhotoExampleAddedPhotoFilter.psd"; | |
try (PsdImage img = (PsdImage) Image.load(sourceFileName)) { | |
PhotoFilterLayer layer = img.addPhotoFilterLayer(Color.fromArgb(25, 255, 35)); | |
img.save(psdPathAfterChange); | |
} |
Support Flatten Layers
This article shows how to flatten whole PSD file and merge one layers into another and save them as PSD file with Aspose.PSD. The code snippet has been provided below.
String dataDir = Utils.getDataDir(PossibilityToFlattenLayers.class) + "PSD/"; | |
// Flatten whole PSD | |
String sourceFileName = dataDir + "ThreeRegularLayersSemiTransparent.psd"; | |
String exportPath = dataDir + "ThreeRegularLayersSemiTransparentFlattened.psd"; | |
try (PsdImage im = (PsdImage) Image.load(sourceFileName)) { | |
im.flattenImage(); | |
im.save(exportPath); | |
} | |
// Merge one layer in another | |
exportPath = dataDir + "ThreeRegularLayersSemiTransparentFlattenedLayerByLayer.psd"; | |
try (PsdImage img = (PsdImage) Image.load(sourceFileName)) { | |
Layer bottomLayer = img.getLayers()[0]; | |
Layer middleLayer = img.getLayers()[1]; | |
Layer topLayer = img.getLayers()[2]; | |
Layer layer1 = img.mergeLayers(bottomLayer, middleLayer); | |
Layer layer2 = img.mergeLayers(layer1, topLayer); | |
// Set up merged layers | |
img.setLayers(new Layer[]{layer2}); | |
img.save(exportPath); | |
} |
Adding and Rendering of Level Layers
This article shows how to iterate through each level layers and set different levels than save that as PSD and PNG file with Aspose.PSD. The code snippet has been provided below.
String dataDir = Utils.getDataDir(RenderingOfLevelAdjustmentLayer.class) + "PSD/"; | |
String sourceFileName = dataDir + "LevelsAdjustmentLayer.psd"; | |
String psdPathAfterChange = dataDir + "LevelsAdjustmentLayerChanged.psd"; | |
String pngExportPath = dataDir + "LevelsAdjustmentLayerChanged.png"; | |
try (PsdImage im = (PsdImage) Image.load(sourceFileName)) { | |
for (int i = 0; i < im.getLayers().length; i++) { | |
if (im.getLayers()[i] instanceof LevelsLayer) { | |
LevelsLayer levelsLayer = (LevelsLayer) im.getLayers()[i]; | |
LevelChannel channel = levelsLayer.getChannel(0); | |
channel.setInputMidtoneLevel(2.0f); | |
channel.setInputShadowLevel((short) 10); | |
channel.setInputHighlightLevel((short) 230); | |
channel.setOutputShadowLevel((short) 20); | |
channel.setOutputHighlightLevel((short) 200); | |
} | |
} | |
// Save PSD | |
im.save(psdPathAfterChange); | |
// Save PNG | |
PngOptions saveOptions = new PngOptions(); | |
saveOptions.setColorType(PngColorType.TruecolorWithAlpha); | |
im.save(pngExportPath, saveOptions); | |
} |
Add Hue Saturation of Adjustment Layers
This article shows how to iterate through each Hue layers and set different ranges and colours than save that as PSD file with Aspose.PSD. The code snippet has been provided below.
String dataDir = Utils.getDataDir(AddHueSaturationAdjustmentLayer.class) + "PSD/"; | |
// Hue/Saturation layer editing | |
String sourceFileName = dataDir + "HueSaturationAdjustmentLayer.psd"; | |
String psdPathAfterChange = dataDir + "HueSaturationAdjustmentLayerChanged.psd"; | |
try (PsdImage im = (PsdImage) Image.load(sourceFileName)) { | |
for (int i = 0; i < im.getLayers().length; i++) { | |
if (im.getLayers()[i] instanceof HueSaturationLayer) { | |
HueSaturationLayer hueLayer = (HueSaturationLayer) im.getLayers()[i]; | |
hueLayer.setHue((short) -25); | |
hueLayer.setSaturation((short) -12); | |
hueLayer.setLightness((short) 67); | |
ColorRangeHsl colorRange = hueLayer.getRange(2); | |
colorRange.setHue((short) -40); | |
colorRange.setSaturation((short) 50); | |
colorRange.setLightness((short) -20); | |
colorRange.setMostLeftBorder((short) 300); | |
} | |
} | |
im.save(psdPathAfterChange); | |
} | |
// Hue/Saturation layer adding | |
sourceFileName = dataDir + "PhotoExample.psd"; | |
psdPathAfterChange = dataDir + "PhotoExampleAddedHueSaturation.psd"; | |
try (PsdImage img = (PsdImage) Image.load(sourceFileName)) { | |
//this.SaveForVisualTest(im, this.OutputPath, prefix + file, "before"); | |
HueSaturationLayer hueLayer = img.addHueSaturationAdjustmentLayer(); | |
hueLayer.setHue((short) -25); | |
hueLayer.setSaturation((short) -12); | |
hueLayer.setLightness((short) 67); | |
ColorRangeHsl colorRange = hueLayer.getRange(2); | |
colorRange.setHue((short) -160); | |
colorRange.setSaturation((short) 100); | |
colorRange.setLightness((short) 20); | |
colorRange.setMostLeftBorder((short) 300); | |
img.save(psdPathAfterChange); | |
} |
Add Level Adjustment Layers
This article shows how to iterate through each level layers and set different levels than save that as PSD with Aspose.PSD. The code snippet has been provided below.
String dataDir = Utils.getDataDir(AddLevelAdjustmentLayer.class) + "PSD/"; | |
String sourceFileName = dataDir + "LevelsAdjustmentLayer.psd"; | |
String psdPathAfterChange = dataDir + "LevelsAdjustmentLayerChanged.psd"; | |
try (PsdImage im = (PsdImage) Image.load(sourceFileName)) { | |
for (int i = 0; i < im.getLayers().length; i++) { | |
if (im.getLayers()[i] instanceof LevelsLayer) { | |
LevelsLayer levelsLayer = (LevelsLayer) im.getLayers()[i]; | |
LevelChannel channel = levelsLayer.getChannel(0); | |
channel.setInputMidtoneLevel(2.0f); | |
channel.setInputShadowLevel((short) 10); | |
channel.setInputHighlightLevel((short) 230); | |
channel.setOutputShadowLevel((short) 20); | |
channel.setOutputHighlightLevel((short) 200); | |
} | |
} | |
// Save PSD | |
im.save(psdPathAfterChange); | |
} |
Support for Interrupt Monitor
This article shows how to create and monitor interrupts in Aspose.PSD. The code snippet has been provided below.
public static void main(String[] args) throws InterruptedException { | |
String dataDir = Utils.getDataDir(SupportForInterruptMonitor.class) + "PSD/"; | |
ImageOptionsBase saveOptions = new PngOptions(); | |
InterruptMonitor monitor = new InterruptMonitor(); | |
SaveImageWorker worker = new SaveImageWorker(dataDir + "big.psb", dataDir + "big_out.png", saveOptions, monitor); | |
Thread thread = new Thread(worker); | |
try { | |
thread.start(); | |
// The timeout should be less than the time required for full image conversion (without interruption). | |
Thread.sleep(3000); | |
// Interrupt the process | |
System.out.format("Interrupting the save thread #%d at %s\n", thread.getId(), new Date().toString()); | |
monitor.interrupt(); | |
// Wait for interruption... | |
thread.join(); | |
} finally { | |
// If the file to be deleted does not exist, no exception is thrown. | |
File f = new File(dataDir + "big_out.png"); | |
f.delete(); | |
} | |
} | |
} | |
/** | |
* Initiates image conversion and waits for its interruption. | |
*/ | |
class SaveImageWorker implements Runnable { | |
/** | |
* The path to the input image. | |
*/ | |
private final String inputPath; | |
/** | |
* The path to the output image. | |
*/ | |
private final String outputPath; | |
/** | |
* The interrupt monitor. | |
*/ | |
private final InterruptMonitor monitor; | |
/** | |
* The save options. | |
*/ | |
private final ImageOptionsBase saveOptions; | |
/** | |
* Initializes a new instance of the SaveImageWorker class. | |
* | |
* @param inputPath The path to the input image. | |
* @param outputPath The path to the output image. | |
* @param saveOptions The save options. | |
* @param monitor The interrupt monitor. | |
*/ | |
public SaveImageWorker(String inputPath, String outputPath, ImageOptionsBase saveOptions, InterruptMonitor monitor) { | |
this.inputPath = inputPath; | |
this.outputPath = outputPath; | |
this.saveOptions = saveOptions; | |
this.monitor = monitor; | |
} | |
/** | |
* Tries to convert image from one format to another. Handles interruption. | |
*/ | |
public void run() { | |
Image image = Image.load(this.inputPath); | |
try { | |
InterruptMonitor.setThreadLocalInstance(this.monitor); | |
try { | |
image.save(this.outputPath, this.saveOptions); | |
} catch (OperationInterruptedException e) { | |
System.out.format("The save thread #%d finishes at %s\n", Thread.currentThread().getId(), new Date().toString()); | |
System.out.println(e); | |
} catch (Exception e) { | |
System.out.println(e); | |
} finally { | |
InterruptMonitor.setThreadLocalInstance(null); | |
} | |
} finally { | |
image.dispose(); | |
} | |
} | |
} |
Support Layer Effects at Runtime
This article shows how to add layer effects at runtime in Aspose.PSD. The code snippet has been provided below.
String dataDir = Utils.getDataDir(AddEffectAtRunTime.class) + "DrawingAndFormattingImages/"; | |
String sourceFileName = dataDir + "ThreeRegularLayers.psd"; | |
String exportPath = dataDir + "ThreeRegularLayersChanged.psd"; | |
PsdLoadOptions loadOptions = new PsdLoadOptions(); | |
loadOptions.setLoadEffectsResource(true); | |
try (PsdImage im = (PsdImage) Image.load(sourceFileName, loadOptions)) { | |
ColorOverlayEffect effect = im.getLayers()[1].getBlendingOptions().addColorOverlay(); | |
effect.setColor(Color.getGreen()); | |
effect.setOpacity((byte) 128); | |
effect.setBlendMode(BlendMode.Normal); | |
im.save(exportPath); | |
} |
Add Curve Adjustment layer
This article shows how to add curve adjustment layers in PSD using Aspose.PSD. The code snippet has been provided below.
String dataDir = Utils.getDataDir(AddCurvesAdjustmentLayer.class) + "PSD/"; | |
// Curves layer editing | |
String sourceFileName = dataDir + "CurvesAdjustmentLayer"; | |
String psdPathAfterChange = dataDir + "CurvesAdjustmentLayerChanged"; | |
for (int j = 1; j < 2; j++) { | |
String fileName = sourceFileName + ".psd"; | |
try (PsdImage im = (PsdImage) Image.load(fileName)) { | |
for (int k = 0; k < im.getLayers().length; k++) { | |
if (im.getLayers()[k] instanceof CurvesLayer) { | |
CurvesLayer curvesLayer = (CurvesLayer) im.getLayers()[k]; | |
if (curvesLayer.isDiscreteManagerUsed()) { | |
CurvesDiscreteManager manager = (CurvesDiscreteManager) curvesLayer.getCurvesManager(); | |
for (int i = 10; i < 50; i++) { | |
manager.setValueInPosition(0, (byte) i, (byte) (15 + (i * 2))); | |
} | |
} else { | |
CurvesContinuousManager manager = (CurvesContinuousManager) curvesLayer.getCurvesManager(); | |
manager.addCurvePoint((byte) 0, (byte) 50, (byte) 100); | |
manager.addCurvePoint((byte) 0, (byte) 150, (byte) 130); | |
} | |
} | |
} | |
// Save PSD | |
im.save(psdPathAfterChange + Integer.toString(j) + ".psd"); | |
} |
Add Channel Mixer Adjustment layer
This article shows how to add channel mixer adjustment layers and set different colors and than save as PSD images. The code snippet has been provided below.
String dataDir = Utils.getDataDir(AddChannelMixerAdjustmentLayer.class) + "PSD/"; | |
String sourceFileName = dataDir + "ChannelMixerAdjustmentLayerRgb.psd"; | |
String psdPathAfterChange = dataDir + "ChannelMixerAdjustmentLayerRgbChanged.psd"; | |
try (PsdImage im = (PsdImage) Image.load(sourceFileName)) { | |
for (int i = 0; i < im.getLayers().length; i++) { | |
if (im.getLayers()[i] instanceof RgbChannelMixerLayer) { | |
RgbChannelMixerLayer rgbLayer = (RgbChannelMixerLayer) im.getLayers()[i]; | |
rgbLayer.getRedChannel().setBlue((short) 100); | |
rgbLayer.getBlueChannel().setGreen((short) -100); | |
rgbLayer.getGreenChannel().setConstant((short) 50); | |
} | |
} | |
im.save(psdPathAfterChange); | |
} | |
// Cmyk Channel Mixer | |
sourceFileName = dataDir + "ChannelMixerAdjustmentLayerCmyk.psd"; | |
psdPathAfterChange = dataDir + "ChannelMixerAdjustmentLayerCmykChanged.psd"; | |
try (PsdImage img = (PsdImage) Image.load(sourceFileName)) { | |
for (int i = 0; i < img.getLayers().length; i++) { | |
if (img.getLayers()[i] instanceof CmykChannelMixerLayer) { | |
CmykChannelMixerLayer cmykLayer = (CmykChannelMixerLayer) img.getLayers()[i]; | |
cmykLayer.getCyanChannel().setBlack((short) 20); | |
cmykLayer.getMagentaChannel().setYellow((short) 50); | |
cmykLayer.getYellowChannel().setCyan((short) -25); | |
cmykLayer.getBlackChannel().setYellow((short) 25); | |
} | |
} | |
img.save(psdPathAfterChange); | |
} | |
// Adding the new layer(Cmyk for this example) | |
sourceFileName = dataDir + "CmykWithAlpha.psd"; | |
psdPathAfterChange = dataDir + "ChannelMixerAdjustmentLayerCmykChanged.psd"; | |
try (PsdImage img1 = (PsdImage) Image.load(sourceFileName)) { | |
ChannelMixerLayer newlayer = img1.addChannelMixerAdjustmentLayer(); | |
newlayer.getChannelByIndex(2).setConstant((short) 50); | |
newlayer.getChannelByIndex(0).setConstant((short) 50); | |
img1.save(psdPathAfterChange); | |
} |
Rendering of Channel Mixer Adjustment layer
This article shows how to render channel mixer adjustment layers and set different colors channel and than save as PSD and PNG images. The code snippet has been provided below.
String dataDir = Utils.getDataDir(AddChannelMixerAdjustmentLayer.class) + "PSD/"; | |
String sourceFileName = dataDir + "ChannelMixerAdjustmentLayerRgb.psd"; | |
String psdPathAfterChange = dataDir + "ChannelMixerAdjustmentLayerRgbChanged.psd"; | |
try (PsdImage im = (PsdImage) Image.load(sourceFileName)) { | |
for (int i = 0; i < im.getLayers().length; i++) { | |
if (im.getLayers()[i] instanceof RgbChannelMixerLayer) { | |
RgbChannelMixerLayer rgbLayer = (RgbChannelMixerLayer) im.getLayers()[i]; | |
rgbLayer.getRedChannel().setBlue((short) 100); | |
rgbLayer.getBlueChannel().setGreen((short) -100); | |
rgbLayer.getGreenChannel().setConstant((short) 50); | |
} | |
} | |
im.save(psdPathAfterChange); | |
} | |
// Cmyk Channel Mixer | |
sourceFileName = dataDir + "ChannelMixerAdjustmentLayerCmyk.psd"; | |
psdPathAfterChange = dataDir + "ChannelMixerAdjustmentLayerCmykChanged.psd"; | |
try (PsdImage img = (PsdImage) Image.load(sourceFileName)) { | |
for (int i = 0; i < img.getLayers().length; i++) { | |
if (img.getLayers()[i] instanceof CmykChannelMixerLayer) { | |
CmykChannelMixerLayer cmykLayer = (CmykChannelMixerLayer) img.getLayers()[i]; | |
cmykLayer.getCyanChannel().setBlack((short) 20); | |
cmykLayer.getMagentaChannel().setYellow((short) 50); | |
cmykLayer.getYellowChannel().setCyan((short) -25); | |
cmykLayer.getBlackChannel().setYellow((short) 25); | |
} | |
} | |
img.save(psdPathAfterChange); | |
} | |
// Adding the new layer(Cmyk for this example) | |
sourceFileName = dataDir + "CmykWithAlpha.psd"; | |
psdPathAfterChange = dataDir + "ChannelMixerAdjustmentLayerCmykChanged.psd"; | |
try (PsdImage img1 = (PsdImage) Image.load(sourceFileName)) { | |
ChannelMixerLayer newlayer = img1.addChannelMixerAdjustmentLayer(); | |
newlayer.getChannelByIndex(2).setConstant((short) 50); | |
newlayer.getChannelByIndex(0).setConstant((short) 50); | |
img1.save(psdPathAfterChange); | |
} |
Rendering Exposure Adjustment layer
This article shows how to iterate through each exposure level layers and set different exposure values than save that as PSD as well as PNG with Aspose.PSD. The code snippet has been provided below.
String dataDir = Utils.getDataDir(RenderingExposureAdjustmentLayer.class) + "PSD/"; | |
// Exposure layer editing | |
String sourceFileName = dataDir + "ExposureAdjustmentLayer.psd"; | |
String psdPathAfterChange = dataDir + "ExposureAdjustmentLayerChanged.psd"; | |
String pngExportPath = dataDir + "ExposureAdjustmentLayerChanged.png"; | |
try (PsdImage im = (PsdImage) Image.load(sourceFileName)) { | |
for (int i = 0; i < im.getLayers().length; i++) { | |
if (im.getLayers()[i] instanceof ExposureLayer) { | |
ExposureLayer expLayer = (ExposureLayer) im.getLayers()[i]; | |
expLayer.setExposure(2); | |
expLayer.setOffset(-0.25f); | |
expLayer.setGammaCorrection(0.5f); | |
} | |
} | |
// Save PSD | |
im.save(psdPathAfterChange); | |
// Save PNG | |
PngOptions saveOptions = new PngOptions(); | |
saveOptions.setColorType(PngColorType.TruecolorWithAlpha); | |
im.save(pngExportPath, saveOptions); | |
// Exposure layer adding | |
sourceFileName = dataDir + "PhotoExample.psd"; | |
psdPathAfterChange = dataDir + "PhotoExampleAddedExposure.psd"; | |
pngExportPath = dataDir + "PhotoExampleAddedExposure.png"; | |
PsdImage img = (PsdImage) Image.load(sourceFileName); | |
ExposureLayer newlayer = img.addExposureAdjustmentLayer(2, -0.25f, 2f); | |
// Save PSD | |
img.save(psdPathAfterChange); | |
// Save PNG | |
PngOptions options = new PngOptions(); | |
options.setColorType(PngColorType.TruecolorWithAlpha); | |
img.save(pngExportPath, options); | |
} |
Support Blend Modes
Using Aspose.PSD for Java, developers can use different blend modes. Below is the code demonstration of the said functionality.
String[] files = new String[] | |
{ | |
"Normal", | |
"Dissolve", | |
"Darken", | |
"Multiply", | |
"ColorBurn", | |
"LinearBurn", | |
"DarkerColor", | |
"Lighten", | |
"Screen", | |
"ColorDodge", | |
"LinearDodgeAdd", | |
"LightenColor", | |
"Overlay", | |
"SoftLight", | |
"HardLight", | |
"VividLight", | |
"LinearLight", | |
"PinLight", | |
"HardMix", | |
"Difference", | |
"Exclusion", | |
"Subtract", | |
"Divide", | |
"Hue", | |
"Saturation", | |
"Color", | |
"Luminosity", | |
}; | |
for (int i = 0; i < files.length; i++) { | |
try (PsdImage im = (PsdImage) Image.load(dataDir + files[i] + ".psd")) { | |
// Export to PNG | |
PngOptions saveOptions = new PngOptions(); | |
saveOptions.setColorType(PngColorType.TruecolorWithAlpha); | |
String pngExportPath100 = dataDir + "BlendMode" + files[i] + "_Test100.png"; | |
im.save(pngExportPath100, saveOptions); | |
// Set opacity 50% | |
im.getLayers()[1].setOpacity((byte) 127); | |
String pngExportPath50 = dataDir + "BlendMode" + files[i] + "_Test50.png"; | |
im.save(pngExportPath50, saveOptions); | |
} | |
} |
Support Color Overlay Effect
Using Aspose.PSD for Java, developers can sets new layer with a color on top of that image and set it to the blending mode “Color.” To add a more effect, you put the color image on top of these 2 layers and use the “Overlay” blending mode. Below is the code demonstration of the said functionality.
String dataDir = Utils.getDataDir(ColorOverLayEffect.class) + "DrawingAndFormattingImages/"; | |
// ColorOverlay effect editing | |
String sourceFileName = dataDir + "ColorOverlay.psd"; | |
String psdPathAfterChange = dataDir + "ColorOverlayChanged.psd"; | |
PsdLoadOptions loadOptions = new PsdLoadOptions(); | |
loadOptions.setLoadEffectsResource(true); | |
try (PsdImage im = (PsdImage) Image.load(sourceFileName, loadOptions)) { | |
ColorOverlayEffect colorOverlay = (ColorOverlayEffect) (im.getLayers()[1].getBlendingOptions().getEffects()[0]); | |
colorOverlay.setColor(Color.getGreen()); | |
colorOverlay.setOpacity((byte) 128); | |
im.save(psdPathAfterChange); | |
} |
Support Drop Shadow Effect
Using Aspose.PSD for Java, developers can sets drop shadow effects to different elements. Below is the code demonstration of the said functionality.
String dataDir = Utils.getDataDir(SupportShadowEffect.class) + "DrawingAndFormattingImages/"; | |
String sourceFileName = dataDir + "Shadow.psd"; | |
String psdPathAfterChange = dataDir + "ShadowChanged.psd"; | |
PsdLoadOptions loadOptions = new PsdLoadOptions(); | |
loadOptions.setLoadEffectsResource(true); | |
try (PsdImage im = (PsdImage) Image.load(sourceFileName, loadOptions)) { | |
DropShadowEffect shadowEffect = (DropShadowEffect) (im.getLayers()[1].getBlendingOptions().getEffects()[0]); | |
Assert.areEqual(Color.getBlack(), shadowEffect.getColor()); | |
Assert.areEqual(255, shadowEffect.getOpacity()); | |
Assert.areEqual(3, shadowEffect.getDistance()); | |
Assert.areEqual(7, shadowEffect.getSize()); | |
Assert.areEqual(true, shadowEffect.getUseGlobalLight()); | |
Assert.areEqual(90, shadowEffect.getAngle()); | |
Assert.areEqual(0, shadowEffect.getSpread()); | |
Assert.areEqual(0, shadowEffect.getNoise()); | |
shadowEffect.setColor(Color.getGreen()); | |
shadowEffect.setOpacity((byte) 128); | |
shadowEffect.setDistance(11); | |
shadowEffect.setUseGlobalLight(false); | |
shadowEffect.setSize(9); | |
shadowEffect.setAngle(45); | |
shadowEffect.setSpread(3); | |
shadowEffect.setNoise(50); | |
im.save(psdPathAfterChange); | |
} |
Rendering for Export of Color Overlay Effect
Using Aspose.PSD for Java, developers can rendered documents of color overlay effect. Below is the code demonstration of the said functionality.
String dataDir = Utils.getDataDir(RenderingColorEffect.class) + "DrawingAndFormattingImages/"; | |
String sourceFileName = dataDir + "ColorOverlay.psd"; | |
String pngExportPath = dataDir + "ColorOverlayresult.png"; | |
PsdLoadOptions loadOptions = new PsdLoadOptions(); | |
loadOptions.setLoadEffectsResource(true); | |
try (PsdImage im = (PsdImage) Image.load(sourceFileName, loadOptions)) { | |
ColorOverlayEffect colorOverlay = (ColorOverlayEffect) (im.getLayers()[1].getBlendingOptions().getEffects()[0]); | |
PngOptions saveOptions = new PngOptions(); | |
saveOptions.setColorType(PngColorType.TruecolorWithAlpha); | |
im.save(pngExportPath, saveOptions); | |
} |
Rendering for Export of Drop Shadow Effect
Using Aspose.PSD for Java, developers can rendered documents of drop shadow effect. Below is the code demonstration of the said functionality.
String dataDir = Utils.getDataDir(RenderingDropShadow.class) + "DrawingAndFormattingImages/"; | |
String sourceFileName = dataDir + "Shadow.psd"; | |
String pngExportPath = dataDir + "Shadowchanged1.png"; | |
PsdLoadOptions loadOptions = new PsdLoadOptions(); | |
loadOptions.setLoadEffectsResource(true); | |
try (PsdImage im = (PsdImage) Image.load(sourceFileName, loadOptions)) { | |
DropShadowEffect shadowEffect = (DropShadowEffect) (im.getLayers()[1].getBlendingOptions().getEffects()[0]); | |
Assert.areEqual(Color.getBlack(), shadowEffect.getColor()); | |
Assert.areEqual(255, shadowEffect.getOpacity()); | |
Assert.areEqual(3, shadowEffect.getDistance()); | |
Assert.areEqual(7, shadowEffect.getSize()); | |
Assert.areEqual(true, shadowEffect.getUseGlobalLight()); | |
Assert.areEqual(90, shadowEffect.getAngle()); | |
Assert.areEqual(0, shadowEffect.getSpread()); | |
Assert.areEqual(0, shadowEffect.getNoise()); | |
// Save PNG | |
PngOptions saveOptions = new PngOptions(); | |
saveOptions.setColorType(PngColorType.TruecolorWithAlpha); | |
im.save(pngExportPath, saveOptions); | |
} |
Support of RGB Color
This article shows how Aspose.PSD support RGB color mode with 16bit per channels. The code snippet has been provided below.
String dataDir = Utils.getDataDir(SupportOfRGBColor.class) + "PSD/"; | |
// Support of RGB Color mode with 16bits/channel (64 bits per color) | |
String sourceFileName = dataDir + "inRgb16.psd"; | |
String outputFilePathJpg = dataDir + "outRgb16.jpg"; | |
String outputFilePathPsd = dataDir + "outRgb16.psd"; | |
PsdLoadOptions options = new PsdLoadOptions(); | |
try (PsdImage image = (PsdImage) Image.load(sourceFileName, options)) { | |
image.save(outputFilePathPsd, new PsdOptions(image)); | |
JpegOptions saveOptions = new JpegOptions(); | |
saveOptions.setQuality(100); | |
image.save(outputFilePathJpg, saveOptions); | |
} |