Rails上的RMagick使用經驗之談

2021-08-29 09:20:18 字數 2797 閱讀 4970

我的開發平台:winxp系統 + sp2, ruby 1.8.5,rails 1.2.3,mysql5.0.27, rmagick-1.14.1_im-6.3.0-7-q8.當然,以上的開發軟體都是windows版的。

rmagick的使用經驗

這裡需要說明的是:我並不打算做乙個rmagick的使用大全,而只是結合我的使用經驗對一些不太容易注意到的問題進行總結。

rmagick的api可以參考

www.gotapi.com

rmagick的使用:

(1)定義主要物件

使用rmagick,重要會用到兩個物件:image和draw。這兩個物件可以形象的理解為:image物件相當於畫布,draw物件相當於畫筆。

為方便以下說明,我這樣定義這兩個物件:

ruby **

require 『rmagick』 //千萬別忘了在檔案開頭加上這段**  

canvas = magick::image.new(width,height,magick::hatchfill.new(bg_color,bg_color))  

gc = magick::draw.new

ruby **

img=magick::image.read(image_path).first  //image_path是字串形式的路徑  

image物件定義後,根據img.rows和img.columns可以獲得它的高度和寬度。  

(2)物件使用方法

主要有兩個方法gc.text,gc.annotate 相關引數可以在gotapi上輕鬆查到。用這兩個方法寫系統自帶的英文本型是非常方便的,gc.font,gc.font_family可以設定字型,還可以通過gc. font_style, gc.font_weight來設定斜體和粗體,它們的引數是類似magick::italicstyle、magick::normalstyle、magick::boldweight、magick::lighterweight這樣的常量。當然還有gc.pointsize來設定字型大小,這個對於中英文是通用的。

我這裡主要對寫中文字型做一些介紹。由於rmagick對中文支援不好,當時使用它寫中文的時候預設情況下只發現了黑體可以使用(當然是在我的windows平台下)。因為我們處理需要提供多種字型來寫字,還考慮到發布環境在linux下,所以我們用了這樣的方法:從windows的字型資料夾c:/windows/fonts下拷貝出中文字型庫到自己的工程目錄中,然後通過設定gc.font來使用它們。下面是我的例子:

ruby **

require 'rmagick'  

img = magick::image.new(200,200,magick::hatchfill.new('green','green'))  

gc = magick::draw.new

gc.stroke('transparent')  

gc.pointsize(24)  

gc.font("fonts/stcaiyun.ttf")  

gc.text(20,40, '我愛你啊')  

gc.font("fonts/stxinwei.ttf")  

gc.text(20,70, '我愛你啊')  

gc.fill('white')  

gc.font("fonts/fzstk.ttf")  

gc.text(20,100, '我愛你啊')  

gc.font("fonts/simhei.ttf")  

gc.text(20,130, '我愛你啊')  

gc.font("fonts/yihejianti.ttf")  

gc.text(20,160, '我愛你啊')  

執行結果:

說明:如果你想儲存並執行這段**,請儲存為utf-8的格式,否則會亂碼,還要保證你當前檔案的fonts目錄下有這些ttf字型檔檔案。

這裡還要強調的是,在寫字的時候一定要設定gc.stroke('transparent')。儘管gc.stroke最開始預設的是transparent,但我還是建議在每次寫字之前設定一次,否則如果在之前使用過gc.stroke並且設定了非transparent的值,那麼寫出來的字會是下面這樣的(我把transparent換成了red)

繼續羅嗦一點:對字型的設定有gc.font(ttf_file)和gc.font=ttf_file這兩種方式,它們的區別在什麼地方呢?還是用上面那個例子來說明。如果其中所有的gc.font(ttf_file)換成gc.font=ttf_file,那麼最後的結果會是

看明白了吧?也就是用「=」的時候,只有最後乙個起作用。

還是用**來說明吧

ruby **

gc.define_clip_path('clip_pic')         

gc.push  

gc.clip_path('clip_pic')  

gc.composite(x, y, width, height,magick::image.read(myimageurl))  

gc.pop  

說明:首先要定義乙個裁剪區域,這裡我定義了乙個矩形區域,然後是應用。只有在裁剪區域內部的才會畫到畫布上面。這裡要注意的是gc.push, gc.pop,因為gc.clip_path的裁剪會應用在gc的整個存活期內部,因此gc.draw的所有內容都會限制在這個裁剪區域內部。這兩個操作相當於對裁剪應用的釋放。

ok,暫時寫這麼多吧.

我們的**:

www.youqubar.com ,歡迎指導。

rails3 rmagick外掛程式用法

環境 ruby1.9.3 rails3.2 windows7 1.rmagick2.13.1外掛程式 在gemfile中新增 gem rmagick 2.13.1 執行bundle install 就可以安裝上rmagick 如果還是安裝不上,就用到請看部落格中wins7中的rmagick安裝說明 ...

windows下RMagick的安裝

安裝rmagick,須先安裝imagemagick。設定環境路徑 我的電腦 右鍵 屬性 高階系統設定 環境變數 使用者變數 dfimagemagick 設定為安裝imagemagick的目錄,如,d imagemagick 6.5.6 q8 然後cmd 進入後台 執行如下三個命令 set path ...

windows下rmagick的安裝

1 從rmagick win32對應的zip包 rmagick 2.5.0 imagemagick 6.4.1 5 q8.zip 2 解壓zip到乙個臨時目錄,在該目錄中有乙個imagemagick的安裝檔案imagemagick 6.4.1 5 q8 windows dll.exe,安裝。3 開乙...