OVH Cloud OVH Cloud

Export HTML vers PNG

8 réponses
Avatar
Eraser Head
Bonjour à tous,

Voilà, je cherche à créer en Java des imagettes au format PNG (ou GIF ou
autre) à partir de pages HTML.

Est-ce que qqun a déjà fait ça ou pourrait m'orienter sur les bonnes
classes à utiliser ?

J'ai déjà regardé "JEditorPane" et "HTMLEditorKit" mais là je ne vois
pas trop après comment transformer l'affichage en image...

Merci de votre aide !

--

GilloS

---------------------------------------------------------------
[...] même si tu comprends pas ce que je dis, tu le comprends
(Jean-Claude Van Damme)
---------------------------------------------------------------

8 réponses

Avatar
Fabien Bergeret
Eraser Head wrote:
Bonjour à tous,

Voilà, je cherche à créer en Java des imagettes au format PNG (ou GIF ou
autre) à partir de pages HTML.

Est-ce que qqun a déjà fait ça ou pourrait m'orienter sur les bonnes
classes à utiliser ?

J'ai déjà regardé "JEditorPane" et "HTMLEditorKit" mais là je ne vois
pas trop après comment transformer l'affichage en image...

Merci de votre aide !

Faire un composant integrant une HTMLEditorKit.

Ajouter un bouton de conversion quelque part.
Lorsque le bouton est clique :
Creer une image de la taille du HTMLEditorKit.
Obtenir un Graphics sur cette image.
Appliquer la methode paint sur le HTMLEditorKit en passant le Graphics
en parametre.
L'image contient maintenant la representation bitmap de la page.
Y'a plus qu'a la sauver au format "qui va bien".
Desole pour ce macro-algo simpliste, j'ai plus le code sous la main ...

Avatar
Eraser Head
Fabien Bergeret wrote:
Eraser Head wrote:
Bonjour à tous,

Voilà, je cherche à créer en Java des imagettes au format PNG (ou GIF
ou autre) à partir de pages HTML.

Est-ce que qqun a déjà fait ça ou pourrait m'orienter sur les bonnes
classes à utiliser ?

J'ai déjà regardé "JEditorPane" et "HTMLEditorKit" mais là je ne vois
pas trop après comment transformer l'affichage en image...

Merci de votre aide !

Faire un composant integrant une HTMLEditorKit.

Ajouter un bouton de conversion quelque part.
Lorsque le bouton est clique :
Creer une image de la taille du HTMLEditorKit.
Obtenir un Graphics sur cette image.
Appliquer la methode paint sur le HTMLEditorKit en passant le Graphics
en parametre.
L'image contient maintenant la representation bitmap de la page.
Y'a plus qu'a la sauver au format "qui va bien".
Desole pour ce macro-algo simpliste, j'ai plus le code sous la main ...


Merci de ta réponse !

