对不起,我没有明白你的意思吗? 您能解释一下它的意思吗?可以序列化但不能反序列化。
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); }
- 期望结果:
nvwangNewTextUpdateExpect.jpg (277.6 KB)
3.实际结果:
nvwangNewTextUpdateResult.jpg (306.7 KB)
PS:看清需求,希望一步到位解决,给出实际效果的源代码示例。谢谢,关乎购买服务商务合同签订。
目前我们产品待实现的需求,仅剩此问题,加文本层文字支持多行\r不限长度内容替换了。忘这两个问题优先紧急处理,谢谢。
收到,非常感谢,期待答案。刚也验证过了,换行通过如上textData.getItems()方式的确可以了。现问题就只在于loadPsd源文件对象PsdImage->byte[]->PsdImage这块了。加油,敬请期待。
对于序列化,我已经添加了新票证,请按照有关更新的主题进行操作。
您好,请问下进度如何了?