调整大小不适用于 Shrine 和 ImageProcessor / MiniMagick - Rails 5.2

问题描述

我正在尝试使用 ImageProcessor / MiniMagick 在图像保存到我的 Rails 5.2 应用程序的数据库之前调整它们的大小。我能够保存图像,但是在保存之前没有调整该图像的大小,并且没有抛出错误。我也在使用 Trix 来处理和输出图像。

这是我目前设置的:

image_uploader.rb

require "image_processing/mini_magick"

class ImageUploader < Shrine
  Attacher.derivatives do |original|
    magick = ImageProcessing::MiniMagick.source(original)
      {
        resized: magick.resize_to_limit!(600,600)
      }
  end
end

shrine.rb(我在我的 shrine.rb 文件中包含了以下行)

Shrine.plugin :derivatives

photos_controller.rb(photos_controller.rb 文件中的相关代码

def create
    @photo = Photo.new(photo_params)
    @photo.valid?
    @photo.image_derivatives! if @photo.image_changed? # creates derivatives
    
    respond_to do |format|
      if @photo.save
        format.html { redirect_to @photo,notice: 'Photo was successfully created.' }
        format.json { render :show,status: :created,location: @photo }
      else
        format.html { render :new }
        format.json { render json: @photo.errors,status: :unprocessable_entity }
      end
    end
  end

代码似乎与我在数据库中看到的一样有效。控制台日志如下所示:

2.6.1 :014 > photo.image_derivatives
 => {:resized=>#<ImageUploader::UploadedFile storage=:store id="b234085e9502c39f23edb84bced89ee0.png" Metadata={"filename"=>"image_processing20210103-23514-zyeyzg.png","size"=>94105,"mime_type"=>"image/png"}>} 
2.6.1 :015 > photo.image(:resized)
 => #<ImageUploader::UploadedFile storage=:store id="b234085e9502c39f23edb84bced89ee0.png" Metadata={"filename"=>"image_processing20210103-23514-zyeyzg.png","mime_type"=>"image/png"}> 
2.6.1 :017 > photo.image(:resized).size
 => 94105 
2.6.1 :018 > photo.image(:resized).mime_type
 => "image/png" 

当我拉出保存的记录时,我可以找到让我认为它有效的信息,但是当我在视图中查看它时没有调整大小。有什么想法吗? ...让我知道是否应该提供更多信息。

解决方法

虽然这不是我一直在寻找的答案,但处理这个问题的一种方法是通过 css。我将以下内容添加到我的 css 文件中,效果很好。文件在后端的保存方式没有任何变化,但浏览器中的外观正是我想要的:

.trix-content {
  img {
    max-width: 400px;
  }
}