【问题标题】:CarrierWave not resizing / MinimagickCarrierWave 未调整大小/Minimagick
【发布时间】:2014-09-04 14:30:09
【问题描述】:

我无法让这个 CarrierWave 上传器处理图像并调整我想要的大小。

图像最初是用这个创建的。

class Screenshot
    include Sidekiq::Worker

    def perform(link_id)
        link = Link.find(link_id)
        file = Tempfile.new(["template_#{link.id.to_s}", '.jpg'], 'tmp', :encoding => 'ascii-8bit')
        file.write(IMGKit.new(link.given_url, #quality: 50, width: 300).to_img(:jpg))
                                     :quality => 50, 
                                    :width => 300,
                                    :height => 300,
                                    "crop-w" => 300,
                                    "crop-h" => 300,
                                    "disable-smart-width" => true,
                                    "zoom" => 0.35).to_img(:jpg))
        file.flush
        link.snapshot = file
        link.save
        file.unlink
    end

end

我无法让它工作,所以我想我会在上传器中调整大小。然后我按照这个修改了上传器:

class SnapshotUploader < CarrierWave::Uploader::Base
    include CarrierWave::MiniMagick

  storage :file
  storage :fog
  process :convert_it

  def convert_it
    manipulate! do |img|
        img.resize '300x300'
        img
    end
  end

  def convert_it2
    resize_to_limit [300,300]
  end

  def convert_it3
    resize_to_fit [300,-1]
  end

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

  def cache_dir
    "#{Rails.root}/tmp/uploads"
  end
end

这也不起作用。我已经尝试了每个转换它的方法,以及直接的

process :resize_to_limit [300,300]

图像已创建。似乎现在总是在 600 宽的任何高度。

图像已上传到 AWS S3。

我使用自制软件的 --disable-openmp 安装了 Imagemagick。我可以从命令行运行 mogrify 和转换。

我可以使用 MiniMagick 调整图像大小并将其保存在 Rails 控制台中,而不会出现问题。

我已确保 CarrierWave 初始化程序具有 config.enable_processing = true。

我在控制台或 sidekiq 终端窗口中没有看到任何错误消息。

我是这方面的新手,所以我不知道还有什么可以尝试的。为什么我的图片没有调整到我要求的尺寸?

编辑:这 600 个宽度来自 IMGKit,这意味着我还没有真正让carrierwave 处理图像。

【问题讨论】:

  • 您尝试使用一个版本。版本 :medium do process :resize_to_limit => [300, 300] end
  • 我可以试试,处理是否只适用于版本?我以为我看到了他们可以修改原始版本的示例,因为我只需要获得较小的版本,没有别的。
  • 它也应该适用于原件。 S3 是每次都创建新镜像还是替换当前镜像?
  • 每次在具有帖子 ID 的文件夹中创建一个新图像。它只是错误的尺寸
  • @ChrisValentine 您可以在版本之外调用流程。但是它将用处理后的版本替换原始图像。

标签: ruby-on-rails imagemagick carrierwave minimagick


【解决方案1】:

这原来是因为我每次更改代码时都没有重新启动 Sidekiq。

我不知道您需要这样做,但是据我所知,上传者不使用 sidekiq 进行上传,所以我不清楚它为什么会产生副作用。

无论如何,每次我更改代码时都停止 sidekiq,这会导致它起作用。

我还找到了 gem Foreman 来帮助一起启动/停止所有服务。

如果有人可以向我解释为什么 Sidekiq 会干扰这个,请告诉我。 Sidekiq 负责制作图像,并且正在创建图像。只是在上传期间没有调整大小。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-24
    • 2012-09-10
    • 2013-12-26
    • 2018-07-21
    • 1970-01-01
    • 2015-01-24
    • 2013-10-18
    • 2015-09-26
    相关资源
    最近更新 更多