Aspose.PSD for Java 20.5 - 发行说明

关键 摘要 类别
PSDJAVA-188 支持文档转换进度 特性
PSDJAVA-197 支持使用每通道16位的灰度ColorMode PSD图像保存 特性
PSDJAVA-198 支持Nvrt资源(反色调整层资源) 特性
PSDJAVA-200 支持图层组的图层蒙版 特性
PSDJAVA-195 修复将灰度ColorMode 16位每通道PSD图像保存为16位每通道RGB PSD格式时的问题 错误
PSDJAVA-196 修复将灰度ColorMode 16位每通道PSD图像保存为8位每通道灰度PSD格式时的问题 错误
PSDJAVA-199 通过ITextPortion进行文本对齐不适用于从右到左的语言。输出文件损坏。 错误
PSDJAVA-201 尝试打开具有Lab颜色和每通道8位的特定Psd文件时发生异常 错误

公共API更改

添加的API:

已删除的API:

用法示例:

PSDJAVA-188. 支持文档转换进度

 // 使用进度处理程序进行加载和保存操作的示例。

// 程序使用不同的保存选项触发进度事件。

String sourceFilePath = "Apple.psd";

ByteArrayOutputStream outputStream = new ByteArrayOutputStream();

// 创建一个将进度信息写入控制台的进度处理程序

ProgressEventHandler localProgressEventHandler = new ProgressEventHandler()

{

    @Override

    public void invoke(ProgressEventHandlerInfo progressInfo)

    {

        String message = String.format(

                "%s %s: %s out of %s",

                progressInfo.getDescription(),

                Enum.getName(EventType.class, progressInfo.getEventType()),

                progressInfo.getValue(),

                progressInfo.getMaxValue());

        System.out.println(message);

    }

};

System.out.println("---------- 加载 Apple.psd ----------");

PsdLoadOptions loadOptions = new PsdLoadOptions();

// 将进度处理程序绑定到显示加载进度

loadOptions.setProgressEventHandler(localProgressEventHandler);

// 使用特定的加载选项加载PSD

PsdImage image = (PsdImage)Image.load(sourceFilePath, loadOptions);

try

{

    System.out.println("---------- 保存 Apple.psd 为 PNG 格式 ----------");

    PngOptions pngOptions = new PngOptions();

    // 使输出图像有颜色且非透明

    pngOptions.setColorType(PngColorType.Truecolor);

    // 将进度处理程序绑定到显示保存进度

    pngOptions.setProgressEventHandler(localProgressEventHandler);

    // 使用特定特性将PSD转换为PNG

    image.save(outputStream, pngOptions);

    System.out.println("---------- 保存 Apple.psd 为 PSD 格式 ----------");

    PsdOptions psdOptions = new PsdOptions();

    // 使输出PSD有颜色

    psdOptions.setColorMode(ColorModes.Rgb);

    // 为每种颜色(红色、绿色和蓝色)加上一个通道,再加上一个复合通道

    psdOptions.setChannelsCount((short)4);

    // 将进度处理程序绑定到显示保存进度

    psdOptions.setProgressEventHandler(localProgressEventHandler);

    // 使用特定特性保存带有的PSD 副本

    image.save(outputStream, psdOptions);

}

finally

{

    image.dispose();

}

PSDJAVA-197. 支持使用每通道16位的灰度ColorMode PSD图像保存

 // 应用不同的颜色模式、每通道位数、通道计数和压缩组合的示例。

// 使一个方法能够从本地范围访问

class LocalScopeExtension

{

    void saveToPsdThenLoadAndSaveToPng(

            String file,

            short colorMode,

            short channelBitsCount,

            short channelsCount,

            short compression,

            int layerNumber)

