
最近在研究要怎麼把中文寫到圖片上...
感謝凡哥介紹了一套open source圖形處理軟體...
http://www.graphicsmagick.org/
首先當然就是安裝,我ㄧ開始是用普通user安裝,
但是安裝完後不知道為何執行會有問題,
所以後來我就用root安裝囉~
因為我只會用到在圖片寫字功能,
所以我安裝的東西很少,如下:
(1)freetype-2.3.5.tar.gz
(2)GraphicsMagick-1.2.1.tar.gz
安裝步驟都用defautlt即可。
網路上比較多人討論以及使用的是ImageMagick,
ImageMagick好像比較複雜,不過功能比較強。
安裝完後,在/usr/local/lib會多了一堆library,
==================================
GraphicsMagick-1.2.1
libfreetype.a
libfreetype.la
libfreetype.so -> libfreetype.so.6.3.16
libfreetype.so.6 -> libfreetype.so.6.3.16
libfreetype.so.6.3.16
libGraphicsMagick.a
libGraphicsMagick++.a
libGraphicsMagick.la
libGraphicsMagick++.la
libGraphicsMagick.so -> libGraphicsMagick.so.2.0.1
libGraphicsMagick++.so -> libGraphicsMagick++.so.2.0.0
libGraphicsMagick.so.2 -> libGraphicsMagick.so.2.0.1
libGraphicsMagick++.so.2 -> libGraphicsMagick++.so.2.0.0
libGraphicsMagick++.so.2.0.0
libGraphicsMagick.so.2.0.1
libGraphicsMagickWand.a
libGraphicsMagickWand.la
libGraphicsMagickWand.so -> libGraphicsMagickWand.so.1.0.0
libGraphicsMagickWand.so.1 -> libGraphicsMagickWand.so.1.0.0
libGraphicsMagickWand.so.1.0.0
pkgconfig
=======================================
接著下來要寫程式,
compiler的時候需要指定link到/usr/local/lib這個目錄,
這邊是用pkg-config來compiler,
在此先說明一下,
最方便的最快速的implement方法是去安裝後的目錄下,
可以發現兩個目錄,magick and Magick++,
兩個裡面都有demo目錄~在裡面就有高手寫好的範例,
拿來修改最快了.... ^_^
C的demo code比較難看的懂,我試了一下...
後來就拿C++的demo來試了,
我用的是:
/home/kenneth/GraphicsMagick-1.2.1/Magick++/demo/demo.cpp
compiler command :
g++ -o demo demo.cpp -O `GraphicsMagick++-config --cppflags --ldflags --libs`
之後在run demo (./demo) 就會產生一張圖...
PS: 如果執行產生以下錯誤...
./demo: error while loading shared libraries: libGraphicsMagick++.so.2: cannot open shared object file: No such file or directory
最快的解決方法是先設定LD_LIBRARY_PATH環境變數,
設定comman如下:
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
接下來你會發現修改程式demo.cpp line79,產生的圖片看不到中文,
原因請參考ImageMagick use convert show chinese on images ,
感謝東海大野狼的詳細說明...
cout << " annotate ..." << endl;
example = model;
example.label( "Annotate" );
example.density( "72x72" );
example.fontPointsize( 18 );
example.font( font );
example.strokeColor( Color() );
example.fillColor( "gold" );
example.annotate( "香蕉你個中文", "+0+20", NorthGravity );
example.annotate( "巴辣你個中文", "+0+40", NorthGravity );
example.annotate( "頻果你個中文", "+0+60", NorthGravity );
example.annotate( "香蕉你個中文", "+0+80", NorthGravity );
example.annotate( "123 today is good day ", "+0+100", NorthGravity );
images.push_back( example );
我是使用UltraEdit把以上的code改好,
另存新檔時選擇存成UTF-8格式,
在Linux上看起來會像下面這樣...這就對了~
如果你想看到中文可以修改LANG環境變數...
export LANG= XXX
不過這不是重點,
example.annotate( "é¦™è•‰ä½ å€‹ä¸æ–‡", "+0+20", NorthGravity );
example.annotate( "å·´è¾£ä½ å€‹ä¸æ–‡", "+0+40", NorthGravity );
example.annotate( "é »æžœä½ å€‹ä¸æ–‡", "+0+60", NorthGravity );
example.annotate( "é¦™è•‰ä½ å€‹ä¸æ–‡", "+0+80", NorthGravity );
example.annotate( "123 today is good day ", "+0+100", NorthGravity );
接下來要用root安裝有中文的字型,
我是用東海大野狼介紹的unicode 字型,
安裝字型就不多說了...
最後修改程式裡load fonts的那行code~ line 35,
// Common font to use.
//string font = "Helvetica";
string font = "/usr/share/fonts/truetype/fireflysung.ttf";
接著compiler, 在run一次, OK~
看圖... 中文出現了 !!
雖然寫的很簡單,不過其實......
你不要看教學,從無到有去試試看,
你會想殺人 !!
沒有留言:
張貼留言