【问题标题】:GAE/Java: How load image from a given URL and get image width and height [duplicate]GAE / Java:如何从给定的URL加载图像并获取图像宽度和高度[重复]
【发布时间】:2012-07-02 02:42:47
【问题描述】:

我正在使用 GAE[JAVA] 进行一些图像处理。 GAE不允许将文件写入磁盘,所以我希望我的App允许输入一个URL,然后我想检查这个指定的URL是否代表图像,如果是,我想获取它的高度和宽度。

有没有人提供一些解决方案来告诉我如何实现这个?

【问题讨论】:

    标签: java image google-app-engine


    【解决方案1】:

    您可以使用 GAE Image API。解决您的问题的简单示例是:

        final ByteArrayOutputStream baos = new ByteArrayOutputStream();
        try {
            final InputStream inputStream = url.openStream();
            int read;
            while ((read = inputStream.read()) != -1) {
                baos.write(read);
            }
    
            final Image image = ImagesServiceFactory.makeImage(baos.toByteArray());
    
            resp.getWriter().println("image width: " + image.getWidth());
            resp.getWriter().println("image height: " + image.getHeight());
        } catch (final IOException e) {
            resp.getWriter().println("image doesn't exists!");
        } catch (final IllegalArgumentException e) {
            resp.getWriter().println("invalid image!");
        }
    

    完成 Servlet 以执行此操作:

    package foo.bar;
    
    import java.io.ByteArrayOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.net.URL;
    
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import com.google.appengine.api.images.Image;
    import com.google.appengine.api.images.ImagesServiceFactory;
    
    @SuppressWarnings("serial")
    public class MyFirstWebAppServlet extends HttpServlet {
        @Override
        public void doGet(final HttpServletRequest req, final HttpServletResponse resp) throws IOException {
            URL url;
            if ("exists".equals(req.getParameter("image"))) {
                url = new URL("https://www.google.com/logos/classicplus.png");
            } else if ("notImage".equals(req.getParameter("image"))) {
                url = new URL("http://www.google.com");
            } else {
                url = new URL("http://foo.bar/image.png");
            }
    
            resp.setContentType("text/plain");
            final ByteArrayOutputStream baos = new ByteArrayOutputStream();
            try {
                final InputStream inputStream = url.openStream();
                int read;
                while ((read = inputStream.read()) != -1) {
                    baos.write(read);
                }
    
                final Image image = ImagesServiceFactory.makeImage(baos.toByteArray());
    
                resp.getWriter().println("image width: " + image.getWidth());
                resp.getWriter().println("image height: " + image.getHeight());
            } catch (final IOException e) {
                resp.getWriter().println("image doesn't exists!");
            } catch (final IllegalArgumentException e) {
                resp.getWriter().println("invalid image!");
            }
    
        }
    }
    

    【讨论】:

    • 异常处理对解决我的回答很有帮助!非常感谢!
    【解决方案2】:

    也许这种方式很奇怪,但我认为你可以使用 javascript

    var img=new Image();
    img.src="http://www.google.com.hk/images/nav_logo107.png";
    img.height;
    img.width;
    

    如果图像没有退出,则会抛出 404 (Not Found) 问题。

    【讨论】:

    • 我不想用JS来处理这个任务。当然,javascript 很容易处理这个任务。了解 Java 代码吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-01
    • 2011-04-10
    • 1970-01-01
    • 2012-07-11
    • 2010-11-18
    • 1970-01-01
    相关资源
    最近更新 更多