    {

        String filePath = file + ".psd";

        String postfix = Enum.getName(ColorModes.class, colorMode) + channelBitsCount + "_" +

                channelsCount + "_" + Enum.getName(CompressionMethod.class, compression);

        String exportPath = file + postfix + ".psd";

        String pngExportPath = file + postfix + ".png";

        // 加载预定义的16位灰度PSD

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

        try

        {

            RasterCachedImage raster = layerNumber >= 0 ? image.getLayers()[layerNumber] : image;

            // 在图层周围绘制灰色内边框

            Graphics graphics = new Graphics(raster);

            int width = raster.getWidth();

            int height = raster.getHeight();

            Rectangle rect = new Rectangle(

                    width / 3,

                    height / 3,

                    width - (2 * (width / 3)) - 1,

                    height - (2 * (height / 3)) - 1);

            graphics.drawRectangle(new Pen(Color.getDarkGray(), 1), rect);

            // 保存带有特定特性的PSD副本

            PsdOptions psdOptions = new PsdOptions();

            psdOptions.setColorMode(colorMode);

            psdOptions.setChannelBitsCount(channelBitsCount);

            psdOptions.setChannelsCount(channelsCount);

            psdOptions.setCompressionMethod(compression);

            image.save(exportPath, psdOptions);

        }

        finally

        {

            image.dispose();

        }

        // 加载保存的PSD

        PsdImage image1 = (PsdImage)Image.load(exportPath);

        try

        {

            // 将保存的PSD转换为灰度PNG图片

            PngOptions pngOptions = new PngOptions();

            pngOptions.setColorType(PngColorType.GrayscaleWithAlpha);

            image1.save(pngExportPath, pngOptions); // 此处不应有异常

        }

        finally

        {

            image1.dispose();

        }

    }

}

LocalScopeExtension $ = new LocalScopeExtension();

$.saveToPsdThenLoadAndSaveToPng("grayscale5x5", ColorModes.Cmyk, (short)16, (short)5, CompressionMethod.RLE, 0);

$.saveToPsdThenLoadAndSaveToPng("argb16bit_5x5", ColorModes.Grayscale, (short)16, (short)2, CompressionMethod.RLE, 0);

$.saveToPsdThenLoadAndSaveToPng("argb16bit_5x5_no_layers", ColorModes.Grayscale, (short)16, (short)2, CompressionMethod.RLE, -1);

$.saveToPsdThenLoadAndSaveToPng("argb8bit_5x5", ColorModes.Grayscale, (short)16, (short)2, CompressionMethod.RLE, 0);

$.saveToPsdThenLoadAndSaveToPng("argb8bit_5x5_no_layers", ColorModes.Grayscale, (short)16, (short)2, CompressionMethod.RLE, -1);

$.saveToPsdThenLoadAndSaveToPng("cmyk16bit_5x5_no_layers", ColorModes.Grayscale, (short)16, (short)2, CompressionMethod.RLE, -1);

$.saveToPsdThenLoadAndSaveToPng("index8bit_5x5", ColorModes.Grayscale, (short)16, (short)2, CompressionMethod.RLE, -1);

PSDJAVA-198. 支持Nvrt资源(反色调整层资源)

 // 查找反色调整图层的NvrtResource的示例。

String inPsdFilePath = "InvertAdjustmentLayer.psd";

NvrtResource nvrtResource = null;

// 加载包含反色调整图层的预定义PSD

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

try

{

    // 尝试查找反色调整图层的资源

    for (Layer layer : psdImage.getLayers())

    {

        if (layer instanceof InvertAdjustmentLayer)

        {

            for (LayerResource layerResource : layer.getResources())

            {

                if (layerResource instanceof NvrtResource)

                {

                    // 找到NvrtResource

                    nvrtResource = (NvrtResource)layerResource;

                    break;

                }

            }

        }

    }

}

finally

{

    psdImage.dispose();

}

PSDJAVA-200. 支持图层组的图层蒙版

 // 支持图层组的图层蒙版的示例。该程序加载并保存PSD到不同的输出格式,不会抛出异常。

String srcFile = "psdnet595.psd";

String outputPng = "output.png";

String outputPsd = "output.psd";

// 加载包含图层组的图层蒙版的预定义PSD

PsdImage input = (PsdImage)Image.load(srcFile);

try

{

    // 将加载的PSD转换为PNG

    input.save(outputPng, new PngOptions());

    // 保存PSD的副本

    input.save(outputPsd);

}

finally

{

    input.dispose();

}

PSDJAVA-195. 修复将灰度ColorMode 16位每通道PSD图像保存为16位每通道RGB PSD格式时的问题

 // 将16位灰度PSD转换为16位RGB图像,然后再转换为16位灰度像素图像的示例。

String sourceFilePath = "grayscale5x5.psd";

String exportFilePath = "rgb16bit5x5_output.psd";

String pngExportPath = "rgb16bit5x5_output.png";

// 加载预定义的16位灰度PSD

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

