Я поддерживаю сайт Umbraco, который содержит простую функцию водяных знаков, реализованную в Image Processor.Это работает в Umbraco 7.4.2 через скомпилированную библиотеку, для которой у меня нет исходного кода.После обновления Umbraco до 7.12.3 он больше не работает.Я ищу простое объяснение или подсказки о том, что может быть причиной.
Версии ImageProcessor и ImageProcessor.Web не изменились (2.6.2.25 и 4.9.3.25) и ImageProcessor.Web.Config (2.4.1.19) без изменений.
Казалось бы, реализована запись в файле \ config \ ImageProcessor \ processing.config следующим образом:
<processing preserveExifMetaData="false" fixGamma="false" interceptAllRequests="true">
<presets>
</presets>
<plugins>
<plugin name="SecurityWatermark" type="MMUmbracoLibrary.Imaging.Web.Processors.SecurityWatermark, MMUmbracoLibrary">
<settings>
<setting key="WatermarkVirtualPath" value="~/app_data/watermark.png" />
</settings>
Просмотр библиотеки с помощью DotPeek Iсм. источник метода в следующем:
using ImageProcessor.Processors;
using ImageProcessor.Web.Processors;
using System.Text.RegularExpressions;
namespace MMUmbracoLibrary.Imaging.Web.Processors
{
public class SecurityWatermark : IWebGraphicsProcessor
{
private static readonly Regex QueryRegex = new Regex(".+", RegexOptions.Compiled);
public SecurityWatermark()
{
this.Processor = (IGraphicsProcessor) new MMUmbracoLibrary.Imaging.Processors.SecurityWatermark();
}
public Regex RegexPattern
{
get
{
return SecurityWatermark.QueryRegex;
}
}
public int SortOrder
{
get
{
return 0;
}
private set
{
}
}
public IGraphicsProcessor Processor { get; private set; }
public int MatchRegexIndex(string queryString)
{
return this.SortOrder;
}
}
}
Также этот код из DotPeek, вероятно, является наиболее важной частью:
namespace MMUmbracoLibrary.Imaging.Processors
{
public class SecurityWatermark : IGraphicsProcessor
{
public object DynamicParameter { get; set; }
public Dictionary<string, string> Settings { get; set; }
public Image ProcessImage(ImageFactory factory)
{
IMedia mediaByPath = ApplicationContext.Current.Services.MediaService.GetMediaByPath(HttpContext.Current.Request.Path);
if (mediaByPath == null)
throw new HttpException(404, "No image found");
if ((int) mediaByPath.Properties["disableWatermark"].Value != 0)
return factory.Image;
string filename = HttpContext.Current.Server.MapPath(this.Settings["WatermarkVirtualPath"]);
ImageLayer imageLayer = new ImageLayer()
{
Image = (Image) new Bitmap(filename),
Opacity = 100,
Size = factory.Image.Size
};
return factory.Overlay(imageLayer).Image;
}
}
}
Если честно, этот код не делаетмного смысла для меня, но, похоже, работает.Кто-нибудь может подсказать, как обновление Umbraco могло заставить это перестать работать?