Je développe un navigateur Web sur Android et je souhaite afficher le logo URL pour les sites les plus visités, comme dans Chrome (4 X 2). Mais le Le problème est que la plupart des favicons (par exemple: http://www.bbc.co.uk/favicon.ico ) sont de taille 16X16 ou 32X32 et ne semblent pas bonnes lorsqu'elles sont agrandies.
Existe-t-il un moyen de télécharger une icône/bitmap haute résolution pour une URL de manière standard? Que diriez-vous d'ouvrir la page d'accueil, puis d'extraire tous les liens d'image, puis de choisir une image avec le nom du logo dedans? Cette méthode fonctionnerait-elle pour toutes les URL? Je veux savoir s'il existe un moyen standard d'obtenir une icône haute résolution pour une URL donnée ou un favicon est le seul moyen standard d'obtenir le logo du site Web?
Vous pouvez le coder vous-même ou utiliser une solution existante.
Algorithme de bricolage
<link rel="Apple-touch-icon" href="/Apple-touch-icon.png">
. Ces images varient de 57x57 à 152x152. Voir spécifications Apple pour une référence complète./Apple-touch-icon.png
. Encore une fois, voir spécifications Apple pour référence.<link rel="icon" type="image/png" href="/favicon-196x196.png" sizes="196x196">
. Dans cet exemple, vous avez une image 196x196.<meta name="msapplication-TileImage" content="/mstile-144x144.png">
. Ces images varient de 70x70 à 310x310, voire plus. Voir ces références Windows 8 et Windows 8.1 ./browserconfig.xml
, dédié à Windows 8.1/IE11. C'est l'autre endroit où vous pouvez trouver des images de tuiles. Voir spécifications Microsoft .og:image
déclaration telle que <meta property="og:image" content="http://somesite.com/somepic.png"/>
. C'est ainsi qu'un site Web indique à FB/Pinterest/quelle que soit l'image préférée pour le représenter. Voir Open Graph Protocol pour référence.Remarque: Les étapes 1, 2 et 3 sont essentiellement ce que Chrome fait pour obtenir des icônes appropriées pour les liens de signet et d'écran d'accueil. Coast by Opera même utiliser la tuile MS images pour faire le travail. Lisez cette liste pour comprendre quel navigateur utilise quelle image (divulgation complète: je suis l'auteur de cette page).
API et projets open source
RealFaviconGenerator: Vous pouvez obtenir n'importe quel favicon de site Web ou icône associée (comme l'icône tactile) avec ceci API de récupération de favicon . Divulgation complète: je suis l'auteur de ce service.
BestIcon: Bien que moins complet, Besticon offre une bonne alternative, surtout si vous voulez héberger le code vous-même. Il existe également une version hébergée que vous pouvez utiliser immédiatement.
Le code Go à https://github.com/mat/besticon tente de résoudre ce problème.
Par exemple
$ besticon http://github.com
http://github.com: https://github.com/Apple-touch-icon-144.png
Il existe également une version hébergée du code, voir par exemple http://icons.better-idea.org/icons?url=github.com .
(Avertissement: je l'ai écrit parce que j'avais besoin de résoudre le même problème il y a quelque temps.)
Voici une nouvelle solution authentique qui vous donnera toujours les meilleurs résultats-
La prochaine étape consiste à convertir cette URL en bitmap, ce qui peut être fait comme ceci:
try {
URL url = new URL(touchiconUrl);
HttpURLConnection connection =
(HttpURLConnection)url.openConnection();
connection.setDoInput(true);
connection.connect();
InputStream input = connection.getInputStream();
Bitmap myBitmap = BitmapFactory.decodeStream(input);
return myBitmap;
} catch (IOException e) {
e.printStackTrace();
return null;
}
L'étape suivante consiste à envoyer ce bitmap pour le raccourci.
Remarque: N'oubliez pas de créer une image bitmap sur le fil d'arrière-plan comme une tâche asynct.
Les logos ne seront pas systématiquement nommés et très difficiles à identifier de manière cohérente. Pensez à mettre le favicon sur une tuile de couleur de dimensions appropriées. Les gens associeront rapidement la couleur au site Web. Vous pouvez soit extraire une couleur dominante du site Web ou du favicon en utilisant quelque chose comme colorthief, ou rendre chacune unique en utilisant une formule d'angle d'or pour choisir une teinte.