Bon, j'ai essayé un truc à partir de ton algo et pour l'instant je
n'obtiens qu'une image blanche :-(

Ce que je ne vois pas, c'est le lien entre HTMLEditorKit et Graphics ?!?
Il n'y pas de méthode "paint( )" dans HTMLEditorKit...

Je plonge de nouveau dans la doc et je réessaye !

--

GilloS

---------------------------------------------------------------
[...] même si tu comprends pas ce que je dis, tu le comprends
(Jean-Claude Van Damme)
---------------------------------------------------------------


Avatar
Fabien Bergeret
Eraser Head wrote:
Fabien Bergeret wrote:

Eraser Head wrote:

Bonjour à tous,

Voilà, je cherche à créer en Java des imagettes au format PNG (ou GIF
ou autre) à partir de pages HTML.

Est-ce que qqun a déjà fait ça ou pourrait m'orienter sur les bonnes
classes à utiliser ?

J'ai déjà regardé "JEditorPane" et "HTMLEditorKit" mais là je ne vois
pas trop après comment transformer l'affichage en image...

Merci de votre aide !

Faire un composant integrant une HTMLEditorKit.

Ajouter un bouton de conversion quelque part.
Lorsque le bouton est clique :
Creer une image de la taille du HTMLEditorKit.
Obtenir un Graphics sur cette image.
Appliquer la methode paint sur le HTMLEditorKit en passant le Graphics
en parametre.
L'image contient maintenant la representation bitmap de la page.
Y'a plus qu'a la sauver au format "qui va bien".
Desole pour ce macro-algo simpliste, j'ai plus le code sous la main ...



Merci de ta réponse !

Bon, j'ai essayé un truc à partir de ton algo et pour l'instant je
n'obtiens qu'une image blanche :-(

Ce que je ne vois pas, c'est le lien entre HTMLEditorKit et Graphics ?!?
Il n'y pas de méthode "paint( )" dans HTMLEditorKit...

Je plonge de nouveau dans la doc et je réessaye !

Apres consultation de la doc, c'est le JEditorPane qui a une methode

paint (heritee de Component).
Le HTMLEditorKit ne s'utilise pas directement, mais de maniere implicite
quand le type mime des donnees manipulees par le JEditorPane est text/html



Avatar
Eraser Head
Fabien Bergeret wrote:
Eraser Head wrote:
Fabien Bergeret wrote:

Eraser Head wrote:

Bonjour à tous,

Voilà, je cherche à créer en Java des imagettes au format PNG (ou
GIF ou autre) à partir de pages HTML.

Est-ce que qqun a déjà fait ça ou pourrait m'orienter sur les bonnes
classes à utiliser ?

J'ai déjà regardé "JEditorPane" et "HTMLEditorKit" mais là je ne
vois pas trop après comment transformer l'affichage en image...

Merci de votre aide !

Faire un composant integrant une HTMLEditorKit.

Ajouter un bouton de conversion quelque part.
Lorsque le bouton est clique :
Creer une image de la taille du HTMLEditorKit.
Obtenir un Graphics sur cette image.
Appliquer la methode paint sur le HTMLEditorKit en passant le
Graphics en parametre.
L'image contient maintenant la representation bitmap de la page.
Y'a plus qu'a la sauver au format "qui va bien".
Desole pour ce macro-algo simpliste, j'ai plus le code sous la main ...



Merci de ta réponse !

Bon, j'ai essayé un truc à partir de ton algo et pour l'instant je
n'obtiens qu'une image blanche :-(

Ce que je ne vois pas, c'est le lien entre HTMLEditorKit et Graphics ?!?
Il n'y pas de méthode "paint( )" dans HTMLEditorKit...

Je plonge de nouveau dans la doc et je réessaye !

Apres consultation de la doc, c'est le JEditorPane qui a une methode

paint (heritee de Component).
Le HTMLEditorKit ne s'utilise pas directement, mais de maniere implicite
quand le type mime des donnees manipulees par le JEditorPane est text/html


Alors c'est bien ce que j'ai fait, mais j'obtiens une image blanche...

Voici mon code :



import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.FileOutputStream;

import javax.swing.JEditorPane;

import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;

public class TestThumbnail
{
public void convert( String url, String filename )
throws Exception
{
JEditorPane pane = new JEditorPane( url );

//HTMLEditorKit kit = (HTMLEditorKit) pane.getEditorKit( );

BufferedImage img;
Graphics g;

img = new BufferedImage( 800,600,BufferedImage.TYPE_INT_RGB );

g = img.getGraphics( );

pane.setSize( 800,
600 );
pane.paint( g );

// Encode as a JPEG
FileOutputStream fos = new FileOutputStream( filename );
JPEGImageEncoder jpeg = JPEGCodec.createJPEGEncoder( fos );


jpeg.encode( img );
fos.close( );
} // end init()

public static void main( String[] args )
throws Exception
{
TestThumbnail tt = new TestThumbnail( );


tt.convert( "http://www.yahoo.fr", "yahoo.jpg" );
} // end main()
} // end TestThumbnail


Doit y'avoir un truc que j'ai pas vu :-(

Merci encore de ta réponse...

--

GilloS

---------------------------------------------------------------
[...] même si tu comprends pas ce que je dis, tu le comprends
(Jean-Claude Van Damme)
---------------------------------------------------------------




Avatar
Fabien Bergeret
Ca doit etre parce que la page n'a pas encore le temps d'etre chargee
que tu cree deja l'image.
Voici mon code, adapte du tien :
import java.awt.BorderLayout;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import javax.swing.JButton;
import javax.swing.JEditorPane;
import javax.swing.JFrame;

import com.sun.image.codec.jpeg.ImageFormatException;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;

public class TestThumbnail extends JFrame {
public TestThumbnail(String url, final String fichier) throws
IOException {
super("HTML thumbnail maker");
getContentPane().setLayout(new BorderLayout());
pane = new JEditorPane(url);
getContentPane().add(pane, BorderLayout.CENTER);
JButton button = new JButton("Créer fichier");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
convert(fichier);
}
});
getContentPane().add(button, BorderLayout.SOUTH);
setSize(800, 600);
setVisible(true);
}
private JEditorPane pane;
public void convert(String filename) {
try {
BufferedImage img;
Graphics g;

img = new BufferedImage(pane.getWidth(), pane.getHeight(),
BufferedImage.TYPE_INT_RGB);

g = img.getGraphics();
pane.paint(g);

// Encode as a JPEG
FileOutputStream fos = new FileOutputStream(filename);
JPEGImageEncoder jpeg = JPEGCodec.createJPEGEncoder(fos);

jpeg.encode(img);
fos.close();
} catch (FileNotFoundException e) {
// TODO Bloc catch auto-généré
e.printStackTrace();
} catch (ImageFormatException e) {
// TODO Bloc catch auto-généré
e.printStackTrace();
} catch (IOException e) {
// TODO Bloc catch auto-généré
e.printStackTrace();
}
} // end init()

public static void main(String[] args) throws Exception {
TestThumbnail tt = new TestThumbnail("http://www.yahoo.fr",
"yahoo.jpg");
} // end main()
} // end TestThumbnail


La difference, c'est que le generation de jpg ne se fait que lorsque le
bouton est clique. Comme ca, on a le temps de verifier visuellement que
la page a bien ete chargee.
Y'a peut etre un moyen de la faire par programmation, mais la, en 5
minutes, je sais pas.
Sinon, pour l'encodage en jpg, depuis que le package javax.imageio
existe, c'est assez moche d'utiliser les classes non standard
com.sun.image.codec.jpeg.*
Bon courage pour la finalisation de ton programme !
Avatar
Pierre Gilquin
Peut etre un media tracker pourrait faire cela programmatiquement :

try {
img = new BufferedImage(pane.getWidth(), pane.getHeight(),
BufferedImage.TYPE_INT_RGB);

MediaTracker mediaTracker = new MediaTracker(new JPanel());
mediaTracker.addImage(img , 0);
mediaTracker.waitForID(0);
}
catch (InterruptedException ie)
{
System.err.println(ie);
System.exit(1);
}

Pierre


"Fabien Bergeret" a écrit dans le
message de news: 43ec6fd2$0$6905$
Ca doit etre parce que la page n'a pas encore le temps d'etre chargee que
tu cree deja l'image.
Voici mon code, adapte du tien :
import java.awt.BorderLayout;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import javax.swing.JButton;
import javax.swing.JEditorPane;
import javax.swing.JFrame;

import com.sun.image.codec.jpeg.ImageFormatException;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;

public class TestThumbnail extends JFrame {
public TestThumbnail(String url, final String fichier) throws
IOException {
super("HTML thumbnail maker");
getContentPane().setLayout(new BorderLayout());
pane = new JEditorPane(url);
getContentPane().add(pane, BorderLayout.CENTER);
JButton button = new JButton("Créer fichier");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
convert(fichier);
}
});
getContentPane().add(button, BorderLayout.SOUTH);
setSize(800, 600);
setVisible(true);
}
private JEditorPane pane;
public void convert(String filename) {
try {
BufferedImage img;
Graphics g;

img = new BufferedImage(pane.getWidth(), pane.getHeight(),
BufferedImage.TYPE_INT_RGB);

g = img.getGraphics();
pane.paint(g);

// Encode as a JPEG
FileOutputStream fos = new FileOutputStream(filename);
JPEGImageEncoder jpeg = JPEGCodec.createJPEGEncoder(fos);

jpeg.encode(img);
fos.close();
} catch (FileNotFoundException e) {
// TODO Bloc catch auto-généré
e.printStackTrace();
} catch (ImageFormatException e) {
// TODO Bloc catch auto-généré
e.printStackTrace();
} catch (IOException e) {
// TODO Bloc catch auto-généré
e.printStackTrace();
}
} // end init()

