gpt4 book ai didi

ruby-on-rails - Carrierwave 动态调整大小

转载 作者:行者123 更新时间:2023-12-04 16:10:37 28 4
gpt4 key购买 nike

我正在使用carrierwave,但遇到了这个问题:
假设一旦项目交付,您需要添加一个部分,其中系统中的图像需要以不同的尺寸显示。我不想为系统中已有的每个图像重新生成新维度。我希望能够在 View 需要时生成(并缓存它)。类似:"/> 。如果新大小 500x150 已经存在,则返回缓存的 url,否则生成它并返回缓存的 url

我非常喜欢 Carrierwave,但不幸的是没有任何开箱即用的即时调整大小功能。每个人都说添加这个功能应该很简单,但我几乎什么也没发现。唯一接近的是这个上传者 https://gist.github.com/DAddYE/1541912
我不得不修改它以使其工作所以这是我的版本

class ImageUploader < FileUploader
include CarrierWave::RMagick

#version :thumb do
# process :resize_to_fill => [100,100]
#end
#
#version :thumb_square do
# process :resize_to_fill => [100,100]
#end
#
#version :full do
# process :resize_to_fit => [550, 550]
#end


def re_size(string_size)
if self.file.nil?
return self
end

begun_at = Time.now
string_size.gsub!(/#/, '!')
uploader = Class.new(self.class)
uploader.versions.clear
uploader.version_names = [string_size]
img = uploader.new(model, mounted_as)
img.retrieve_from_store!(self.file.identifier)
cached = File.join(CarrierWave.root, img.url)
unless File.exist?(cached)
img.cache!(self)

img.send(:original_filename=, self.file.original_filename)
size = string_size.split(/x|!/).map(&:to_i)
resizer = case string_size
when /[!]/ then :resize_to_fit
# add more like when />/ then ...
else :resize_to_fill
end
img.send(resizer, *size)
FileUtils.mv(img.file.file, cached)
#img.store!
end
img
end

def extension_white_list
%w[jpg jpeg gif png]
end

def filename
Digest::MD5.hexdigest(original_filename) << File.extname(original_filename) if original_filename
end

def cache_dir
"#{Rails.root}/tmp/uploads"
end

def default_url
'/general/no-image.png'
end
end

此版本的问题在于,显然在调用 re_size("100x100").url 时,在创建实际调整大小的图像之前生成并返回 url,导致页面链接损坏,在任何后续刷新时显示良好。

有谁取得了更好的成果愿意分享吗? :)

请不要告诉我切换到蜻蜓。我正在使用 Carrierwave,我真的很喜欢它。它还与 RailsAdmin 无缝集成,这也是我项目的一部分。

最佳答案

为什么不直接生成不同版本的图像,例如缩略图?在您的 image_uploader.rb

 # Create different versions of your uploaded files:

include CarrierWave::RMagick


version :thumb do
process :resize_to_limit => [100, 100]
end

然后在您看来只需调用
 <%= image_tag nameofimage.image_url(:thumb).to_s %>

您可以创建原始图像的多个版本,而无需调整原始图像的大小。处理由您需要安装的 RMagick 完成。

RMagick 要求您拥有 ImageMagick,因此您也需要安装它。这些安装和工作可能有点棘手,但非常值得。另外,stackoverflow 社区为这个问题提供了很多帮助。

Error installing Rmagick on Mountain Lion

rmagick gem install "Can't find Magick-config"

关于ruby-on-rails - Carrierwave 动态调整大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19302262/

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