преобразование веб-страницы в изображение jpeg с помощью Java

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

Общее представление, которое я имею, состоит в том, чтобы получить дисплейный буфер компонента рендеринга.. Я понятия не имею о том, как сделать это.. помогите..

5
задан ravi 30 April 2010 в 17:03
поделиться

2 ответа

Для решения на чистом Java, которое может масштабироваться для поддержки параллельного рендеринга, вы можете использовать браузер Java HTML4 / CSS2, например Cobra , который предоставляет компонент Swing для графического интерфейса. Когда вы создаете экземпляр этого компонента, вы можете вызвать его метод 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
ответ дан 14 December 2019 в 13:30
поделиться

Есть небольшой трюк, который я использовал для этого приложения:

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

Проблема в том, что вам нужно иметь машину, предназначенную для этого.

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

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

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

  • И, наконец, сделайте снимок экрана с помощью java.awt.Robot и сохраните его в 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.

3
ответ дан 14 December 2019 в 13:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: