我使用Image对象通过调用setPixelSize()方法将png图像作为缩略图加载来调整图像大小。我还需要在某个时刻将图像的原始大小检索为整数。如何获得图像的原始尺寸(宽度,高度)?
好吧我找到了一个解决方法:我使用虚拟容器(SimplePanel)并加载图像而不缩放保存其实际尺寸,然后从父项中删除容器并丢弃新的Image对象。我不知道这是否是一个好的解决方法,但它确实有效。虽然我想知道是否有另一种方式...
解决方法的问题:我有一个droplist,我可以从中选择逻辑文件夹(包含图像)。当我选择一个新文件夹,并在显示器上加载新的图像集时,我的宽度为0,高度为0。
private void getTrueSize(String fullUrl) {
Image trueImage = new Image();
this.tstCon.add(trueImage);
trueImage.setUrl(fullUrl);
this.trueHeight = trueImage.getHeight();
this.trueWidth = trueImage.getWidth();
//this.tstCon.remove(trueImage);
//trueImage = null;
GWT.log("Image [" + this.imgTitle + "] -> height=" + this.trueHeight + " -> width=" + this.trueWidth);//
}
答案 0 :(得分:1)
扩展Image类并实现onAttach()方法。当窗口小部件附加到浏览器的文档时,将调用此方法。
public class Thumb extends Image {
public Thumb(){
super();
}
protected void onAttach(){
Window.alert(getOffsetHeight()+" "+getOffsetWidth()); //this should give you the original value
setPixelSize(10,10); // this should be the visible value
super.onAttach();
}
}
如果这不起作用,请尝试实现onLoad()而不是onAttach(),因为在将图像添加到DOM之后将调用onLoad(),这样它肯定会起作用。
答案 1 :(得分:0)
它是创建新隐藏图像(在视口外放置绝对图像)并读取大小的最简单方法。有一个JavaScript lib可以读取图像的exif数据,但在这种情况下这将是过度的。
答案 2 :(得分:0)
在图像加载后读取图像元素的naturalHeight
和naturalWidth
。
public Panel() {
image = new Image();
image.addLoadHandler(this::onLoad);
}
private void onLoad(@SuppressWarnings("unused") LoadEvent event) {
origImageWidth = getNaturalWidth(image);
origImageHeight = getNaturalHeight(image);
}
private static int getNaturalHeight(Image img) {
return img.getElement().getPropertyInt("naturalHeight"); //$NON-NLS-1$
}
private static int getNaturalWidth(Image img) {
return img.getElement().getPropertyInt("naturalWidth"); //$NON-NLS-1$
}