Ho fatto qualche esperimento da solo. La mia intuizione è stata quella di provare su JEditorPane
proprio come detto in the answer your code is based on. Non so di quanto aiuto possa essere, ma potrebbe essere d'aiuto. Fornisco alcuni risultati, ma per ovvi motivi, la fortuna del supporto css ecc in JEditorPane
sembra tutto brutto.
Questo è il mio codice:
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import javax.imageio.ImageIO;
import javax.swing.*;
import javax.swing.text.html.HTMLEditorKit;
public class WebPageToImageThumbnail {
public static void main(String[] a) throws Exception {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final JEditorPane editorPane = new JEditorPane();
editorPane.setEditorKit(new HTMLEditorKit());
try {
editorPane.setPage(new URL("http://weblogs.java.net/blog/alex2d/archive/2008/12/jwebpane_projec.html"));
} catch (IOException ex) {
}
final JPanel panel = new JPanel(new BorderLayout());
panel.add(new JScrollPane(editorPane), BorderLayout.CENTER);
panel.add(new JButton(new AbstractAction("SAVE") {
@Override
public void actionPerformed(ActionEvent e) {
BufferedImage image = capture(editorPane);
try {
save(image, new File("foo.png"), 64, 64);
} catch (IOException ex) {
}
}
}), BorderLayout.SOUTH);
frame.setContentPane(panel);
frame.setSize(600, 400);
frame.setVisible(true);
}
});
}
public static BufferedImage capture(Component component) {
BufferedImage image = new BufferedImage(component.getWidth(), component.getHeight(), BufferedImage.TYPE_INT_RGB);//component.setSize(image.getWidth(), image.getHeight());
Graphics2D g = image.createGraphics();
try {
component.paint(g);
} finally {
g.dispose();
}
return image;
}
private static BufferedImage getScaledImage(BufferedImage image, int width, int height) {
BufferedImage buffer = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
Graphics2D g = buffer.createGraphics();
try {
g.drawImage(image, 0, 0, width, height, null);
} finally {
g.dispose();
}
return buffer;
}
public static void save(BufferedImage image, File png, int width, int height) throws IOException {
ImageIO.write(getScaledImage(image, width, height), "png", png);
}
}
Ho anche fatto un po 'scavare sulla SWT
ho trovato alcuni pensa che potrebbe essere utile, ma dal momento che attualmente il tempo di fortuna, non posso provare. Da quanto ho letto, devo concordare con @Emanuele Bezzi (+1) che dovremo utilizzare la Shell in qualche modo per ottenere il contenuto del sito, in cui siamo effettivamente interessati solo.
ho scoperto che Shell ha print
metodo che prende GC oggetto che può dipingere tra cui all'Immagine e altro interessante per noi roba, la documentazione dice: "Classe GC è dove tutte le funzionalità di disegno che sono supportati da SWT sono localizzato. Le istanze vengono utilizzate per disegnare su un'immagine, un controllo o direttamente su un display. ".
Eppure in questo particolare momento non mi è chiaro come ottenere esattamente ciò che voglio. Ad ogni modo, sto sollevando questo punto solo per renderti consapevole. Ho ancora bisogno di esaminarlo ulteriormente.
Si otterrà una miniatura distorta a meno che non si calcoli la larghezza e l'altezza della miniatura in modo proporzionale alla larghezza e all'altezza dell'immagine del sito Web. –
@GilbertLeBlanc per ora sarei felice se ottengo qualche miniatura – RoflcoptrException
stavo per aspettare e vedere se qualcuno ha una risposta, ma per quanto posso dire, la classe Browser non ha alcun metodo per ottenere l'immagine del web pagina. Se stavi usando Swing, ti suggerirei di usare la classe Robot per ottenere l'immagine. –