2013-11-26 1 views
0

온라인 웹캠에서 몇 개의 이미지를 캡처하는 서블릿을 작성해야합니다. (URL, Interval, numer, count와 같은) 모든 매개 변수는 POST 메소드로 전송됩니다. 내가 examle이 웹캠에 대한 이미지 양식을 캡처 변경해야 무엇자바 버퍼 이미지 양식 웹캠

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    String url = request. getParameter("url").toString(); 
    int interwal = Integer.parseInt(request.getParameter("interwal").toString()); 
    int nrSt = Integer.parseInt(request.getParameter("nr").toString()); 
    int il = Integer.parseInt(request.getParameter("il").toString()); 
    PrintWriter out = response.getWriter(); 
    BufferedImage img; 
    URL imgURL; 
    File imgFile; 
    for(int i=0; i<il; i++){ 
     try{ 
      imgURL = new URL(url); 
      img = ImageIO.read(imgURL); 
      imgFile = new File("E:\\image" + (nrSt+i) + ".jpg"); 
      ImageIO.write(img, "png", imgFile); 
      out.print("Saved image" + (nrSt+i) + ".jpg<br>"); 
     } catch(IOException e){ 
      out.print("Error reading Image!"); 
      e.printStackTrace(); 
     } 
     try { 
      Thread.sleep(interwal*1000); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

: cam

답변

0

웹캠 페이지를 사용하여 훨씬 더 어려울 수 있습니다 내 서블릿 파일에서 나는 그런 일이있다. 예제로 선택한 것은 JavaScript를 사용하여 페이지에서 계산되는 동적 이미지 URL을 사용하지만 필요한 것은 쉽게 추출 할만큼 간단합니다. 다음 문제는 이미지 URL이 ImageIO.read()이 아닌 것으로 보이는 다중 부분 응답으로 응답하는 서비스를 가리킨다는 것입니다.

다음 독립형 코드가 성공적으로 웹캠 이미지 획득 보인다 등의 코드가 실제 오류 처리 결여되어

public static void main(String[] args) { 
    try { 
     // get webcam page 
     URL url = new URL("...your example URL.../webcam/campob.html"); 
     InputStreamReader isr = new InputStreamReader(url.openStream(), "UTF-8"); 
     Scanner scanner = new Scanner(isr); 
     final Pattern nullDelimiter = Pattern.compile("<<<>>>"); 
     String html = scanner.useDelimiter(nullDelimiter).next(); 
     scanner.close(); 

     // extract image URL from HTML 
     final Pattern extractPattern = Pattern.compile(
       "^var BaseURL = \"([^\"]+)\".*" 
       + "^var ImageResolution = \"([^\"]+)\".*" 
       + "^var File = \"([^\"]+)\"", 
       Pattern.MULTILINE|Pattern.DOTALL); 
     Matcher m = extractPattern.matcher(html); 
     if (!m.find()) throw new RuntimeException(); 
     URL imgURL = new URL(m.group(1) + m.group(3) + m.group(2)); 
     System.out.println("imgURL=" + imgURL); 

     // read headers into buffer 
     InputStream is = imgURL.openStream(); 
     byte[] buffer = new byte[131072]; 
     int bytes = 0; 
     Pattern headersPattern = Pattern.compile(
       "^Content-Length:\\s*(\\d+)\\s*$.*?^$\\r?\\n", 
       Pattern.MULTILINE|Pattern.DOTALL); 
     while (bytes < buffer.length) { 
      int count = is.read(buffer, bytes, buffer.length - bytes); 
      if (count < 0) break; 
      bytes += count; 
      m = headersPattern.matcher(new String(buffer, "ASCII")); 
      if (m.find()) break; 
     } 

     // read rest of image bytes into buffer 
     int offset = m.end(); 
     int contentLength = Integer.parseInt(m.group(1)); 
     int limit = Math.min(buffer.length, offset + contentLength); 
     while (bytes < limit) { 
      int count = is.read(buffer, bytes, limit - bytes); 
      if (count < 0) break; 
      bytes += count; 
     } 
     is.close(); 
     System.out.println("bytes=" + bytes + " offset=" + offset); 

     // read image from buffer (start after header) 
     is = new ByteArrayInputStream(buffer); 
     is.skip(offset); 
     Image img = ImageIO.read(is); 
     System.out.println(img); 
    } catch (Exception ex) { 
     ex.printStackTrace(System.err); 
    } 
} 

주, 버퍼가 고정했다 크기