經過一番調查後,我決定在我的新rail3應用上使用Carrierwave和mini_magick。Carrierwave和mini_magick查找寬度和高度
我已經設置好了,它完美地工作。不過,我有一個問題是我想能夠訪問的寬度和高度,所以我可以正確地形成HTML。然而,沒有默認的信息,因爲它存儲數據的方式,我真的沒有什麼辦法可以加入數據庫。
有沒有人有任何提示或想法?它甚至有可能嗎?
經過一番調查後,我決定在我的新rail3應用上使用Carrierwave和mini_magick。Carrierwave和mini_magick查找寬度和高度
我已經設置好了,它完美地工作。不過,我有一個問題是我想能夠訪問的寬度和高度,所以我可以正確地形成HTML。然而,沒有默認的信息,因爲它存儲數據的方式,我真的沒有什麼辦法可以加入數據庫。
有沒有人有任何提示或想法?它甚至有可能嗎?
class Attachment
mount_uploader :file, FileUploader
def image
@image ||= MiniMagick::Image.open(file.path)
end
end
而且使用這樣的:
Attachment.first.image['width'] # => 400
Attachment.first.image['height'] # => 300
只是爲了記錄,我已經使用了類似的解決方案,但是使用與蒙戈GridFS的文件,這裏有雲:
def image
@image ||= MiniMagick::Image.read(Mongo::GridFileSystem.new(Mongoid.database).open(file.path, 'r'))
end
在運行時使用RMagick
或MiniMagick
計算圖像height
/width
的缺點:
僅供參考,您還可以計算圖像
Height
,Width
的 圖片後,通過使用與<img>
標籤使用jQuery的幫助相關的load
事件滿載。
對於實例:
$(document).ready(function(){
var $image = $('.fixed-frame img');
$image.load(function(){
rePositionLogo($image);
});
if($image.prop('complete')){
rePositionLogo($image);
}
});
function rePositionLogo($image){
var height = $image.height();
var width = $image.width();
if (width > height) {
$image.parents('.header').addClass('landscape');
var marginTop = (105 - $image.height())/2;
$image.css('margin-top', marginTop + 'px')
}else{
$image.parents('.header').addClass('portrait');
}
}
要小心,因爲在已經被加載圖像load()
不會觸發。當圖像在用戶的瀏覽器中時,這很容易發生cache
。
您可以使用$('#myImage').prop('complete')
檢查圖像是否已經加載,加載圖像時返回true
。