【问题标题】:Checking the size of an Image with GWT使用 GWT 检查图像的大小
【发布时间】:2012-03-27 09:13:12
【问题描述】:

我有一个生成 SVG 文件的 GWT 应用程序。

我想将来自某个 URL 的图像嵌入到我的 SVG 中,但我希望调整它的大小以保持正确的纵横比。

我通过使用 GWT 中的 Image 类加载图像来做到这一点,并检查高度到宽度,然后进行一些求和以找到我需要它在我的 SVG 中的高度和宽度。

我将图像嵌入到 SVG 中,如下所示:

<image href="http://some.image/URL.png" height="100" x="50" width="150" y="50"></image>

我遇到的问题是当我执行以下操作时:

Image image = new Image(sourceURL);
int width = image.getWidth();
int height = image.getHeight();
....

我第一次对特定 URL 执行此操作时,宽度或高度的值返回为 0。 不幸的是,在循环中重试似乎并不能解决问题,但如果我要求我的应用程序再次生成 SVG,它就可以工作。

有什么想法吗?

【问题讨论】:

  • 请记住,只要图像尚未加载,宽度和高度是未知的。您可能应该等待“Loaded”事件被触发,然后执行您的操作。
  • @GuillaumePolet 我尝试这样做,但事件花了一分钟多的时间才被解雇。但是,如果我在 10 秒内两次询问应用程序,它会在第二次尝试时立即加载。
  • 您的代码一定有问题,因为我已经成功使用了这些方法,并且加载时间不长。您可以尝试在 SSCCE (sscce.org) 中重现错误吗?它可以帮助你找到你的错误。如果没有,我们可以看看。
  • 事实上我刚刚再试了一次,我从来没有看到加载处理程序被调用,即使图像宽度返回为非零。

标签: java javascript gwt svg gwt2


【解决方案1】:

好的,抱歉这不是一个答案,但是 cmets 太小了,不能放一些代码。

我尝试了以下方法,效果很好。因此,您可能应该尝试将您的问题隔离在一小段代码中:

    @Override
    public void onModuleLoad() {

    final Image image = new Image("https://www.google.com/images/srpr/logo3w.png");
    image.addLoadHandler(new LoadHandler() {

        @Override
        public void onLoad(LoadEvent event) {
            Window.alert(image.getWidth() + " " + image.getHeight());
        }
    });
    RootLayoutPanel.get().add(image);
    }

【讨论】:

  • 感谢这个示例代码,我已经用这个代码建立了一个项目,但它似乎没有工作。负载处理程序不再被调用。
  • 我刚刚在新选项卡中的网络浏览器中查看了图像,然后重新运行示例代码并且它工作了......但问题仍然存在,为什么它第一次找不到图像?
  • 好的,那么您的浏览器可能有问题?你尝试过不同的吗?如果您使用的是 FF,也许尝试禁用某些扩展?我知道我在使用 Web Developer Tools 时遇到了非常严重的问题。
  • 我试过的每台机器上的每个浏览器都有同样的问题。会不会是 GWT 错误? (鉴于我与您提供的小样本结果相同,我看不出代码中的错误所在)
  • 图像是否已添加到文档中?如果不是,则浏览器不会加载它,并且不会调用 LoadHandler。我还在我的代码中更改了我的示例图片网址,因为它效果不佳
猜你喜欢
  • 1970-01-01
  • 2013-05-28
  • 2012-05-16
  • 1970-01-01
  • 2014-02-04
  • 2015-05-26
  • 2015-05-22
  • 1970-01-01
  • 2019-06-24
相关资源
最近更新 更多