Gwt图像原始大小

时间:2011-08-10 09:19:01

标签: gwt gwt2

我使用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);//
    }

3 个答案:

答案 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)

在图像加载后读取图像元素的naturalHeightnaturalWidth

    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$
    }