Java:确定String是否是URL(没有www或http),取其截图

时间:2017-11-06 10:29:59

标签: java spring image-processing phantomjs

我正在开发Spring-MVC webapplication,我们正在尝试获取URL的屏幕截图。目前我正在使用PhantomJS执行该任务,但速度太慢(> 10秒)。此外,URL必须与http / https和www一起用于检测它是否为URL。由于这是一个聊天应用程序,因此用户可以添加简单的URL,如helloworld.com。你能帮忙的话,我会很高兴。谢谢。

代码:

 String[] words = message.split(" ");
                for( String item : words ){
                     boolean val = ResourceUtils.isUrl(item);
                    if(val){
                        urlIdentifier = calcUrl(item);
                        break;
                    }else {
                        System.out.println("Url false is "+item);
                    }
                }

                if(urlIdentifier!=null){
                    replies.setPreviewIdentifier(urlIdentifier);
                    input.put("preview_identifier",urlIdentifier);
                }

计算屏幕截图的方法:

   private String calcUrl(String website){
        try {
            String identifier = String.valueOf(new BigInteger(130, random).toString(32));
            String previewLocation = msg + "chatthumbs/" + identifier ;

            Process proc = Runtime.getRuntime().exec("phantomjs --ssl-protocol=any " +
                    "/home/deploy/phantom/rasterizepdf.js " +" "+website+" " +previewLocation);
            proc.waitFor();
            BufferedImage image = ImageIO.read(new File("/home/akshay/testme.png"));
            if(image!=null){

                if (image.getWidth() > image.getHeight()) {
                    image = Scalr.resize(image, Scalr.Mode.FIT_TO_HEIGHT, 250, 250);
                } else {
                    image = Scalr.resize(image, Scalr.Mode.FIT_TO_WIDTH, 250, 250);
                }
                image = Scalr.crop(image, 250, 250);
                ImageIO.write(image, "png", new File(previewLocation));
            }
            return identifier;
        }catch (Exception e){
            e.printStackTrace();
        }
        return null;
    }

任何帮助都会很好。谢谢。

1 个答案:

答案 0 :(得分:0)

  1. (a)我认为拍摄屏幕截图的过程需要时间。此代码是否与聊天屏幕在同一设备上运行?为什么不使用java.awt.Robot来拍摄屏幕截图?或者只是保存文本为什么需要屏幕截图?
  2. (b)系统是否太忙/在SSD上使用以查看是否更快?

    (c)但对最终应用程序感到好奇,这是Web应用程序的一部分吗?您的代码将如何在客户端系统上运行?或者,您是否会在监视网页并拍摄屏幕截图的所有用户系统上安装java代理?那么为什么要使用网页,使用java应用程序聊天,并将文本解析为键入。

    1. 解析文字。如果用户键入/粘贴长消息怎么办?您是在解析所有内容还是在进行更改?如果它似乎是一个问题,想一想如何改进它。现在忽略即时问题。 此外,如果msg太长,解析可能会花费很多时间。也许在每次按键或更改事件后进行处理(如果粘贴)保留以前文本的本地js副本以获得差异?