Применить штрих к заголовку: используя MagickWand - PullRequest
0 голосов
/ 27 августа 2018

ImageMagick позволяет применять подпись к изображению.Текст заголовка автоматически изменяется и переносится в соответствии с областью, которую вы определяете.

Используя ImageMagick через командную строку, я могу определить ширину и цвет обводки для этой надписи следующим образом:

convert -size 300x300 -stroke black -strokewidth 1 -fill white \
    -background transparent -gravity center \
    caption:"This is a test of the caption feature in ImageMagick" ~/out.png

This image is the output from the command, for reference.

Я не могу найтив любом месте онлайн, как применить эти атрибуты, используя привязки MagickWand C.Я могу создать подпись и изменить ее шрифт и цвет шрифта, но не могу понять, как добавить обводку.

Я хочу знать эту информацию, чтобы добавить поддержку этого в привязки Wand для Python.Я был бы открыт к альтернативному способу выполнения текста с автоматическими размерами с гравитацией и ударом, но предпочтительно не требующим неэлегического обходного пути или внешнего программного обеспечения.

В качестве дополнительной информации я использую ImageMagick 6.9.10-10 дляmacOS 10.13.6 установлен через Homebrew.

1 Ответ

0 голосов
/ 27 августа 2018

Технически вы несете ответственность за построение контекста рисования и вычисление переноса слов.Обычно, вызывая MagickQueryMultilineFontMetrics.

Однако протокол caption: был предоставлен как кратчайший путь.Вы можете просмотреть исходный код , чтобы увидеть, как выполнить такие вычисления, но если вам это не интересно, можно быстро взломать решение с помощью MagickSetOption, прежде чем вызывать методы Image Read.

СC

#include <wand/MagickWand.h>

int main(int argc, const char * argv[]) {
    MagickWandGenesis();
    MagickWand * wand;
    wand = NewMagickWand();
    // -size 300x300
    MagickSetSize(wand, 300, 300);
    // -stroke black
    MagickSetOption(wand, "stroke", "BLACK");
    // -strokewidth 1
    MagickSetOption(wand, "strokewidth", "1");
    // -fill white
    MagickSetOption(wand, "fill", "WHITE");
    // -background transparent
    MagickSetOption(wand, "background", "TRANSPARENT");
    // -gravity center
    MagickSetGravity(wand, CenterGravity);
    // caption:"This is a test of the caption feature in ImageMagick"
    MagickReadImage(wand, "caption:This is a test of the caption feature in ImageMagick");
    // ~/out.png
    MagickWriteImage(wand, "~/out.png");
    wand = DestroyMagickWand(wand);
    MagickWandTerminus();
    return 0;
}

С wand

from wand.image import Image
from wand.api import library

with Image() as img:
    # -size 300x300
    library.MagickSetSize(img.wand, 300, 300)
    # -stroke black
    library.MagickSetOption(img.wand, b"stroke", b"BLACK")
    # -strokewidth 1
    library.MagickSetOption(img.wand, b"strokewidth", b"1")
    # -fill white
    library.MagickSetOption(img.wand, b"fill", b"WHITE")
    # -background transparent
    library.MagickSetOption(img.wand, b"background", b"TRANSPARENT")
    # -gravity center
    img.gravity = "center"
    # caption:"This is a test of the caption feature in ImageMagick"
    img.read(filename="caption:This is a test of the caption feature in ImageMagick")
    # ~/out.png
    img.save(filename="~/out.png")
...