如何使用minimagick调整这些图像的大小和格式?

c90pui9n  于 2021-09-29  发布在  Java
关注(0)|答案(0)|浏览(365)
i = 0
params[:business][:images].map do |image|
    decoded_image = Base64.decode64(image['image'])
    image_io = StringIO.new(decoded_image)
    @business.images.attach(io: image_io, filename: image['file_name'])
    if i == 0
        mm_image = MiniMagick::Image.open(@business.images.first)
        mm_image.resize '300x200'
        mm_image.format 'png'
        cover_img = mm_image.path
        cover_img_io = StringIO.new(cover_img)
        @business.images.attach(io: cover_img_io, filename: 'cover.png')
    end
i += 1

您好,我的目标是获取数组的第一个图像(params[:business][:images]),并使用minimagik gem调整其大小并将其重新格式化为png文件。我知道@business.images.first是一个活动存储附件,因此几乎可以肯定这不是应该传递给minimagik::image.open的内容,但这是我唯一没有抛出错误的尝试。封面图像被保存到活动存储器中,但显然不正确,因为当我通过浏览器导航到它时,它是一个白色的正方形,在我的应用程序中根本不显示。我试图传递minimagik::image。打开解码的图像、图像io以及原始base64,所有这些方法都会导致错误。我不完全确定这些数据都是什么,我希望能够更好地理解,不仅解决这一问题,而且能够更好地解决前进中遇到的任何图像处理问题。文档示例使用文件名或url,所以我也尝试了

first_image = rails_blob_url(@business.images.first, only_path: true)

mm_image = MiniMagick::Image.open(first_image)

但这让rails对我大喊大叫:
errno::Enoint(没有这样的文件或目录@rb_sysopen-/rails/active_storage/blobs/eyjfcmfpbhmionsibwvzc2fnzsi6ikjbahbpdz09iiiwizxhwijpudwxslcjwdxiioijibg9ix2lkin19--41f5e0240240265e5786b181f1bb2a35d44c1254/img_1109.gif):
我相信有一种更优雅的方式来完成这项任务,请允许我接受所有建议。我的下一步是尝试使用回形针gem,因为它似乎能够让您在创建记录之前在模型中执行这些操作以及运行验证,但正如前面提到的,我想了解这个minimagik代码哪里出了问题。这样做你的事情
更新:
因此,在玩这个vscode副驾驶时,我建议我覆盖_img=mm.image.to_blob,而不是mm.image.path(+1代表ai),这很有效!
但到底什么是blob,或者io或base 64?我讨厌ruby必须处理1000行随机字母(base64字符串)来保存这些图像。作为一名开发人员,这些概念是否很重要,或者我是否应该对此不太担心。我知道这不是谷歌,但我想在“人类”中输入一些信息,而不是文档或技术博客文章。我还没有为这个应用程序设置像aws或firebase这样的文件存储类型,我已经预料到在设置时会遇到问题,看看这将是我第一次这样做,从高层次上理解这些图像发生了什么对我来说是有意义的。到目前为止,我所实施的工作似乎走在了正确的轨道上吗?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题