1

我正在尝试在 Ubuntu 12.04 服务器上使用 ImageMagick 来动态创建简单的名片。这是通过 php 页面完成的。我尝试安装 MagickWand,但它并没有真正起作用,所以我现在使用 ImageMagick 语法并通过 PHP 函数执行它exec()

我取得了不错的进展,基本完成了或多或少,输出图像看起来还不错,现在正在微调,设置正确的位置,更改字体和大小等。

我们的图形人员希望文本是带有粗体标题的 Arial,所以我在服务器上安装了 msttcorefonts。从那时起,输出图像中的文本是斜体的,它忽略了我使用的任何字体。

奇怪的是:如果我将命令回显到页面,将其复制并粘贴到 ubuntu 控制台中,在那里创建的图像使用正确的字体,这正是我想要的。

因此,似乎当我通过控制台执行命令时,一切都很好,但是当我通过 PHP 在 PHP 中执行它时exec(),ImageMagick 似乎无法识别字体。有谁知道为什么?另外,如果它不识别字体,为什么它默认为斜体,或者,为什么在安装字体后默认值发生了变化?

这是我目前正在测试的命令(更改了名称和联系信息):

 convert                                                     \
    -size 1051x697                                           \
     xc:none                                                 \
    -density 300                                             \
    -fill white                                              \
     draw "rectangle 0,0 1051,697"                           \
    -fill black                                              \
    -font Arial-Negreta                                      \
    -pointsize 9                                             \
    -draw "text 140,175 'Hotel Example'"                     \
    -font Arial-Normal                                       \
    -pointsize 6                                             \
    -draw "text 140,220 'Example Street 8'"                  \
    -draw "text 140,240 '12345 Exampletown'"                 \
    -draw "text 140,280 'Telefon: 123 45 67 89 0'"           \
    -draw "text 140,300 'Fax: 234 56 78 90'"                 \
    -draw "text 140,340 'http://www.example.de'"             \
    -draw "text 140,360 'hotel-example@example.de'"          \
    -stroke none -fill orange -draw "rectangle 1,32 1050,75" \
    -fill grey                                               \
    -draw "rectangle 1,75 1050,100"                          \
    -fill orange                                             \
    -draw "rectangle 1,626 1050,665"                         \
     test_front.png

编辑:

我刚刚注意到从 Ubunut 控制台运行命令也只能在我的主目录中运行,而不是在我的 /var/www 目录中。正如 APiK 指出的那样,这可能是用户的事情。

4

2 回答 2

3

看起来您仅为特定用户安装了字体。尝试在控制台和 PHP 脚本中运行此命令:

# This will show you all the available fonts for ImageMagick
$ convert -list type

或者你也可以直接指定TTF字体:

$ convert -font /path/to/your/fonts.ttf
于 2012-08-31T12:52:42.320 回答
1

我怀疑你的字体名称Arial-Fett并且Arial-Standard被 ImageMagick 识别。

要查看已知 Arial 字体的哪些名称,convert请先运行以下命令:

convert -list font | grep -i arial

在我的系统(Mac OS Lion)上,我得到以下结果:

  [....]
  Font: Arial-Narrow-Negreta-cursiva
    family: Arial Narrow
    glyphs: /Library/Fonts/Arial Narrow Bold Italic.ttf
  Font: Arial-Narrow-Normal
    family: Arial Narrow
    glyphs: /Library/Fonts/Arial Narrow.ttf
  Font: Arial-Negreta
    family: Arial
    glyphs: /Library/Fonts/Arial Bold.ttf
  Font: Arial-Negreta-cursiva
    family: Arial
    glyphs: /Library/Fonts/Arial Bold Italic.ttf
  Font: Arial-Normal
    family: Arial
    glyphs: /Library/Fonts/Arial.ttf
  [....]

使用 ImageMagick,您只能应用这两种方法来指定要使用的字体:

  • ...要么使用标签后出现的名称Font:

  • ...或使用出现在标记后的特定字体文件的路径+名称glyphs:(如果文件名或路径使用空格,请将其括在引号中!)。

所以在我的系统上,为了你-font Arial-Standard我必须使用任何一个

-font Arial-Normal
-font /Library/Fonts/Arial.ttf

而不是你的-font Arial-Fett我不得不使用任何一个

-font Arial-Negreta
-font "/Library/Fonts/Arial Bold.ttf"

当然,在您的系统上,这可能会有所不同(尤其是在 Windows 或 Linux 上)。这就是为什么你必须验证使用convert -list font...

于 2012-09-01T00:54:06.600 回答