Я использую C# и Magick.Net для комментирования изображений следующим образом:
var text = "Variable text";
var img = new MagickImage("image.jpg");
img.FontPointsize = 50;
img.FillColor = new MagickColor(Color.White);
img.Annotate(text, Gravity.Northwest);
Аннотации работают, однако текст не всегда легко читается, так как он может сливаться с изображением.
В руководстве ImageMagick есть полный раздел, предлагающий решения для этого:
Контурная этикетка
convert dragon.gif -gravity south \ -stroke '#000C' -strokewidth 2 -annotate 0 'Faerie Dragon' \ -stroke none -fill white -annotate 0 'Faerie Dragon' \ anno_outline.jpg
Нарисовать затемненное поле
convert dragon.gif \ -fill '#0008' -draw 'rectangle 5,128,114,145' \ -fill white -annotate +10+141 'Faerie Dragon' \ anno_dim_draw.jpg
(Я бы использовал этот метод, только если ничего не работает, потому что он требует явного определения ширины и высоты прямоугольника.)
Подцветка
convert dragon.gif -fill white -undercolor '#00000080' -gravity South \ -annotate +0+5 ' Faerie Dragon ' anno_undercolor.jpg
Составной ярлык
convert -background '#00000080' -fill white label:'Faerie Dragon' miff:- |\ composite -gravity south -geometry +0+3 \ - dragon.gif anno_composite.jpg
Подпись с автоматическим размером
width=`identify -format %w dragon.gif`; \ convert -background '#0008' -fill white -gravity center -size ${width}x30 \ caption:"Faerie Dragons love hot apple pies\!" \ dragon.gif +swap -gravity south -composite anno_caption.jpg
Причудливый ярлык
convert -size 100x14 xc:none -gravity center \ -stroke black -strokewidth 2 -annotate 0 'Faerie Dragon' \ -background none -shadow 100x3+0+0 +repage \ -stroke none -fill white -annotate 0 'Faerie Dragon' \ dragon.gif +swap -gravity south -geometry +0-3 \ -composite anno_fancy.jpg
Любой из вышеперечисленных подходов меня устроит. Однако я не могу найти требуемую функциональность, представленную в .Net API. Например, я попытался установить BackgroundColor перед вызовом Annotate. Это не произвело никакого эффекта:
img.BackgroundColor = new MagickColor(Color.Black);
Я хотел бы получить несколько советов о том, как реализовать любой метод, улучшающий читаемость текста аннотации, с помощью Magick.Net.
StrokeColor
добавил контур вокруг каждой буквы, и это улучшает читаемость. Однако для моего текущего приложения я предпочитаю составную метку, как показано ниже. Также спасибо за создание Magick.Net. - person user1942447   schedule 26.09.2014