public static void main(String[] args) throws Exception {
TestThumbnail tt = new TestThumbnail("http://www.yahoo.fr",
"yahoo.jpg");
} // end main()
} // end TestThumbnail


La difference, c'est que le generation de jpg ne se fait que lorsque le
bouton est clique. Comme ca, on a le temps de verifier visuellement que la
page a bien ete chargee.
Y'a peut etre un moyen de la faire par programmation, mais la, en 5
minutes, je sais pas.
Sinon, pour l'encodage en jpg, depuis que le package javax.imageio existe,
c'est assez moche d'utiliser les classes non standard
com.sun.image.codec.jpeg.*
Bon courage pour la finalisation de ton programme !


Avatar
Fabien Bergeret
Pierre Gilquin wrote:
Peut etre un media tracker pourrait faire cela programmatiquement :

try {
img = new BufferedImage(pane.getWidth(), pane.getHeight(),
BufferedImage.TYPE_INT_RGB);

MediaTracker mediaTracker = new MediaTracker(new JPanel());
mediaTracker.addImage(img , 0);
mediaTracker.waitForID(0);
}
catch (InterruptedException ie)
{
System.err.println(ie);
System.exit(1);
}

Pierre

Non, le media tracker, c'est pour attendre le chargement d'une image.

Ici, c'est une page HTML que l'on attend.

