【问题标题】:How can I create thumbnail with carrierwave and a imagemagick script?如何使用carrierwave 和imagemagick 脚本创建缩略图?
【发布时间】:2013-09-30 12:42:20
【问题描述】:

我正在使用carrierwave创建缩略图,但我不知道如何使用这个脚本。

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

这个脚本创建缩略图并且效果很好,但我想在carrierwave版本中使用这个或类似的。

【问题讨论】:

    标签: ruby-on-rails ruby imagemagick carrierwave rmagick


    【解决方案1】:

    有关使用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
    

    【讨论】:

      【解决方案2】:

      在你的 app/uploaders/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
      

      看看这个 rails cast 253-carrierwave-file-uploads

      【讨论】:

      • 谢谢,但 resize_to_limit 并不完全是脚本所做的,因为脚本会制作一个新的 246x246 图像,具有透明背景,然后调整图像大小。
      猜你喜欢
      • 2012-02-04
      • 1970-01-01
      • 1970-01-01
      • 2011-12-23
      • 2011-04-20
      • 1970-01-01
      • 2012-10-27
      • 2011-07-22
      • 1970-01-01
      相关资源
      最近更新 更多