使用 Cloudinary 和 Carrierwave 进行 RMagick 压缩

Posted

技术标签:

【中文标题】使用 Cloudinary 和 Carrierwave 进行 RMagick 压缩【英文标题】:RMagick Compression with Cloudinary and Carrierwave 【发布时间】:2020-01-22 18:13:06 【问题描述】:

我想在图像上传到 Cloudinary 之前在 Carrierwave 中使用 RMagick 压缩。

本地 imagemagick 测试表明,一个 37MB 的文件(请不要问为什么它有那么大;))被压缩到只有 4.6 MB 且质量可以接受。

所以现在我想在我的 rails 应用程序中使用与 rmagick 相同的功能,但似乎根本没有进行预处理。上传者上传原始文件,大小为 37MB。

这是我目前拥有的:

class ImageUploader < CarrierWave::Uploader::Base

  include Cloudinary::CarrierWave
  include CarrierWave::RMagick

  process :compress => Magick::JPEGCompression

  def compress(compression_type)    
    manipulate! do |img|
      img = img.compression(compression_type)
    end     
    img     
  end
  ...

我怎样才能实现压缩,并且只有压缩文件上传到 cloudinary?

【问题讨论】:

看一些 CarrierWave process 的例子,看起来他们都直接返回了manipulate! 的结果,最后没有返回img。这有什么不同吗? 【参考方案1】:

您可能想试试我们的incoming transformation。 例如,您可以使用upload widget 上传图像,并在上传预设中添加传入的转换。或使用 SDK。例如:

Cloudinary::Uploader.upload("sample.jpg", 
  :width => 2000, :height => 1000, :crop => :limit, :quality => 70)

【讨论】:

以上是关于使用 Cloudinary 和 Carrierwave 进行 RMagick 压缩的主要内容,如果未能解决你的问题,请参考以下文章

由于“cloudinary.uploader 未定义”错误,从 cloudinary 中删除媒体文件失败

使用 markdown 和 cloudinary 的 django 应用程序

我正在尝试使用 Cloudinary post API 上传图像而不使用 Cloudinary SDK

如何在 mongodb 和 mongoose 模型中使用 cloudinary

如何使用 Cloudinary 和 Strapi 延迟加载图像?

使用 Cloudinary 和 Carrierwave 进行 RMagick 压缩