try

{

    RasterCachedImage raster = image.getLayers()[0];

    // 在图层周围绘制灰色内边框

    Graphics graphics = new Graphics(raster);

    int width = raster.getWidth();

    int height = raster.getHeight();

    Rectangle rect = new Rectangle(width / 3, height / 3, width - (2 * (width / 3)) - 1, height - (2 * (height / 3)) - 1);

    graphics.drawRectangle(new Pen(Color.getDarkGray(), 1), rect);

    // 将颜色模式改为RGB保存PSD的副本

    PsdOptions psdOptions = new PsdOptions();

    psdOptions.setColorMode(ColorModes.Rgb);

    psdOptions.setChannelBitsCount((short)16);

    psdOptions.setChannelsCount((short)4);

    image.save(exportFilePath, psdOptions);

}

finally

{

    image.dispose();

}

// 加载保存的PSD

PsdImage image1 = (PsdImage)Image.load(exportFilePath);

try

{

    PngOptions pngOptions = new PngOptions();

    pngOptions.setColorType(PngColorType.GrayscaleWithAlpha);

    // 将保存的PSD转换为灰度PNG图片

    image1.save(pngExportPath, pngOptions); // 此处不应有异常

}

finally

{

    image1.dispose();

}

PSDJAVA-196. 修复将灰度ColorMode 16位每通道PSD图像保存为8位每通道灰度PSD格式时的问题

 // 将16位灰度PSD转换为8位灰度图像,然后再转换为8位灰度像素图像的示例。

String sourceFilePath = "grayscale16bit.psd";

String exportFilePath = "grayscale16bit_output.psd";

String pngExportPath = "grayscale16bit_output.png";

// 加载预定义的16位灰度PSD

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

try

{

    RasterCachedImage raster = image.getLayers()[0];

    // 在图层周围绘制灰色内边框

    Graphics graphics = new Graphics(raster);

    int width = raster.getWidth();

    int height = raster.getHeight();

    Rectangle rect = new Rectangle(width / 3, height / 3, width - (2 * (width / 3)) - 1, height - (2 * (height / 3)) - 1);

    graphics.drawRectangle(new Pen(Color.getDarkGray(), 1), rect);

    // 将通道计数改为8位保存PSD的副本

    PsdOptions psdOptions = new PsdOptions();

    psdOptions.setColorMode(ColorModes.Grayscale);

    psdOptions.setChannelBitsCount((short)8);

    psdOptions.setChannelsCount((short)2);

    image.save(exportFilePath, psdOptions);

}

finally

{

    image.dispose();

}

// 加载保存的PSD

PsdImage image1 = (PsdImage)Image.load(exportFilePath);

try

{

    PngOptions pngOptions = new PngOptions();

    pngOptions.setColorType(PngColorType.GrayscaleWithAlpha);

    // 将保存的PSD转换为灰度PNG图片

    image1.save(pngExportPath, pngOptions); // 此处不应有异常

}

finally

{

    image1.dispose();

}

PSDJAVA-199. 通过ITextPortion进行文本对齐不适用于从右到左的语言。输出文件损坏。

 // 通过ITextPortion对齐RTL文本图层的示例。程序修改加载的PSD中的现有RTL文本图层,并保存修改后的文档的副本。

String sourceFileName = "bidi.psd";

String outputFileName = "bidiOutput.psd";

// 加载包含RTL文本图层的预定义PSD

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

try

{

    // 从图层获取文本部分

    TextLayer layer = (TextLayer)image.getLayers()[2];

    ITextPortion[] portions = layer.getTextData().getItems();

    // 更改文本对齐方式

    portions[0].getParagraph().setJustification(2);

    // 应用更改到图层

    layer.getTextData().updateLayerData();

    // 保存修改后的PSD副本

    image.save(outputFileName);

}

finally

{

    image.dispose();

}

PSDJAVA-201. 尝试打开具有Lab颜色和每通道8位的特定Psd文件时发生异常

 // 支持LAB颜色模式中的8位Photoshop文档的示例。

String srcFile = "Untitled-1.psd";

String outputFilePsd = "output.psd";

// 加载具有LAB颜色模式的预定义8位PSD

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

try

{

    // 保存加载的PSD的副本

    psdImage.save(outputFilePsd);

}

finally

{

    psdImage.dispose();

}