【问题标题】:Carrierwave/Minimagick not processing images after uploadCarrierwave/Minimagick 在上传后不处理图像
【发布时间】:2013-01-30 14:21:17
【问题描述】:

我无法在 RoR 中使用 Carrierwave/Minimagick gem 实现简单的图像上传器。

我正在尝试在上传时将文件转换为灰度,但出现错误。代码如下:

image_uploader.rb:

class ImageUploader < CarrierWave::Uploader::Base

  include CarrierWave::MiniMagick

  # Include the Sprockets helpers for Rails 3.1+ asset pipeline compatibility:
  include Sprockets::Helpers::RailsHelper
  include Sprockets::Helpers::IsolatedHelper

  storage :file

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

  # Process files as they are uploaded:
   process :convert_to_grayscale

  def convert_to_grayscale
    manipulate! do |img|
      img.quantize(256, Magick::GRAYColorspace)
      img = yield(img) if block_given?
      img
    end
  end

当我尝试上传文件时,我收到以下错误:

uninitialized constant ImageUploader::Magick

app/uploaders/image_uploader.rb:36:in `block in convert_to_grayscale'
app/uploaders/image_uploader.rb:35:in `convert_to_grayscale'

我相信这是由于 Magick::GRAYColorspace 枚举常量所致。任何想法为什么这不起作用?

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3.2 carrierwave minimagick


    【解决方案1】:

    manipulate 函数将图像加载到内存吗?它是否返回图像列表?

    我认为图片加载不正确。问题不在于 Magick 枚举。

    这是一个示例:

    require 'RMagick'
    
    clown = Magick::ImageList.new("clown.jpg")
    clown = clown.quantize(256, Magick::GRAYColorspace)
    clown.write('monochrome.jpg')
    

    【讨论】:

    • 载波文档是这样说的操作!():manipulate!() 使用 RMagick 操作图像。此方法将加载图像,然后将其每个帧传递给提供的块。然后它将图像保存到磁盘。 Gotcha 此方法假定对象响应 current_path。该模块混入的任何类都必须具有 current_path 方法。 CarrierWave::Uploader 可以,因此在大多数情况下您无需担心这一点。如果操作失败,则产生 MiniMagick::Image 操作以执行引发 CarrierWave::ProcessingError。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-15
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-19
    • 2013-03-07
    相关资源
    最近更新 更多