Psd文件解析出来的图层对象Layer,无法序列化

@jsczxielong

对不起,我没有明白你的意思吗? 您能解释一下它的意思吗?可以序列化但不能反序列化。

0.场景需求:PsdImage对象-》((PsdImage) Image.load(sourceFileName,loadOptions),存储为byte[],转存new String(bytes, “UTF-8”),持久化存储,然后再String->byte[]->PsdImage,进行图层的操作(文本层文字替换、图片层图片替换等)。
1.源代码:

public static void main(String[] args) throws FileNotFoundException 
{
    License license = new License();
    String licFileDir = "E:\\mysite\\openproj\\Aspose.PSD-for-Java\\Examples\\src\\main\\resources\\Lic\\Aspose.Total.Product.Family.lic";
    license.setLicense(licFileDir);
    String dataDir = "E:\\mysite\\openproj\\Aspose.PSD-for-Java\\Examples\\src\\main\\resources\\PSD\\";
    String sourceFileName = dataDir + "nvwangJy.psd";
    String exportPath = dataDir + "nvwangNewTextUpdateResult.png";
    PsdLoadOptions loadOptions = new PsdLoadOptions();
    //Try this
    //loadOptions. setLoadEffectsResource(true);
    PsdImage image1 =(PsdImage) Image.load(sourceFileName,loadOptions);

    byte[] layerBytes;
    MemoryStream layerMem = new MemoryStream();
    OutputStream dstStream = layerMem.toOutputStream();
    image1.save(dstStream, new PsdOptions());
    layerBytes = layerMem.toArray();
    //layerMem = new MemoryStream(layerBytes);
    InputStream inputStream = new ByteArrayInputStream(layerBytes);
    PsdImage image = new PsdImage(inputStream);

    for(int i=0; i < image.getLayers().length; i++ )
    {
        Layer layer = (Layer) image.getLayers()[i];
        System.out.println(i + "DisplayName:" + layer.getDisplayName() + "name:" + layer.getName());
        if (i == 11 && image.getLayers()[i] instanceof TextLayer)
        {
            TextLayer textLayer = (TextLayer)image.getLayers()[i];
            Point leftTopCoordinate = new Point();
            leftTopCoordinate.setX(textLayer.getLeft());
            leftTopCoordinate.setY(textLayer.getTop());
            textLayer.updateText("靠你就是我\r我的\r你的", leftTopCoordinate, ((TextLayer)textLayer).getFont().getSize(), ((TextLayer)textLayer).getTextColor());
        }
    }
    PngOptions options = new PngOptions();
    options.setColorType(PngColorType.TruecolorWithAlpha);

    image.save(exportPath,options);
}
  1. 期望结果:
    nvwangNewTextUpdateExpect.jpg (277.6 KB)

3.实际结果:
nvwangNewTextUpdateResult.jpg (306.7 KB)

PS:看清需求,希望一步到位解决,给出实际效果的源代码示例。谢谢,关乎购买服务商务合同签订。
目前我们产品待实现的需求,仅剩此问题,加文本层文字支持多行\r不限长度内容替换了。忘这两个问题优先紧急处理,谢谢。

@jsczxielong

我已经通过以下线程分享了针对同一问题的反馈。 这是API中的问题,我们将尽快与您分享反馈。

收到,非常感谢,期待答案。刚也验证过了,换行通过如上textData.getItems()方式的确可以了。现问题就只在于loadPsd源文件对象PsdImage->byte[]->PsdImage这块了。加油,敬请期待。

对于序列化,我已经添加了新票证,请按照有关更新的主题进行操作。

恩,好的,直接以示例代码方式提供即可。非常感谢您

获取 Outlook for iOS

@xielong

一旦包含支持,我们将与您分享好消息。

您好,请问下进度如何了? :grin:

@jsczxielong

您已经在关注以下线程以解决同一问题,并且我们已经共享了反馈。