Aspose.psd for .net 替换智能对象图层问题

我是否可以将一个图像添加到指定的智能对象图层中的指定位置并导出图像?

@jclwyygxs
能否请您分享您要使用Aspose.PSD API实现的要求的详细信息。 如果可能,请共享您要使用API实现的源文件和所需的输出文件。

using (PsdImage image = (PsdImage)PsdImage.Load(filePath))
{
for (int i = 0; i < image.Layers.Length; i++)
{
var layer = image.Layers[i];

                //if(layer.DisplayName=="素材")
                if (image.Layers[i].GetType().Name.Contains("SmartObjectLayer"))
                {
                    SmartObjectLayer smartObjectLayer = (SmartObjectLayer)image.Layers[i];

                    if (i % 2 == 1)
                    {
                        smartObjectLayer.ReplaceContents(newContentPath); //这里更新智能对象图层,如果需要更新到指定位置,应该怎么写?

                    }
                    else
                    {
                        smartObjectLayer.ReplaceContents(newContentPath);  
                    }
                }
            }

@jclwyygxs

根据之前的要求,能否请您共享您正在使用的源文件以及您想使用该API实施的生成的输出文件。

根据测试,不是把图片插入到图层指定位置的问题,而是aspose.psd for .net中替换智能对象层后保存出来的图片与在Photoshop里直接替换智能对象层保存出来的图片效果不一致,这似乎是api的问题,当我把图层里的图片进行变形时api保存出的图片效果不正确,但如果使用扭曲时保存的效果是正确的,所以测试的结果似乎是api对变形效果支持的不好!附件中,1.jpg是我从photoshop保存出来的效果,2.jpg是api保存出来的效果,3.png是要替换智能对象图层的图象,2 .psd为测试psd例子。test.zip (4.0 MB)

@jclwyygxs

您能否分享一下我们可能会在此使用的示例代码来重现问题,并在这方面进一步帮助您。

        string filePath = "2.psd";
        var newContentPath = "3.png";
        var pngOutputPath = "2.jpg";
        using (PsdImage image = (PsdImage)PsdImage.Load(filePath))
        {
            for (int i = 0; i < image.Layers.Length; i++)
            {
                var layer = image.Layers[i];
                if (image.Layers[i].GetType().Name.Contains("SmartObjectLayer"))
                {
                    SmartObjectLayer smartObjectLayer = (SmartObjectLayer)image.Layers[i];

                    if (i % 2 == 1)
                    {
                        smartObjectLayer.ReplaceContents(newContentPath);

                    }
                    else
                    {
                        smartObjectLayer.ReplaceContents(newContentPath);
                    }
                }
            }
            var jpegOptions = new JpegOptions();
            jpegOptions.Quality = 50;
            image.Save(pngOutputPath, jpegOptions);

以上是我的代码!

@jclwyygxs

在我们的问题跟踪系统中,创建了一个ID为PSDNET-834的复选框,以进一步调查和解决问题。 该线程已与问题联系在一起,因此一旦问题解决,您可能会收到通知。

我还有一个问题,就是图片分辨率超过1500px就容易引发内存不足的问题,我该怎么优化防止内存不足问题呢?我系统内存16G,window service 2019

@jclwyygxs
不幸的是,目前没有解决方案,Aspose.PSD也受限制。 如果只需要查看图像,则可以使用ReadOnlyMode,但为了进行编辑,我们在问题跟踪系统中添加了ID为PSDNET-836的票证,以进一步调查问题。 该线程已与问题联系在一起,因此一旦问题解决,您可能会收到通知。