2013-09-30 63 views
1

我正在使用carrierwave創建縮略圖,但我不知道-i可以如何使用此腳本。如何使用carrierwave和imagemagick腳本創建縮略圖?

mogrify -resize 246x246 -background none -gravity center -extent 246x246 -format png -quality 75 -path thumbs penguins.jpg 

此腳本創建縮略圖,效果不錯,但我想在carrierwave版本中使用此功能或類似功能。

回答

3

做與carrierwave圖像處理的高級配置的文檔是在這裏:

https://github.com/carrierwaveuploader/carrierwave/wiki/How-to%3A-Efficiently-converting-image-formats#full-example

如果你看一下def mogrify部分中,您看到的是,在img.format("png") do |c|塊是圖像處理選項傳遞。

變量c實際上是MiniMagick的一個實例,它是mogrify周圍的薄包裝。

https://github.com/minimagick/minimagick/

MiniMagick完整的API是不能令人信服的,但如果你深入到源代碼,你可以找到他們的所有可能的方法列表他們用在這裏:

https://github.com/minimagick/minimagick/blob/master/lib/mini_magick.rb#L39

而這些都被定義樓下:

https://github.com/minimagick/minimagick/blob/master/lib/mini_magick.rb#L456

我建議將你想要的選項,你自己上傳:

def mogrify(options = {}) 
    manipulate! do |img| 
     img.format("png") do |c| 
     # Add other options here: 

     c.gravity  options[:gravity] 
     c.background options[:background] 
     c.extend  options[:extend] 
     c.quality  options[:quality] 

     # Original options follow: 

     c.fuzz  "3%" 
     c.trim 
     c.rotate  "#{options[:rotate]}" if options.has_key?(:rotate) 
     c.resize  "#{options[:resolution]}>" if options.has_key?(:resolution) 
     c.resize  "#{options[:resolution]}<" if options.has_key?(:resolution) 
     c.push  '+profile' 
     c.+   "!xmp,*" 
     c.profile  "#{Rails.root}/lib/color_profiles/sRGB_v4_ICC_preference_displayclass.icc" 
     c.colorspace "sRGB" 
     end 
     img 
    end 
    end 
1
在您的應用程序/上傳/ image_uploader.rb

做這樣的事情

class ImageUploader < CarrierWave::Uploader::Base 
    include CarrierWave::RMagick 

    storage :file 

    def store_dir 
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" 
    end 

    version :thumb do 
    process :resize_to_limit => [246, 246] 
    end 
end 

看看這個軌道演員253-carrierwave-file-uploads

+0

Thx,但resize_to_limit不完全是腳本在做什麼,因爲腳本會製作一個新的246x246圖像,帶有透明酒泉nd然後調整圖像大小。 – turbod