经过一番调查后,我决定在我的新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
。