2012-08-31 39 views
1

我試圖在Ubuntu 12.04服務器上使用ImageMagick動態創建簡單的名片。這是通過一個PHP頁面完成的。我試圖安裝MagickWand,但它並沒有真正的工作,所以我現在使用ImageMagick語法並通過PHP函數exec()執行它。Imagemagick - 相同的命令在PHP或控制檯中給出不同的輸出

我取得良好的進展,並有基本或多或少完成,輸出圖像看起來還好,我現在微調,正確的設置位置,改變字體和大小等

我們的平面人希望該文本以粗體標題顯示在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 '[email protected]'"   \ 
    -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指出的那樣,這可能是用戶的事情。

+0

我想upvote它。問題是,我只是剛剛註冊,而當我嘗試註冊時,我只收到一條消息,告訴我至少需要15個聲望。 – Christian

+0

啊......我不知道你需要15個聲望點才能被允許upvote ... –

回答

3

它看起來像只安裝了特定用戶的字體。 嘗試在控制檯和PHP腳本運行此命令:

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

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

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

啊,這也解釋了爲什麼它只在我的主目錄下才有效,我只注意到(見編輯)。我非常新的Linux以及ImageMagick,所以我在這裏的兩條戰線都有點戰鬥:)謝謝你的提示,我現在嘗試使用完整的路徑。 有沒有辦法讓字體可供所有用戶使用,還是我必須重新安裝它們? – Christian

+0

如果你已經使用'$ sudo apt-get install msttcorefonts'安裝了字體,那麼它應該可以工作。 您可以嘗試運行:'$ sudo fc-cache -fv'來重新生成字體緩存。 PHP'exec('convert -list type')'的輸出是什麼? – APiK

+0

是的,我使用apt-get。我不得不使用'convert -list font'作爲命令。我試圖在PHP和我的命令行中比較結果。然後我看到字體可以在兩者中找到,但由於某種原因以不同的名稱。在Ubuntu輸出中,它被稱爲「Arial-Fett」和「Arial-Standard」,而在PHP輸出中,正確的名稱是「Arial-Negreta」和「Arial-Normal」。我不知道名稱差異來自哪裏,但是當我使用正確的名稱時,它可以正常工作。感謝您向正確的方向推動我! – Christian

1

我懷疑你的字體名稱Arial-FettArial-Standard通過ImageMagick的確認。

要查看這爲Arial字體面孔名字已知convert,先運行此命令:

convert -list font | grep -i arial 

在我的系統(在Mac OS獅子),我得到這樣的結果:

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

+0

是的,這是問題所在。我首先嚐試了「識別列表字體」,並在該列表中確實說出了「Arial-Fett」,這就是爲什麼我對ImageMagick無法識別它感到困惑。那麼,「轉換」「翻譯」本地化名稱爲標準嗎?或者就此而言,爲什麼系統上甚至有不同的名稱?我原以爲我會有一個本地化的名字或一個標準的英文名字,而不是兩個。 – Christian

+0

@Christian:我真的很驚訝你的發現。我想我會在ImageMagick論壇詢問它。 (如果你真的在你的環境中看到「Arial-Fett」,那麼我希望這個名字也起作用。) –

+0

顯然,在我的主目錄中使用它時我只能找到它。任何地方,所有的投注都關閉,這就是爲什麼從PHP使用它時不起作用。這似乎是某種用戶依賴的東西。但它現在起作用了,顯然這是「正確的」方式,所以我現在不會進一步研究這個 - 太多的事情了:) 編輯:我不習慣這樣一個事實, t在寫評論時按Enter鍵插入換行符:) – Christian

相關問題