使用 Shrine 和 MiniMagick 将 GIF 转换为 JPEG

Posted

技术标签:

【中文标题】使用 Shrine 和 MiniMagick 将 GIF 转换为 JPEG【英文标题】:Converting GIF to JPEG with Shrine and MiniMagick 【发布时间】:2021-12-28 19:55:09 【问题描述】:

我在 ruby​​ on rails 中有这个项目,最近我将上传图片功能更改为 Shrine。

我希望能够上传一个动画 gif,然后创建一个静态 jpeg(或者 gif,如果更简单的话)衍生。

我正在尝试这种方式

    class GifUploader < Shrine
      Attacher.derivatives do |original|
        magick = ImageProcessing::MiniMagick
    
        
            static: magick.loader(page: 0)
                        .loader(geometry: "450x250")
                        .call(original),
        
      end
    end

使用这种方法我收到了这个错误

MiniMagick::Error: `convert /tmp/shrine20211117-94958-ieep9h.gif[0][450x250] -au
to-orient /tmp/image_processing20211117-94958-q3i2qe.gif` failed with error:    
convert-im6.q16: unable to open image `/tmp/shrine20211117-94958-ieep9h.gif[0][450x250]': No such file or directory @ error/blob.c/OpenBlob/2924.
convert-im6.q16: no decode delegate for this image format `' @ error/constitute.c/ReadImage/575.
convert-im6.q16: no images defined `/tmp/image_processing20211117-94958-q3i2qe.gif' @ error/convert.c/ConvertImageCommand/3229.

我也尝试了不同的方法并给了我同样的错误:

require "image_processing/mini_magick"

class GifUploader < Shrine
  Attacher.derivatives do |original|
    magick = ImageProcessing::MiniMagick.source(original)
    
        static: magick   # original is a IO object   
                    .loader(page: 0)
                    .loader(geometry: "450x250")
                    .convert!("jpeg")
                    .call(original),
    
  end
end

这是我在 ruby​​ on rails 中的第一个项目,我不知道发生了什么。我已经搜索过了,但没有结果

我在 rails 6 上使用 ruby​​

【问题讨论】:

【参考方案1】:

好的,我设法解决了这个问题。基本上我颠倒了顺序并摆脱了任何“!”点。我还删除了loader(geometry: "450x250")

代码:

require "image_processing/mini_magick"

class GifUploader < Shrine
  Attacher.derivatives do |original|
    magick = ImageProcessing::MiniMagick.source(original)
    
      static: magick.convert("jpeg").loader(page: 0).call
    
  end
end

我不知道为什么会这样,如果有人知道,请在 cmets 中解释

【讨论】:

以上是关于使用 Shrine 和 MiniMagick 将 GIF 转换为 JPEG的主要内容,如果未能解决你的问题,请参考以下文章

Rails 和 Shrine 创建带有附件的模型记录

Carrierwave、MiniMagick 和调整图像大小

Rails 5.2 MiniMagick::Error 使用具有比率和活动存储的图像变体时

imagemagick minimagick

MiniMagick - 无法加载此类文件

在使用 Shrine 和 Rails 加密之前为图像文件设置 mime 类型