2017-03-28 40 views
1

我有一个Azure函数,它试图使用ImageResizer 3.4.3版向现有图像添加水印。该函数无误地执行,但不应用水印。下面是代码,从here沿着以下:至于为什么不施加水印ImageResizer水印不出现

private static void ApplyWatermark(Stream inputStream, string blobName) 
{ 
    var imageConfiguration = Config.Current; 
    var plugin = imageConfiguration.Plugins.Get<WatermarkPlugin>(); 
    if (plugin == null) 
    { 
     plugin = new WatermarkPlugin(); 
     plugin.Install(imageConfiguration); 
    } 
    plugin = imageConfiguration.Plugins.Get<WatermarkPlugin>(); 
    var imageLayer = new ImageLayer(imageConfiguration) 
    { 
     Path = HostingEnvironment.MapPath(_configuration.Get<string>("BadgeUrl")), 
     Align = ContentAlignment.MiddleCenter 
    }; 
    plugin.NamedWatermarks["badge"] = new Layer[] 
    { 
     imageLayer 
    }; 
    inputStream.Position = 0; 
    var outputStream = new MemoryStream(); 
    imageConfiguration.CurrentImageBuilder.Build(inputStream, outputStream, 
     new ResizeSettings("watermark=badge")); 
    outputStream.Position = 0; 
    _blobStorageRepository.AddorUpdateAsync(_configuration.BlobStorageContainer, 
     blobName, outputStream).Wait(); 
} 

任何想法?

+0

你试过4.0吗?可能有一个相关的错误修正。 –

+0

另外,我不认为你可以给ImageLayers物理路径;他们需要是虚拟的(移除MapPath调用)。 –

+0

@NathanaelJones,使用虚拟路径解决了问题。还有一个问题 - 为什么图像大小会从3.8MB缩小到1.5MB? –

回答

0

水印插件需要像'〜/ azure/blobimage.jpg'这样的虚拟路径。它不接受可能位于应用程序根目录或已安装文件夹之外的物理路径。