Free Support Forum - aspose.com

TextLayer->byte[]->TextLayer报错

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 + “nvwangNewTextUpdateTwoResult.png”;
PsdLoadOptions loadOptions = new PsdLoadOptions();
//Try this
//loadOptions.setLoadEffectsResource(true);
PsdImage image =(PsdImage) Image.load(sourceFileName,loadOptions);

    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];
            System.out.println("this is a textLayer");

            byte[] layerBytes;
            MemoryStream layerMem = new MemoryStream();
            OutputStream dstStream = layerMem.toOutputStream();
            textLayer.save(dstStream, new PsdOptions());
            layerBytes = layerMem.toArray();
            layerMem = new MemoryStream(layerBytes);
            //InputStream inputStream = new ByteArrayInputStream(layerBytes);
            //textLayer =  new Layer(layerMem);
            textLayer = (TextLayer)new Layer(layerMem.toInputStream());

            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);
}

2.源psd文件:
nvwangJy.zip (2.6 MB)

3.实际结果:
image.png (8.6 KB)

4.期望结果:
nvwangNewTextUpdateExpect.jpg (277.6 KB)

PS:希望官方有支持TextLayer、Layer、PsdImage->byte[]->反序列化源对象(源TextLayer、Layer、PsdImage)。和达到LoadPsd源文件的图层操作效果。说白了,Image.load(sourceFileName,loadOptions)出来的图层结果和图层layerBytes[]转换出来的Layer图层一致。即底层对象序列化,反序列化结果内存地址一致、属同一引用对象。

PS.如下示例列形象地说明,我们预期想要的结果:
代码如下:
public class JsonText {

public static void main(String[] args) {
    User user = new User();
    user.setId(1);
    user.setUserName("xl");
    user.setAge(18);
    System.out.println("serialization before:" + user.getUserName());

    Gson gson = new Gson();
    String userString = gson.toJson(user);
    user = gson.fromJson(userString, User.class);
    System.out.println("serialization after:" + user.getUserName());
}

@Data
public static class User {
    private int id;
    private String userName;
    private int age;
}

}

PS:源对象User和序列化、反序列化原User对象一致。我们希望PadImage、Layer、TextLayer等亦能如此。

@jsczxielong

我们很遗憾地分享,目前请求的序列化支持在API中不可用。 我已经在我们的问题跟踪系统中创建了ID为PSDJAVA-325的票证,以提供所需的支持。 该线程已与问题联系在一起,因此一旦支持可用,您可能会收到通知。

收到,非常感谢,期待答案。

@jsczxielong

解决该问题后,我们将立即共享更新。

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

@jsczxielong

该问题最近已添加到我们的问题跟踪系统中,正在等待调查。 这是一个新功能请求,将需要一些时间来实现。

请问下,图层的序列化,修复得如何了?

@jsczxielong

这是一项新功能请求,目前正在我们的问题队列中待处理。 我们要求您耐心等待,并将尽快与您分享反馈。

有无计划安排?大概何时修复,测试并上线提供新版本Jar包?好向上给领导个回复,然后走商务合同,此问题最紧急,若此解决,性能、效率等问题就有一个质的提升了。

@jsczxielong

我可能无法分享团队何时要实现此新功能支持。 我们始终倾向于为客户提供便利,但产品团队会根据其路线图确定优先级并计划事情。 如果您应该尽快实施该支持,则可以随时考虑选择企业付费支持服务。