多个 Shrine 上传者的共享衍生品配置
Shared derivatives configuration for multiple Shrine uploaders
我有不同类型图片的上传器。每个都有相同的一组衍生品(大、中、缩略图),但分辨率不同。但它们也共享一些配置。例如,每个上传者将原始文件转换为 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
)?类似于验证继承或助手的东西。
没有任何现成的共享处理逻辑,但您可以创建一个服务对象,例如:
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
我有不同类型图片的上传器。每个都有相同的一组衍生品(大、中、缩略图),但分辨率不同。但它们也共享一些配置。例如,每个上传者将原始文件转换为 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
)?类似于验证继承或助手的东西。
没有任何现成的共享处理逻辑,但您可以创建一个服务对象,例如:
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