【问题标题】:Rails 4 Carrierwave + Minimagick: Failed to manipulate with MiniMagick, maybe it is not an image? Original Error: `mogrify -cropRails 4 Carrierwave + Minimagick:无法使用 MiniMagick 进行操作,可能不是图像?原始错误:`mogrify -crop
【发布时间】:2016-04-12 16:11:46
【问题描述】:

一直在研究,但未能查明问题:我正在关注 Railscasts PRO #182 使用 JCrop、Carrierwave 和 Minimagick 裁剪图像。当我开始重新创建图像版本时,我被提示错误:

CarrierWave::ProcessingError(无法使用 MiniMagick 进行操作,可能不是图像?原始错误:mogrify -crop! 250x250+531+32 /tmp/mini_magick20160108-6544-1ec50pf.png 失败并出现错误: mogrify:无法识别的选项-crop!' @ error/mogrify.c/MogrifyImageCommand/4197. ): app/uploaders/image_uploader.rb:48:incrop' app/models/course.rb:15:in crop_image' app/controllers/courses_controller.rb:12:inupdate'

有人可以帮我理解这个错误的含义吗?

型号

class Course < ActiveRecord::Base
  attr_accessor :crop_x, :crop_y, :crop_w, :crop_h
  after_update :crop_image

  mount_uploader :image, ImageUploader

  def crop_image
    image.recreate_versions! if crop_x.present?
  end
end

控制器

class CoursesController < ApplicationController

  def update
    @course = Course.find(params[:id])
    if @course.update_attributes(course_params)
      if course_params[:image].present?
        render :crop
      else
        redirect_to @course, notice: 'Successfully updated'
      end
    end
  end

  def course_params
    params.require(:course).permit(:title, :image, :crop_x, :crop_y, :crop_w, :crop_h)
  end
end

图片上传

class ImageUploader < CarrierWave::Uploader::Base
  include CarrierWave::MiniMagick
  storage :file

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

  version :thumb do
    process :crop
    process :resize_to_fit => [250, 250]
  end

  def crop
    if model.crop_x.present?
      resize_to_fit(800, 350)
      manipulate! do |img|
        x = model.crop_x.to_i
        y = model.crop_y.to_i
        w = model.crop_w.to_i
        h = model.crop_h.to_i
        img.crop!("#{w}x#{h}+#{x}+#{y}")
      end
    end
  end
end

【问题讨论】:

    标签: ruby-on-rails carrierwave jcrop railscasts minimagick


    【解决方案1】:

    strip 有同样的问题。仅在图像较大时发生。 第一个问题是在 2012 年,没有很好的解决方案就关闭了。

    【讨论】:

      【解决方案2】:

      结果是选项-crop!在命令 mogrify 中不存在。分辨率只是改变.crop!到.crop

      即在 ImageUploader 中:

      img.crop!("#{w}x#{h}+#{x}+#{y}") --> img.crop("#{w}x#{h}+#{x}+#{y}")

      【讨论】:

        最近更新 更多