преобразование веб-страницы в изображение JPEG с использованием Java - PullRequest
5 голосов
/ 30 апреля 2010

Я создаю веб-приложение на Java, где я хочу получить весь скриншот веб-страницы, если я введу URL-адрес веб-страницы в качестве ввода.

Основная идея, которую я имею, - захват буфера дисплея компонента рендеринга. Я понятия не имею, как это сделать. Пожалуйста, помогите ..

Ответы [ 2 ]

3 голосов
/ 01 мая 2010

Для чисто java-решения, которое может масштабироваться для поддержки одновременного рендеринга, вы можете использовать java-браузер HTML4 / CSS2, такой как Cobra , который предоставляет компонент Swing для GUI. Когда вы создаете экземпляр этого компонента, вы можете вызвать его метод paint (Graphics g), чтобы нарисовать себя за пределами экрана

E.g.
Component c = ...; // the browser component
BufferedImage bi = new BufferedImage(c.getWidth(), c.getHeight(), TYPE_INT_RGB)
Graphics2d g = bi.createGraphics();    
c.paint(g);

Затем вы можете использовать API изображений Java, чтобы сохранить его в формате JPG.

JPEGImageEncoder encoder = JPEGCodec.createEncoder(new FileOutputStream("screen.jpg"));
enncoder.encode(bi);  // encode the buffered image

Браузеры на основе Java обычно бледнеют по сравнению с установленными нативными браузерами. Однако, поскольку ваша цель - статические изображения, а не интерактивный браузер, браузер на основе Java может быть более чем достаточным в этом отношении.

3 голосов
/ 30 апреля 2010

Для этого приложения я использовал небольшую хитрость:

Демо-приложение обратного отсчета http://img580.imageshack.us/img580/742/capturadepantalla201004wd.png Java-приложение со страницей blog.stackoverflow.com (нажмите на изображение, чтобы посмотреть демонстрационное видео)

Проблема в том, что вам нужна машина, посвященная этому.

Итак, хитрость довольно проста.

  • Создайте приложение, которое принимает как аргумент URL, который вы хотите получить.

  • Затем откройте его с помощью Desktop.open( url ), который запустит текущий веб-браузер.

  • И, наконец, сделайте скриншот с java.awt. Робот и сохранить его в diks.

Что-то вроде:

 class WebScreenShot {
     public static void main( String [] args ) {
         Desktop.getDesktop().open( args[0] );
         Robot robot = new Robot();
         Image image = robot.createScreenCapture( getScreenResolutionSize() );
         saveToDisk( image );
     }
  }

Это решение далеко от совершенства, поскольку ему нужна вся ОС, но если у вас есть виртуальная машина, предназначенная для этого приложения, вы можете легко сканировать Интернет и делать скриншоты из него.

Проблема наличия этого приложения в качестве неинтрузивного приложения заключается в том, что до настоящего времени не было хорошего средства рендеринга движка HTML для Java.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...