使用Rails和CarrierWave保存使用RMagick创建的图像

3

在我的Rails应用程序中,我有一个模块需要取多张图片,使用RMagick将它们"拼接"成一个新的单一图像。我能够成功地创建最终的图像,但我无法将这个新图像作为附件保存到模型中(使用CarrierWave)。执行拼接的方法如下:

def generate_collage(params)
    final_image = ImageList.new

    # ... code that puts together the composite image ...

    return final_image.append(true).to_blob { |attrs| attrs.format = 'JPEG' }
end

我有一个带有上传器的用户模型:

class User < ActiveRecord::Base
    mount_uploader :image, UserImageUploader
end

在CarrierWave文档的ActiveRecord部分中,他们展示如何分配一个新图像,但他们假定文件已经存在于某个地方。在我的情况下,它还不存在于文件系统中,我正在输出一个blob... 有没有办法从这个blob生成CarrierWave的图像上传呢
我想我试图避免将这个图像暂时保存到"#{Rails.root}/tmp/"中,然后从那里读取它...看起来我可以削减这一步并直接发送给CarrierWave,但我不知道怎么做!这可行吗?
1个回答

2

我现在正在处理类似的事情。这应该是可行的,但一个简单的解决办法是将其保存到临时文件中:

temp_file = Tempfile.new([ 'temp', '.png' ])

image.write(temp_file.path)

user = User.new
user.avatar = temp_file
user.save

temp_file.close
temp_file.unlink

我希望试图改进它,完全消除文件系统依赖。我会遵循其中一篇答案中的建议:如何处理由Prawn生成的file_as_string,以使其被Carrierwave接受?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接