gpt4 book ai didi

ruby-on-rails - 将 RMagick 生成的文件从 Heroku 上传到 Amazon S3

转载 作者:行者123 更新时间:2023-12-01 17:45:27 25 4
gpt4 key购买 nike

我正在创建一个托管在 Heroku 上的 Rails 应用程序,它允许用户根据托管在网络某处的原始 JPG 即时生成动画 GIF(将其视为裁剪调整大小应用程序)。我尝试了 Paperclip,但是据我所知,它不处理动态生成的文件。我正在使用 aws-sdk gem,这是我的 Controller 的代码片段:

im = Magick::Image.read(@animation.url).first

fr1 = im.crop(@animation.x1,@animation.y1,@animation.width,@animation.height,true)
str1 = fr1.to_blob
fr2 = im.crop(@animation.x2,@animation.y2,@animation.width,@animation.height,true)
str2 = fr2.to_blob

list = Magick::ImageList.new
list.from_blob(str1)
list.from_blob(str2)
list.delay = @animation.delay
list.iterations = 0

这是两帧动画的基本创建。 RMagick 可以使用以下几行在我的开发计算机中生成 GIF:

list.write("#{Rails.public_path}/images/" + @animation.filename)

我尝试将 list 结构上传到 S3:

# upload to Amazon S3
s3 = AWS::S3.new
bucket = s3.buckets['mybucket']
obj = bucket.objects[@animation.filename]
obj.write(:single_request => true, :content_type => 'image/gif', :data => list)

但是我在 RMagick::ImageList 中没有可以用来指定该大小的 size 方法。我尝试将 GIF“预编译”到另一个 RMagick::Image:

anim = Magick::Image.new(@animation.width, @animation.height)
anim.format = "GIF"
list.write(anim)

但是 Rails 因段错误而崩溃:

/path/to/my_controller.rb:103: [BUG] Segmentation fault ruby 1.8.7 (2010-01-10 patchlevel 249) [universal-darwin11.0]
Abort trap: 6

第 103 行对应于 list.write(anim)

所以现在我不知道如何做到这一点,并且非常感谢我收到的任何帮助。

最佳答案

根据 @mga 在回答他原来的问题时的要求......

基于非文件系统的方法非常简单

rm_image = Magick::Image.from_blob(params[:image][:datafile].read)[0]
# [0] because from_blob returns an array
# the blob, presumably, can have multiple images data in it
a_thumbnail = rm_image.resize_to_fit(150, 150)
# just as an example of doing *something* with it before writing
s3_bucket.objects['my_thumbnail.jpg'].write(a_thumbnail.to_blob, {:acl=>:public_read})

瞧!读取上传的文件,使用 RMagick 操作它,并将其写入 s3,而无需接触文件系统。

关于ruby-on-rails - 将 RMagick 生成的文件从 Heroku 上传到 Amazon S3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8349530/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com