【问题标题】:Shared derivatives configuration for multiple Shrine uploaders多个 Shrine 上传者的共享衍生品配置
【发布时间】:2022-01-15 21:03:28
【问题描述】:

我有不同类型图片的上传器。每个都有相同的派生集(大、中、缩略图),但分辨率不同。但它们也共享一些配置。例如,每个上传者都将原始文件转换为 jpeg,更改质量并去除元数据。

class BannerUploader < Shrine
  Attacher.derivatives do |original|
    magick = ImageProcessing::MiniMagick.source(original)
      .convert('jpg')
      .saver(quality: 85)
      .strip

    {
      large: magick.resize_to_limit!(1600, 400),
      medium: magick.resize_to_limit!(800, 200),
      thumbnail: magick.resize_to_limit!(400, 100)
    }
  end
end

这个处理规则是一样的:

class PhotoUploader < Shrine
  Attacher.derivatives do |original|
    magick = ImageProcessing::MiniMagick.source(original)
      .convert('jpg')
      .saver(quality: 85)
      .strip

    {
      large: magick.resize_to_limit!(1200, 1200),
      medium: magick.resize_to_limit!(600, 600),
      thumbnail: magick.resize_to_limit!(300, 300)
    }
  end
end

是否可以在这些上传者之间提取和共享一些配置(如.convert('jpg').saver(quality: 85).strip)?类似于验证继承或助手的东西。

【问题讨论】:

    标签: ruby-on-rails shrine


    【解决方案1】:

    没有任何开箱即用的共享处理逻辑,但您可以创建一个服务对象,例如:

    class BannerUploader < Shrine
      Attacher.derivatives do |original|
        Thumbnails.call(original, {
          large: [1600, 400],
          medium: [800, 200],
          thumbnail: [400, 100],
        })
      end
    end
    
    class PhotoUploader < Shrine
      Attacher.derivatives do |original|
        Thumbnails.call(original, {
          large: [1200, 1200],
          medium: [600, 600],
          thumbnail: [300, 300],
        })
      end
    end
    
    class Thumbnails
      def self.call(original, sizes)
        magick = ImageProcessing::MiniMagick.source(original)
          .convert('jpg')
          .saver(quality: 85)
          .strip
    
        thumbnails = {}
    
        sizes.each do |name, (width, height)|
          thumbnails[name] = magick.resize_to_limit!(width, height)
        end
    
        thumbnails
      end
    end
    

    【讨论】:

    • 谢谢!这正是我想要的
    猜你喜欢
    • 1970-01-01
    • 2017-10-26
    • 1970-01-01
    • 1970-01-01
    • 2017-10-02
    • 2017-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多