Avatar
Eraser Head
Fabien Bergeret wrote:
Ca doit etre parce que la page n'a pas encore le temps d'etre chargee
que tu cree deja l'image.
Voici mon code, adapte du tien :
import java.awt.BorderLayout;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import javax.swing.JButton;
import javax.swing.JEditorPane;
import javax.swing.JFrame;

import com.sun.image.codec.jpeg.ImageFormatException;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;

public class TestThumbnail extends JFrame {
public TestThumbnail(String url, final String fichier) throws
IOException {
super("HTML thumbnail maker");
getContentPane().setLayout(new BorderLayout());
pane = new JEditorPane(url);
getContentPane().add(pane, BorderLayout.CENTER);
JButton button = new JButton("Créer fichier");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
convert(fichier);
}
});
getContentPane().add(button, BorderLayout.SOUTH);
setSize(800, 600);
setVisible(true);
}
private JEditorPane pane;
public void convert(String filename) {
try {
BufferedImage img;
Graphics g;

img = new BufferedImage(pane.getWidth(), pane.getHeight(),
BufferedImage.TYPE_INT_RGB);

g = img.getGraphics();
pane.paint(g);

// Encode as a JPEG
FileOutputStream fos = new FileOutputStream(filename);
JPEGImageEncoder jpeg = JPEGCodec.createJPEGEncoder(fos);

jpeg.encode(img);
fos.close();
} catch (FileNotFoundException e) {
// TODO Bloc catch auto-généré
e.printStackTrace();
} catch (ImageFormatException e) {
// TODO Bloc catch auto-généré
e.printStackTrace();
} catch (IOException e) {
// TODO Bloc catch auto-généré
e.printStackTrace();
}
} // end init()

public static void main(String[] args) throws Exception {
TestThumbnail tt = new TestThumbnail("http://www.yahoo.fr",
"yahoo.jpg");
} // end main()
} // end TestThumbnail


La difference, c'est que le generation de jpg ne se fait que lorsque le
bouton est clique. Comme ca, on a le temps de verifier visuellement que
la page a bien ete chargee.
Y'a peut etre un moyen de la faire par programmation, mais la, en 5
minutes, je sais pas.
Sinon, pour l'encodage en jpg, depuis que le package javax.imageio
existe, c'est assez moche d'utiliser les classes non standard
com.sun.image.codec.jpeg.*
Bon courage pour la finalisation de ton programme !


Merci de ta précieuse aide, je vais essayer tout de suite !

--

GilloS

---------------------------------------------------------------
[...] même si tu comprends pas ce que je dis, tu le comprends
(Jean-Claude Van Damme)
---------------------------------------------------------------