Rails 4, Carrierwave, Jcrop, загрузка изображений и изменение размера

ОБНОВЛЕНИЕ Я переместил код обрезки из загрузчика непосредственно в модель ноутбука, чтобы он вызывался как минимум. Теперь изображение обрабатывается. Фактически он обрезается до правильных размеров по ширине и высоте, но смещения по осям X и Y неверны. Я использую MiniMagick, а не RMagick. Вот мой метод crop_image:

def crop_image
    if crop_x.present?
        image.manipulate! do |img|
            x = crop_x.to_i
            y = crop_y.to_i
            w = crop_w.to_i
            h = crop_h.to_i

            z = "#{w}x#{h}+#{x}+#{y}"
            img.resize "600x600"
            img.crop(z)
            img
        end
    end
    image.resize_to_fill(224, 150)
end

Что-то изменилось в Rails 4 по отношению к carrierwave или imagemagick? Я скопировал код, который работал (в приложении на Rails 3), чтобы загрузить изображение, обрезать его и сохранить обе версии, но я не могу заставить его работать в приложении Rails 4.

Вот соответствующие части:

class Notebook < ActiveRecord::Base
    validates :title, :access, presence: true
    mount_uploader  :image, ImageUploader
    belongs_to :user
    has_many :invites
    attr_accessor :crop_x, :crop_y, :crop_w, :crop_h
    after_update    :crop_image

    def notebook_title
        title
    end

    def user_name
        user.name
    end

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

И воссоздать_версии! вызов обращается к image_uploader

class ImageUploader < CarrierWave::Uploader::Base

  include CarrierWave::MiniMagick

  include Sprockets::Rails::Helper

  storage :file

  include CarrierWave::MimeTypes
  process :set_content_type

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

  # Create different versions of your uploaded files:
  version :large do
    process resize_to_limit: [600, 600]
  end

  version :thumb do
    process :crop
    resize_to_fill(224, 150)
  end

  def err
    raise "error here"
  end

  def crop
    if model.crop_x.present?
      resize_to_limit(600, 600)

      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

        size = w << 'x' << h
        offset = '+' << x << '+' << y

        img.crop("#{size}#{offset}") 
        img
      end
     end
  end
end

Я вижу значения для crop_x, crop_y, crop_w и crop_h. Версия: блок большого пальца не вызывает какие-либо методы процесса. Даже если я попытаюсь вызвать ошибку изнутри версии: блок большого пальца, это не сработает.

Если кто-нибудь может предоставить какую-либо информацию, это было бы здорово.

0 ответов

Другие вопросы по тегам