您好!
我们公司正在评测Aspose.psd框架,想要完成如下功能:
我有原文件src.psd,想要达到dest.psd的效果,在photoshop中,可能通过创建剪贴蒙版来实现,但我在aspose.psd框架中,没能找到好的解决方案,请问使用Aspose.psd框架,要达到这个效果,该怎么做呢?能给我写一个代码片断吗?非常感谢!
psd文件如下:
temp.zip (1.5 MB)
您好!
我们公司正在评测Aspose.psd框架,想要完成如下功能:
我有原文件src.psd,想要达到dest.psd的效果,在photoshop中,可能通过创建剪贴蒙版来实现,但我在aspose.psd框架中,没能找到好的解决方案,请问使用Aspose.psd框架,要达到这个效果,该怎么做呢?能给我写一个代码片断吗?非常感谢!
psd文件如下:
temp.zip (1.5 MB)
@zhangzhifeng 这里是从 C# 到 Java 的移植代码:
void addRasterMask(LayerMaskData mask, LayerMaskDataShort newShortMask) {
LayerMaskData mask = layer.getLayerMaskData();
LayerMaskDataFull fullMask = mask instanceof LayerMaskDataFull ? (LayerMaskDataFull) mask : null;
boolean hasRasterMask = fullMask != null ||
(mask != null && (mask.getFlags() & LayerMaskFlags.UserMaskFromRenderingOtherData) == 0);
if (hasRasterMask) {
System.out.println("This layer has a raster mask already, updating.");
}
if (mask != null) {
if (fullMask != null) {
// let's update user raster mask in a full one.
fullMask.setRealFlags(newMask.getFlags());
fullMask.setDefaultColor(newMask.getDefaultColor());
fullMask.setUserMaskRectangle(newMask.getMaskRectangle());
fullMask.setUserMaskData(newMask.getImageData());
newMask = fullMask;
} else if ((mask.getFlags() & LayerMaskFlags.UserMaskFromRenderingOtherData) != 0) {
// let's convert the short raster mask to a full one.
fullMask = new LayerMaskDataFull();
fullMask.setFlags(mask.getFlags());
fullMask.setMaskRectangle(mask.getMaskRectangle());
fullMask.setImageData(mask.getImageData());
fullMask.setRealFlags(newMask.getFlags());
fullMask.setDefaultColor(newMask.getDefaultColor());
fullMask.setUserMaskRectangle(newMask.getMaskRectangle());
fullMask.setUserMaskData(newMask.getImageData());
newMask = fullMask;
}
}
// Adds or updates a mask
layer.addLayerMask(newMask);
}
非常感谢您的回复,我们会做进一步的验证开发,如有不懂的地方,再请教您!再次感谢!
好的,我们正在初步了解该框架,也还会进一步做详细了解,如有需求,我会联系你们的,感谢!
请问这个问题解决了不,上面的代码未成功呢,请指教,我是用的net
您能否提供您尝试使用的代码、输入文件和预期结果
输入文件: input.png, template.psd, 期望输出文件: output&spotColor.psd, 这三个文件已打包上传到附件。
用.net 或Java, 或C++ 都可以接受。只要能实现上面的期望输出即可。
能写一个现实期望输出的代码示例吗?
谢谢!
temp.zip (7.9 MB)
请检查以下代码
using (var psdImage = (PsdImage)Image.Load("template.psd", new PsdLoadOptions() { LoadEffectsResource = true }))
{
using (var fs = new FileStream(@"input.png", FileMode.Open))
{
fs.Position = 0;
var layer = new Layer(fs);
{
var maskLayer = psdImage.Layers[0];
var mask = maskLayer.LoadArgb32Pixels(maskLayer.Bounds);
// Get the byte mask
var byteMask = mask.Select(it => (byte)(it >> 24)).ToArray();
var layerMask = new LayerMaskDataShort();
var maskBounds = maskLayer.Bounds;
maskBounds.Offset(maskLayer.Left, maskLayer.Top);
layerMask.MaskRectangle = maskBounds;
layerMask.ImageData = byteMask;
layer.AddLayerMask(layerMask);
var layers = new List<Layer>(psdImage.Layers);
layers.Add(layer);
layers.RemoveAt(0);
psdImage.Layers = layers.ToArray();
}
}
psdImage.Save(output);
}