我使用carrierwave,我有這樣的問題:一旦項目已交付您需要添加一個部分,其中在系統中的圖像需要用不同大小顯示 假設。我不想爲已經在系統中的每個圖像重新生成新維度。我希望能夠在視圖需要時生成(並緩存它)。例如:「/>。如果新的大小500x150已經存在,然後返回緩存的url,否則生成它並返回緩存的urlCarrierwave在飛行中調整
我喜歡很多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明顯時(「100×100」)。網址,該網址被生成並返回前的實際大小的圖像是科瑞導致頁面中斷鏈接在後續刷新時顯示良好。
實現任何人願意分享更好的結果? :)
請不要告訴我切換到蜻蜓。我正在使用Carrierwave,我非常喜歡它。它也可以無縫集成RailsAdmin,這也是我的項目的一部分。
問題是大多數時候設計的非常差,我不知道確切的圖像尺寸超前發展的每次添加新的大小時產生縮放後的圖像無盡的再生或被發現。我需要一種方法來實時生成 – user711643
以上內容將採用您的原始圖像,而不考慮尺寸,並將其尺寸調整到指定的尺寸限制。我不知道你'即時'的意思。 – ChrisBarthol
我的意思是按需。假設項目交付後,您需要添加一個部分,系統中的圖像需要以不同的大小顯示。我不想爲已經在系統中的每個圖像重新生成新維度。我希望能夠在視圖需要時生成(並緩存它)。如:「/>。如果新的大小500x150已經存在,然後返回緩存的url,否則生成它並返回緩存的url – user711643