Carrierwave、MiniMagick 和调整图像大小

Posted

技术标签:

【中文标题】Carrierwave、MiniMagick 和调整图像大小【英文标题】:Carrierwave, MiniMagick and resizing images 【发布时间】:2019-01-24 19:28:25 【问题描述】:

我正在尝试为网站制作一个简单的 rss/博客提要。我想要一个简单的封面照片上传器,它将出现在标题左侧的提要中,并带有博客文章的阅读更多链接。我认为在图像上传器文件中,如果您包含 mini_magick,您可以访问诸如 version :medium do 等方法,用于不同版本的图像上传。无论出于何种原因,在我提交表单后它只会在浏览器中引发错误,而且根本没有帮助。当我删除上传器文件中的版本 :medium do 方法时,图像像正常一样上传,但很小,我真的想调整它的大小。

class ImageUploader < CarrierWave::Uploader::Base

include CarrierWave::MiniMagick
  storage :fog

  version :medium do
      process resize_to_fit: [250, 250]
  end

  def store_dir
    "uploads/#model.class.to_s.underscore/#mounted_as/#model.id"
  end

  def extension_white_list
    %w(jpg jpeg gif png)
  end
end

class HomeBlog < ApplicationRecord
  has_many :upvotes
  mount_uploader :image, ImageUploader
end

<%= tinymce_assets %>
<%= simple_form_for(@admin_home_blog) do |f| %>
  <%= f.error_notification %>
  <%= f.error_notification message: f.object.errors[:base].to_sentence if f.object.errors[:base].present? %>

  <div>
    <h3>Upload a Cover Photo</h3>
    <%= f.file_field :image %>
    <%= f.hidden_field :image_cache %>
  </div>
  <div class="form-inputs">
    <span class="form_labels"><%= f.input :name %></span>
    <%= f.text_area :entry, :class => "tinymce", :rows => 20, :cols => 120 %>
  </div>

  <div class="form-actions">
    <%= f.button :submit, "Create Blog Post" %>
  </div>
<% end %>
<%= tinymce %>

谁能看出有什么问题?我还在 gemfile 中安装了带有载波和雾的 gem 'mini_magick'。

【问题讨论】:

查看this CarrierWave 文档的一部分。这就是我在评论调用特定尺寸时的意思! :) 【参考方案1】:

我的声誉还不够高,无法简单地发表评论,但试试这个。

class ImageUploader < CarrierWave::Uploader::Base

include CarrierWave::MiniMagick
  storage :fog

  # move this line outside of your method
  process resize_to_fit: [512,512]         

  version :medium do

      # change the word 'fit' to 'fill'
      process resize_to_fill: [250,250]
  end

  def store_dir
    "uploads/#model.class.to_s.underscore/#mounted_as/#model.id"
  end

  def extension_white_list
    %w(jpg jpeg gif png)
  end
end

根据我所看到的以及我所取得的成功,只需将大小调整为 FIT 一次(在每种照片尺寸方法之前),然后将大小调整为 FILL 以适应所有不同的照片尺寸。祝你好运!

【讨论】:

酷!我很快就会试一试。我会让你知道会发生什么。感谢您花时间回答。干杯! 是的,它仍然没有调整大小。至少它上传了封面照片....不知道为什么这么难。我非常沮丧 有一些方法可以访问特定的大小。我相信它类似于 objectname.medium.url 是你如何调用照片(在 中)我会尽快回复你 是的,你是对的。我这样称呼它: 图片稍大,但绝对不是我在上传器中的中版方法中设置的尺寸【参考方案2】:

如果您在使用carrierwave 或回形针时遇到困难并且无法让Mini_Magick 工作,并且只想像我一样调整为更大的图像?简单的内嵌样式就足够了。不要在上传文件中的版本废话上浪费太多时间。也许有些人没有问题,或者他们已经破解了密码。我想我很特别,哈哈。

【讨论】:

以上是关于Carrierwave、MiniMagick 和调整图像大小的主要内容,如果未能解决你的问题,请参考以下文章

Carrierwave、MiniMagick 和调整图像大小

MiniMagick - 无法加载此类文件

MiniMagick无法编写解码的Base64图像

Rails 5.2 MiniMagick::Error 使用具有比率和活动存储的图像变体时

imagemagick minimagick

使用 Shrine 和 MiniMagick 将 GIF 转换为 JPEG