我是否可以将一个图像添加到指定的智能对象图层中的指定位置并导出图像?
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);
}
}
}
根据测试,不是把图片插入到图层指定位置的问题,而是aspose.psd for .net中替换智能对象层后保存出来的图片与在Photoshop里直接替换智能对象层保存出来的图片效果不一致,这似乎是api的问题,当我把图层里的图片进行变形时api保存出的图片效果不正确,但如果使用扭曲时保存的效果是正确的,所以测试的结果似乎是api对变形效果支持的不好!附件中,1.jpg是我从photoshop保存出来的效果,2.jpg是api保存出来的效果,3.png是要替换智能对象图层的图象,2 .psd为测试psd例子。test.zip (4.0 MB)
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);
以上是我的代码!
我还有一个问题,就是图片分辨率超过1500px就容易引发内存不足的问题,我该怎么优化防止内存不足问题呢?我系统内存16G,window service 2019
@jclwyygxs
不幸的是,目前没有解决方案,Aspose.PSD也受限制。 如果只需要查看图像,则可以使用ReadOnlyMode,但为了进行编辑,我们在问题跟踪系统中添加了ID为PSDNET-836的票证,以进一步调查问题。 该线程已与问题联系在一起,因此一旦问题解决,您可能会收到通知。