【问题标题】:How to resize and display an image in rails using minimagick?如何使用 minimagick 在 Rails 中调整图像大小和显示图像?
【发布时间】:2020-02-02 11:48:16
【问题描述】:

我是 Rails 新手,遇到了一个我认为很简单的问题。我想上传一张图片,调整它的大小,然后显示调整后的图片。我可以使用carrierwave上传,但是当尝试调整它的大小并使用mini_magick显示它时,一切都出错了!基于 mini_magick 文档,我在课堂上创建了一个方法来调整图像的大小;

class Item < ApplicationRecord

    require "mini_magick"

    mount_uploader :filename, ImageUploader

    def resize_to_dev
        output_file_name = "public/uploads/item/filename/" + "#{self.id}" + "/" + "#{self.id}" + ".jpg"
        image = MiniMagick::Image.open(self.filename.current_path)
        image.resize "100x100"
        image.format "jpg"
        image.write output_file_name
    end

end

这会调整图像大小并将其重命名为 itemid.jpg。但是,如果我尝试在我的显示模板中使用此代码显示它。

<p><% @item.resize_to_dev  %>
<p><% output_file_dir = "public/uploads/item/filename/" + "#{@item.id}" + "/" + "#{@item.id}" + ".jpg"%>
<p><%= image_tag(output_file_dir, alt: 'Image')%>

我得到了错误;

'资产管道中不存在资产“public/uploads/item/filename/2/2.jpg”。'

即使文件在那个位置。

必须有更简单的方法来做到这一点!非常感谢任何帮助。

【问题讨论】:

    标签: ruby-on-rails minimagick


    【解决方案1】:

    我认为您不需要在模型或视图中进行此转换。

    您可以像这样更改您的ImageUploader

    class ImageUploader < CarrierWave::Uploader::Base
      include CarrierWave::MiniMagick
    
      def store_dir
        "uploads/#{model.class.to_s.underscore}/#{model.id}"
      end
    
      version :thumb do
        process resize_to_fit: [100, 100]
      end
    
      # some_other_code
    end
    

    然后像这样在你的视图中调用 thumb version:

    <%= image_tag @item.filename.thumb.url, alt: 'Image' %>
    

    【讨论】:

    • 谢谢,我确实考虑过这一点,但我会想使用更多的 mini_magik 功能,比如添加边框、裁剪等。所以我想显示 mini_magik 创建的图像。
    • 这是另一个问题:)
    • @Jinx5269 在任何情况下,您都需要在上传器中进行所有minimagick 操作,而不是在视图或模型中。您可以阅读如何进行裁剪herehere。这样你也可以制作边框或圆形图片
    猜你喜欢
    • 2019-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多