linux 源代码方式安装RMagick

linux的安装比较复杂,试错多次之后,并google之后查询若干信息才成功,记录在这里,供大家参考:
1.安装jpg
jpegsrc.v8a.tar.gz


2.安装png
libpng-1.4.1.tar.gz


3.安装freetype。字体。
freetype-2.3.12.tar.gz


4.安装Ghostscript
ghostscript-8.71.tar.gz


5.安装Ghostscript font
ghostscript-fonts-std-8.11.tar.gz
上述几种包都按照缺省路径安装,可以将lib文件安装到 /usr/local/lib中;

 

6.安装 ImageMagick
安装之前配置如下环境(这里非常重要,实际上在于说明编译中需要的库,需要指对位置,或者可以在./configure增加配置也是可以的):
$ export LDFLAGS="-L/usr/local/lib -Wl,-rpath,/usr/local/lib"
$ export LD_LIBRARY_PATH="/usr/local/lib"
后面这句话比较重要。
然后
./configure --without-perl
make && make install
关注点:

在执行./configure --without-perl的时候,可以观察其中的一些参数,比如是否支持tiff、jpegv1还是jpegv2之类的信息。

 

测试convert命令是否成功,成功后进行下面的操作。


7.安装rmagick
gem install --remote rmagick
当出现:
Successfully installed rmagick-2.12.2
1 gem installed
rmagick安装成功;

显示的安装成功并不表示实际可用,还要进行如下测试。


8.测试是否可用
irb -r rubygems -r RMagick
解释:将rubygems和RMagick装载到irb环境中。
或者在irb环境中另行加载
irb
require 'rubygems'
require 'RMagick'
注意:这里RMagick的前两个是大写。
同时rubygems放在前面装载。
如果装载成功,就返回true。

测试是否可以使用RMagick中的方法
Magick::Pixel.from_color("red")
会返回:
=> red=65535, green=0, blue=0, opacity=0

ok,大功告成。

 

最好结合web应用中的attachment_fu,设置resize参数,看看上载图片是否可以进行resize,同时看看attachments表中,在上传图片之后,width和height两个属性是否有值。
下面是库表的示例:

在使用attachment_fu插件的avatar.rb中设置为:

class Avatar < ActiveRecord::Base
  has_attachment  :content_type => :image,
    :storage => :file_system,
    :path_prefix=>'/public/avatars',
    :resize_to => [50,50],
    #:max_size => 100.megabytes,
  #:thumbnails => {:thumb => [20,20]}
  :processor => :Rmagick
  #:content_type => ['application/pdf', 'application/msword', 'text/plain']
  validates_as_attachment
end

上传图片之后,在avatars表中,会生成如下记录。

id | user_id | topic_id | db_file_id | filename         | content_type | size   | height | width | parent_id | thumbnail

| 22 |    NULL |      266 |       NULL | 200803_1.JPG     | image/jpeg   | 350131 |     50 |    50 |      NULL |      NULL

可以看到hight和width都有值,确实按照avatar模型类中的定义,生成一个转换之后的图片。缩小了,可以减少空间,呵呵,省的都是自己的。
9.后话:
如果发现有些图片类型不支持,则需要下载相关的包,重新编译即可。

还有就是成功之后的总结,发现问题的关键还是在于编译过程的细节把握上面,如果能够理解,则比较顺利。

 

你可能感兴趣的:(linux,Google,perl,rubygems,ActiveRecord)