Imagemagick - Same命令在PHP或控制台中提供不同的输出

时间:2012-08-31 12:11:31

标签: php image imagemagick ubuntu-12.04

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

我取得了很好的进展,并且或多或少地完成了基础知识,输出图像看起来还不错,现在正在调整,设置正确的位置,更改字体和大小等等。

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

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

所以,似乎当我通过控制台执行命令时,一切都很好,但是当我通过exec()在PHP中执行它时,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指出的那样,它可能是用户的事情。

2 个答案:

答案 0 :(得分:3)

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

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

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

$ convert -font /path/to/your/fonts.ttf

答案 1 :(得分:1)

我怀疑您的字体名称Arial-FettArial-Standard是否被ImageMagick识别。

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

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 ...

进行验证的原因