web-dev-qa-db-fra.com

taille de l'image encodée en base64

Si je convertis une image (jpg ou png) en base64, elle sera plus grande ou aura la même taille? Combien sera-t-il plus grand?

Est-il recommandé d'utiliser des images encodées en base64 sur mon site Web?

75
Danny Fox

Il sera environ 37% plus grand:

En gros, la taille finale des données binaires codées en Base64 est égale à 1,37 fois la taille originale des données.

Source: http://en.wikipedia.org/wiki/Base64

113
Blender

Voici n aperçu très utile de quand coder en base64 et quand ne pas le faire par David Calhoun.

Réponse de base = Les fichiers codés en base64 gzippés seront à peu près comparables en taille au format binaire standard (jpg/png). Les fichiers binaires Gzip'd auront une taille de fichier plus petite.

À emporter = Il existe certains avantages à encoder et gzipper les icônes de votre interface utilisateur, etc.

12
bulldog

Ce sera plus gros en base64.

Base64 utilise 6 bits par octet pour coder les données, alors que binaire utilise 8 bits par octet. En outre, il y a un peu de temps de remplissage avec Base64. Tous les bits ne sont pas utilisés avec Base64 car il a été développé à l'origine pour coder des données binaires sur des systèmes ne pouvant traiter correctement que des données non-binaires.

Cela signifie que l'image encodée sera environ 25% plus grande, plus une surcharge constante pour le remplissage.

8
Eric J.

Encoder une image en base64 la rendra environ 30% plus grosse.

Voir les détails dans l'article de wikipedia sur le schéma d'URI de données , où il est indiqué:

Les URI de données codées en Base64 sont 1/3 plus grandes que leur équivalent binaire. (Cependant, cette surcharge est réduite à 2-3% si le serveur HTTP compresse la réponse à l'aide de gzip)

5
Oded

Taille de base64-images

Base64 utilise 64 caractères différents, ce qui correspond à 2 ^ 6. Donc, base64 stocke 6 bits par caractère de 8 bits. La proportion de données non converties en données base64 est donc de 6/8. Ce n'est pas un calcul exact, mais une estimation approximative.

Exemple:

Une image de 48 Ko nécessite environ 64 Ko d’image convertie en base64.

Calcul: (48/6) * 8 = 64

Calculateur CLI simple sur les systèmes Linux:

$ cat /dev/urandom|head -c 48000|base64|wc -c
64843

Ou en utilisant une image:

$ cat my.png|base64|wc -c

images base64 et sites Web

Il est beaucoup plus difficile de répondre à cette question. De manière générale, plus l'image est grande et moins logique en utilisant base64. Mais considérons les points suivants:

  • De nombreuses images incorporées dans un fichier HTML ou CSS peuvent avoir des chaînes similaires. Pour les PNG, vous trouvez souvent des caractères "A" répétés. En utilisant gzip (parfois appelé "deflate"), il pourrait même y avoir une victoire sur la taille. Mais cela dépend du contenu de l'image.
  • Requête en surcharge de HTTP1.1: Surtout avec beaucoup de cookies, vous pouvez facilement avoir une surcharge de quelques kilo-octets par requête. L'incorporation d'images base64 peut économiser la bande passante.
  • Ne codez pas les images SVG en base64, car gzip est plus efficace sur XML que sur base64.
  • Programmation: sur les images générées dynamiquement, il est plus facile de les livrer en une requête, de manière à coordonner deux requêtes dépendantes.
  • Deeplinks: Si vous souhaitez empêcher le téléchargement de l’image, il est un peu plus difficile d’extraire une image d’une page HTML.

Donc, la réponse est: ça dépend.

4
Trendfischer

Cela vous coûtera certainement plus d’espace et de bande passante si vous souhaitez utiliser des images codées en base64. Toutefois, si votre site contient de nombreuses petites images, vous pouvez réduire le temps de chargement de la page en codant vos images au format base64 et en les plaçant en html. De cette façon, le navigateur client n'aura pas besoin de créer beaucoup de connexions aux images, mais les aura en HTML.

2
user1766330