2

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

此图像是命令的输出,供参考。

我无法在网上找到如何使用 MagickWand C 绑定应用这些属性。我可以创建标题并更改其字体和字体颜色,但我不知道如何添加笔触。

我想知道这些信息,以便为 Python 的 Wand 绑定添加对此的支持。我愿意接受另一种方法来完成具有重力和笔划的自动调整大小的文本,但最好不需要不雅的解决方法或外部软件。

作为进一步的信息,我在通过 Homebrew 安装的 macOS 10.13.6 上使用 ImageMagick 6.9.10-10。

4

1 回答 1

1

从技术上讲,您将负责构建绘图上下文并计算自动换行。通常通过调用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")
于 2018-08-27T15:07:13.853 回答