We're sorry Aspose doesn't work properply without JavaScript enabled.

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

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

若购买了企业付费支持服务,此问题大概何时可修复掉,另外,所有问题是否第一时间修复并提供增量jar包?

@jsczxielong

企业支持可确保快速响应。 如果有新功能要求,并且花费的时间不多,则与免费支持相比,该团队倾向于提供尽可能快的支持。

恩,好的,那可否麻烦贵公司、团队综合评估下此序列化问题以及我提出的其他几个问题,修复时间大概需要多久,何时可给个OK的版本jar包?然后我们这边根据反馈,立马购买企业服务支持。

@jsczxielong

我需要您的耐心,因为目前我们正处于发布与Java的最新 for .NET API一致的Aspose.PSD for Java最新版本的阶段。 之后,团队将分析新的请求,然后将能够给出任何预计到达时间。 我要求您耐心等待,并将在与您分享反馈后尽快与您分享。

恩,好的,那麻烦贵公司及团队一旦有具体的修复时间麻烦第一时间回复下,我们这边根据回馈第一时间反馈走商务流程。

@jsczxielong

我们要求您耐心等待,一旦问题解决,我们将与您分享反馈。