IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

Screenshot de site web


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 14
    Par défaut Screenshot de site web
    Connaissez vous une lib ou un framework qui permettrait de faire des screenshot de sites sur androide ?
    style
    bitmap Image = screenshot(url)
    un truc du genre ?
    sinon une idée du moyen de le faire sans faire appel à un service web du genre apercite ?
    merci

  2. #2
    Rédacteur
    Avatar de Viish
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2009
    Messages
    427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 427
    Par défaut
    Tu peux essayer quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
            Webview v = new WebView(this);
            v.setWebViewClient(new WebViewClient() 
            { 
                    public void onPageFinished(WebView view, String url) 
                    { 
                            Picture picture = view.capturePicture(); 
                            Bitmap  b = Bitmap.createBitmap( picture.getWidth(), 
    picture.getHeight(), Bitmap.Config.ARGB_8888); 
                            Canvas c = new Canvas( b ); 
                            picture.draw( c ); 
                            FileOutputStream fos = null; 
                            try { 
                                    fos = new FileOutputStream( "/sdcard/MesScreenshots" + 
    System.currentTimeMillis() + ".jpg" ); 
                                    if ( fos != null ) 
                                    { 
                                            b.compress(Bitmap.CompressFormat.JPEG, 90, fos ); 
                                            fos.close(); 
                                    } 
                            } catch( Exception e ) 
                            { 
                            //... 
                            } 
                    } 
              }); 
              w.loadUrl( "http://sberfini.developpez.com");
    Quelqu'un peut le rajouter au passage dans la FAQ s'il vous plait ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 14
    Par défaut
    merci de m'avoir mis sur la piste cependant j'obtiens des erreurs à cause du cas suivant:
    Le "onPageFinished" n'implique pas automatiquement que le picture soit déjà updaté et on chope dans ce cas une exception car creatBitmap reçoit un width et un eight = 0.
    pour remédier à ça voici ce que j'ai fait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    WebView v = new WebView(this);
    		 v.setPictureListener(new PictureListener(){
    			 @Override
    			 public void onNewPicture(WebView v, Picture p) {
    				 Picture picture = v.capturePicture();
    				 if(picture.getWidth()>0 && picture.getHeight()>0){
    					 Bitmap  b = Bitmap.createBitmap( picture.getWidth(), picture.getHeight(), Bitmap.Config.ARGB_8888); 
    					 Canvas c = new Canvas( b ); 
    					 picture.draw( c ); 
    					 FileOutputStream fos = null; 
    					 try { 
    						 fos = new FileOutputStream( "/sdcard/MesScreenshots/" + 
    								 System.currentTimeMillis() + ".jpg" ); 
    						 if ( fos != null ) 
    						 { 
    							 b.compress(Bitmap.CompressFormat.JPEG, 90, fos ); 
    							 fos.close(); 
    						 } 
    					 } catch( Exception e ) 
    					 { 
    						 //... 
    					 } 
    				 }
    			 }
    		 });
    		 v.loadUrl(urlToScreenShot);
    j'ai exploité un listener pour m'assurer du chargement du picture
    merci pour l'aide

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Février 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 14
    Par défaut
    bon en fait je ne capture rien ...

    j'ai une classe ScreenShot
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    public class ScreenShot {
    	private Bitmap bitmap;
    	private String url;
     
    	public void GetScreenShot(Context context){
    		WebView webView = new WebView(context);
    		webView.setPictureListener(new PictureListener(){
     
    			@Override
    			public void onNewPicture(WebView view, Picture picture) {
    				if(picture.getWidth()>0 && picture.getHeight()>0){
    					bitmap = Bitmap.createBitmap( picture.getWidth(), picture.getHeight(), Bitmap.Config.ARGB_8888); 
    					Canvas canvas = new Canvas( bitmap ); 
    					picture.draw( canvas ); 
    					//sauvegarde du bitmap sur la sdcard
    					FileOutputStream fos = null; 
    					try { 
    						fos = new FileOutputStream(
    								Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)+
    								"/"+System.currentTimeMillis()+".jpg" );
    						BufferedOutputStream bos = new BufferedOutputStream(fos);
    						if ( fos != null ) 
    						{ 
    							bitmap.compress(Bitmap.CompressFormat.JPEG, 90, bos ); 
    							bos.flush();
    							bos.close();
    							fos.close(); 
    						} 
    					} catch( Exception e ) 
    					{ 
    						//... 
    					} 
    				}
     
    			}
    		});
    		webView.loadUrl(url);				
    	}
     
    	public Bitmap GetBitmap(){
    		return bitmap;
    	}
    	public String GetUrl(){
    		return url;
    	}
    	public void SetUrl(String nUrl){
    		url = nUrl;
    	}
    }
    et dans mon activity j'ai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
          private List<String> listSiteUrl;
        private List<ScreenShot> listScreenShot;
    ...
    //(onCreate)...
    ...
                    listScreenShot = new ArrayList<ScreenShot>();
    		listSiteUrl = crawlUrl(URL+mKeyWords,regLR);
     
    		for (String mUrl: listSiteUrl){
    			ScreenShot mScreenShot = new ScreenShot();
    			mScreenShot.SetUrl(mUrl);
    			mScreenShot.GetScreenShot(this);
    			listScreenShot.add(mScreenShot);
    		}
    Le load url s'effectue mais jamais je ne reçois et traite l'évènement onNewPicture, j'ai mis un break point dessus mais je ne m'y arrête jamais.
    tous les éléments de ma list de screenshot on une url mais le bitmap est à null.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 14
    Par défaut
    nouveau test lol
    je m'y suis pris différemment mais tjrs pas de résultat ...
    j'ai défini mon activity comme "implements PictureListener"
    et j'y ai définit le onNewPicture comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    @Override
    public void onNewPicture(WebView view, Picture picture) {
    	for(ScreenShot screenShot: listScreenShot){
    		if(screenShot.GetWebView()==view){
    			if(picture.getWidth()>0 && picture.getHeight()>0){
    				Bitmap bitmap = Bitmap.createBitmap( picture.getWidth(), picture.getHeight(), Bitmap.Config.ARGB_8888);
    				Canvas canvas = new Canvas( bitmap ); 
    				picture.draw( canvas ); 
    				screenShot.SetBitmap(bitmap);
    			}
    		}
    	}
    }
    dans le onCreate:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    for (String mUrl: listSiteUrl){
    	ScreenShot mScreenShot = new ScreenShot(mUrl,this);
    	mScreenShot.GetWebView().setPictureListener(this);
    	mScreenShot.GetScreenShot();
    	listScreenShot.add(mScreenShot);
    }
    et ma classe ScreenShot est devenue:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    public class ScreenShot {
    	private Bitmap bitmap;
    	private String url;
    	private WebView webView;
    	ScreenShot(String nUrl,Context context){
    		url = nUrl;
    		webView = new WebView(context);
    	}
    	public void GetScreenShot(){
    		webView.loadUrl(url);				
    	}
    	public Bitmap GetBitmap(){
    		return bitmap;
    	}
    	public String GetUrl(){
    		return url;
    	}
    	public WebView GetWebView(){
    		return webView;
    	}
    	public void SetBitmap(Bitmap nBitmap){
    		bitmap = nBitmap;
    	}
    }
    bon toujours pas de capture

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Février 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 14
    Par défaut
    j'ai trouvé ça sur un forum
    Postby cooolmagic » Thu Aug 20, 2009 4:40 pm
    try these steps..

    1. Add webview to view hierarchy. Create WebView and add to a hidden ViewGroup (with visibility = INVISIBLE not GONE) in your onCreate().
    2. Set webView.setDrawingCacheEnabled(true). Call loadURL.
    3. Let first drawing pass happen. You can use a Handler and send 1 sec delayed message at end of onResume().
    4. In your handleMessage:
    - viewGroup.setBackgroundDrawable(aWhiteDrawable); // imp if page has not loaded anything yet
    - Bitmap b = webView.getDrawingCache();
    - viewGroup.setBackgroundDrawable(null); // remove background
    Peut être le fait de créer une WebView sans l'affecter à un layout avec un "findViewById..(R.id..." y est pour quelque chose.
    Je sais pas trop comment fonctionne les callback et autres signaux
    c'est encore flou et c'est certainement mon erreur.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Février 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 14
    Par défaut
    Oui j'avais oublié de préciser qu'il fallait donc créer des bitmap (screenshot) de site à partir d'une liste d'URL sans les afficher ce qui complique un peu la chose.
    Bon y a bine un pro d'androide qui va nous trouver une solution parceque la je galère depuis quelques jours.

Discussions similaires

  1. Créer un site web - en quel langage ?
    Par Thierry92 dans le forum Débuter
    Réponses: 96
    Dernier message: 25/04/2024, 22h24
  2. Avec quel éditeur concevez-vous vos site web ?
    Par Marc-xhtml dans le forum Outils
    Réponses: 263
    Dernier message: 06/05/2009, 14h43
  3. Test de site web (screenshot) sur plusieurs navigateurs et environnements
    Par Strix dans le forum Général Conception Web
    Réponses: 2
    Dernier message: 06/12/2006, 14h07
  4. Réponses: 2
    Dernier message: 08/11/2003, 23h42
  5. site web sur le Haskell
    Par ab_sam dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 30/09/2003, 12h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo