我的用户可以上传非常大的图片,而裁剪和显示目的我正在添加width
属性,因此它非常适合浏览器窗口。实际图像大小可以是 - 例如1920 x 1080像素。
<!-- width added for display purpose -->
<img class="croppable" src="images/fhd.jpg" width="640" />
为了计算真实选择框尺寸(如果x
坐标为20px,则原始全高清图片中将为60px)我需要获得完整图像尺寸之前应用width
属性。
问题是这将返回640作为值,同时考虑width属性:
// Important: Use load event to avoid problems with webkit browser like safari
// when using cached images
$(window).load(function(){
$('img.croppable').each(function(){
alert(this.width);
});
});
请不要将此标记为重复,因为我要求的是完全不同于简单的图像宽度/高度回溯(实际上有效)。
编辑:Chris G.解决方案似乎无效:
$(window).load(function(){
$('img.croppable').each(function(){
console.log(this.src);
var original = new Image(this.src);
console.log(original);
$("#original_w").text(original.width); // Temp, more images to be added
$("#original_h").text(original.height); // Temp, more images to be added
});
});
控制台输出:
http://localhost/DigitLifeAdminExtension/images/pillars-of-creation.jpg
<img width="0">
答案 0 :(得分:3)
获取图像本身的宽度/高度,而不是其中包含的div。
$(window).load(function(){
$('img.croppable').each(function(){
var img = new Image();
img.src = $(this).src;
alert(img.width);
});
});
答案 1 :(得分:0)
您可以删除属性,获取宽度并再次将属性放置到位:
var $img = $(img);
var oldWidth = $img.attr("width");
var imgWidth = $img.removeAttr("width").width();
$img.width(oldWidth);
但我认为Chris G.的答案也很有效,只是确保在你试图获得宽度时它会被加载:
img.onload = function() {
if (!img.complete) return; // IMG not loaded
width = img.width;
imgManipulationGoesHere();
}
答案 2 :(得分:0)
适用于大多数最新的浏览器和IE9。
$(window).load(function(){
$('img.croppable').each(function(){
alert(this.naturalHeight);
});
});
答案 3 :(得分:0)
工作解决方案是:
$(function(){
$('img.croppable').each(function () {
var original = new Image(this.src);
original.onload = function () {
alert(original.src + ': ' + original.width + 'x' +original.height);
};
});
});