首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >rails 5中的图像处理

rails 5中的图像处理
EN

Stack Overflow用户
提问于 2016-07-18 18:23:00
回答 1查看 1.6K关注 0票数 0

我正在用Rails 5开发一个api应用程序,从客户端我有一个Anuglar应用程序。

我有以下要求:

  • 异步上传图像。(请注意,这意味着图像在第一时间没有附加到模型中)。
  • 要创建的模型可以附加N个图像。
  • 对于每个上传的图像,创建M个指定的缩略图。(请注意,缩略图也应附在模型上。)

我读过关于CarrierWave和回形针的文章,但是我没有发现我怎么做所有这些要求。

我非常感谢任何涉及所有这些需求的建议、库、创业板等等。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-18 19:18:28

我用CarrierWave gem实现了类似的东西。假设您希望将图像附加到模型Post

在模型中:

代码语言:javascript
复制
class Post < ActiveRecord::Base
  has_many :photos, inverse_of: :post
end

然后,您可以拥有一个照片模型:

代码语言:javascript
复制
class Photo < ActiveRecord::Base
   belongs_to :post
   mount_uploader :post_image, PostImageUploader
end

然后您可以将其添加到app/uploaders/post_image_uploader.rb中。

代码语言:javascript
复制
class PostImageUploader < CarrierWave::Uploader::Base
  # Create different versions of your uploaded files:
    version :standard do
      process resize_to_fit: [800, 800]
    end

    version :thumb do 
      process resize_to_fit: [100, 100]
    end
end

因为您是通过api创建映像的,所以您必须将图像转换为Base64字符串并以param的形式发送。在本例中,在将base64字符串发送到服务器之前,它位于param [:photo][:photo_data]中。在photos_controller.rb中有以下内容:

代码语言:javascript
复制
def create
  @photo = Photo.new(photo_params)
  @photo.post_image = decode_photo_data(params[:photo][:photo_data])

  if @photo.save
    render json: @photo, status: :created, location: @photo
  else
    render json: @photo.errors, status: :unprocessable_entity
  end 
end

 #decode base64 data to an jpg image: 
 def decode_photo_data(photo_data)
    data = StringIO.new(Base64.decode64(photo_data))

    data.class.class_eval { attr_accessor :original_filename, :content_type }
    data.original_filename = "upload.jpg"
    data.content_type = "image/jpg"

       # return decoded data
    data
 end

  def photo_params
    params.require(:photo).permit(:caption, :post_id)
  end

这样,当您向您的端点发出post请求时,其主体如下

代码语言:javascript
复制
{"photo": {"caption": "an image", "post_id": 1, "photo_data":<your image base64 string>}} 

它将为带有photo of 1post创建一个具有standardthumb版本的post

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38443570

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档