2

我使用 Image 对象通过调用其 setPixelSize() 方法来调整图像大小,以将 png 图像加载为缩略图。我还需要在某个时候将图像的原始大小作为整数检索。如何获得图像的原始尺寸(宽度、高度)?

好的,我找到了一种解决方法:我使用虚拟容器(SimplePanel)并加载图像而不缩放保存其真实尺寸,然后从父容器中删除容器并丢弃新的图像对象。我不知道这是否是一个好的解决方法,但它确实有效。虽然我想知道是否有另一种方法......

解决方法的问题:我有一个下拉列表,我可以从中选择逻辑文件夹(包含图像)。当我选择一个新文件夹并在显示器上加载新的图像集时,宽度为 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);//
    }
4

3 回答 3

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(),因为 onLoad() 将在图像添加到 DOM 之后调用,这样它肯定应该可以工作。

于 2011-08-10T17:27:39.810 回答
0

它是创建新隐藏图像(绝对放置在视口之外)并读取大小的最简单方法。有一个JavaScript 库可以读取图像的 exif 数据,但在这种情况下这将是多余的。

于 2011-08-10T09:55:12.003 回答
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$
    }


于 2019-10-27T13:23:03.830 回答