使用 image = MiniMagick 从原始文件制作多个副本

Make Multiple Copies From Original with image = MiniMagick

我需要在不同 formats/sizes 中生成多个图像副本。我可以在不为每个 format/size 重新打开源代码的情况下做到这一点吗?

举个例子:

# Original image is jpeg
image = MiniMagick::Image.open url
image.crop dimensions
image.format 'pdf'
upload image
# image = MiniMagick::Image.open url # No! Needless network traffic and processing.
image.format 'png'
image.resize new_size
upload image

如果没有第二个 #open,这段代码就不行了,因为当调用 image.format 'png' 时,图像是 PDF,所以我最终会对其进行栅格化,这不是我想要做的。

有一种方法#clone,但它不会克隆图像对象。相反,它为转换器设置一个参数。我不知道这是否符合我的目的。

我找到了一种方法,看起来不错。

# Original image is jpeg
image = MiniMagick::Image.open url
image.crop dimensions

new_image = MiniMagick::Image.open image.tempfile.path

image.format 'pdf'
upload image

new_image.format 'png'
new_image.resize new_size
upload new_image

PDF 和 PNG 都将被裁剪,但每个只会转换一次。