Supposons que vous souhaitiez transférer un fichier image binaire sur un réseau. Vous êtes surpris que le fichier n'ait pas été reçu correctement de l'autre côté. Le fichier ne contenait que des caractères étranges.!
Eh bien, il semble que vous ayez tenté d’envoyer votre fichier au format brut, en octets, alors que le support utilisé était conçu pour la transmission de texte en continu..
Quelle serait la solution de contournement pour éviter un tel problème? La réponse est le codage Base64. Dans cet article, je vais vous montrer comment utiliser Python pour encoder et décoder une image binaire. Le programme est illustré en tant que programme local autonome, mais vous pouvez appliquer le concept à différentes applications, telles que l'envoi de votre image codée depuis votre appareil mobile vers un serveur et de nombreuses autres applications..
Avant d'aller plus loin dans l'article, définissons ce que nous entendons par Base64.
Base64 est un moyen de coder des données binaires de 8 bits dans un format pouvant être représenté sur 7 bits. Ceci est fait en utilisant seulement les caractères A à Z
, a-z
, 0-9
, +
, et /
afin de représenter des données, avec =
utilisé pour compléter les données. Par exemple, en utilisant ce codage, trois octets de 8 bits sont convertis en quatre octets de 7 bits..
Le terme Base64 est issu du standard MIME (Multipurpose Internet Mail Extensions), largement utilisé pour HTTP et XML, et qui a été développé à l'origine pour coder les pièces jointes des courriers électroniques en vue de leur transmission..
Base64 est très important pour la représentation des données binaires, car il permet de représenter les données binaires de manière à ce qu’elles ressemblent à du texte brut, ce qui permet de les stocker de manière plus fiable dans des bases de données, dans des courriers électroniques ou dans des textes. format tel que XML. Base64 est essentiellement utilisé pour représenter des données dans un format de chaîne ASCII.
Comme mentionné dans l'introduction de cet article, sans Base64, les données ne seront parfois pas lisibles..
Le codage Base64 est le processus de conversion de données binaires en un jeu de caractères limité de 64 caractères. Comme indiqué dans la première section, ces caractères sont A à Z
, a-z
, 0-9
, +
, et /
(comptez-les, avez-vous remarqué qu'ils totalisent 64?). Ce jeu de caractères est considéré comme le jeu de caractères le plus commun. Il est appelé Base64 de MIME. Il utilise A à Z
, a-z
, 0-9
, +
, et /
pour les 62 premières valeurs, et +
, et /
pour les deux dernières valeurs.
Les données codées en Base64 finissent par être plus longues que les données d'origine, de sorte que, comme indiqué ci-dessus, pour 3 octets de données binaires, il existe au moins 4 octets de données codées en Base64. Cela est dû au fait que nous comprimons les données dans un jeu de caractères plus petit..
Avez-vous déjà vu une partie d'un fichier de courrier électronique brut tel que celui présenté ci-dessous (qui provient probablement d'un courrier électronique qui n'a pas été livré)? Si c'est le cas, alors vous avez vu l'encodage Base64 en action! (Si vous remarquez “=”, vous pouvez en déduire qu'il s'agit d'un codage Base64, car le signe égal est utilisé dans le processus de codage pour le remplissage.)
"plain Content-Type: text / plain; jeu de caractères = UTF-8 codage de transfert de contenu: base64
2KfZhNiz2YTYp9mFINi52YTZitmD2YUg2YjYsdit2YXYqSDYp9mE2YTZhyDZiNio2LHZg9in2KrZ h9iMDQoNCtij2YjYryDZgdmC2Lcg2KfZhNin2LPYqtmB2LPYp9ixINi52YYg2KfZhNmF2YLYsdix 2KfYqiDYp9mE2K / Ysdin2LPZitipINin2YTYqtmKINiq2YbYtdit2YjZhiDYqNmH2Kcg2YTZhdmG INmK2LHZitivINin2YTYqtmI2LPYuSDZgdmKDQrYt9mE2Kgg2KfZhNi52YTZhSDYp9mE2LTYsdi5 2YrYjCDYudmE2YXYpyDYqNij2YbZiiDYutmK2LEg2YXYqtiu2LXYtSDYqNin2YTYudmE2YUg2KfZ hNi02LHYudmKINmI2KPZgdiq2YLYryDZhNmE2YXZhtmH2Kwg2KfZhNi52YTZhdmKDQrZhNiw2YTZ gy4NCg0K2KzYstin2YPZhSDYp9mE2YTZhyDYrtmK2LHYpyDYudmE2Ykg2YbYtdit2YPZhSDZgdmK INmH2LDYpyDYp9mE2LTYo9mGLg0KDQrYudio2K / Yp9mE2LHYrdmF2YYNCg == -089e0141aa264e929a0514593016 Content-Type: text / html; jeu de caractères = codage de transfert de contenu UTF-8: base64 "
Base64 est réalisé en plusieurs étapes, comme suit:
Le décodage Base64 est l'opposé du codage Base64. En d’autres termes, elle est réalisée en inversant les étapes décrites dans la section précédente..
Ainsi, les étapes du décodage Base64 peuvent être décrites comme suit:
Passons maintenant à la viande de cet article. Dans cette section, je vais vous montrer comment nous pouvons facilement encoder une image en Base64 en utilisant Python..
Je vais utiliser l'image binaire suivante. Allez-y, téléchargez-le et passons à Python! (Je suppose que le nom de l'image est deer.gif
.)
La première chose à faire pour utiliser Base64 en Python est d'importer le module base64:
importer en base64
Pour encoder l'image, nous utilisons simplement la fonction base64.encodestring (s)
. Python mentionne les éléments suivants concernant cette fonction:
Encodez la chaîne s, qui peut contenir des données binaires arbitraires, et renvoyez une chaîne contenant une ou plusieurs lignes de données codées en base64. encodestring () renvoie une chaîne contenant une ou plusieurs lignes de données codées en base64, toujours avec une nouvelle ligne de fin supplémentaire ('\ n').
Ainsi, nous pouvons procéder comme suit pour coder notre image en Base64:
importation simple base64 image = open ('deer.gif', 'rb') # fichier binaire ouvert en mode lecture image_read = image.read () image_64_encode = base64.encodestring (image_read)
Si vous souhaitez voir la sortie du processus de codage, tapez ce qui suit:
print image_64_encode
Pour décoder une image en Python, nous utilisons simplement le base64.decodestring (s)
une fonction. Python mentionne les éléments suivants concernant cette fonction:
Décode la chaîne s, qui doit contenir une ou plusieurs lignes de données codées en base64, et renvoie une chaîne contenant les données binaires obtenues..
Ainsi, afin de décoder l'image encodée dans la section précédente, nous procédons comme suit:
base64.decodestring (image_64_encode)
Mettons le programme que Base64 code et décode une image ensemble. Le script Python qui fait cela devrait ressembler à ceci:
import python base64 image = open ('deer.gif', 'rb') image_read = image.read () image_64_encode = base64.encodestring (image_read) image_64_decode = base64.decodestring (image_64_encode) image_result = ouvert ('deer_decodegif' 'wb') # crée une image inscriptible et écrit le résultat du décodage image_result.write (image_64_decode)
Si vous ouvrez deer_decode.gif
que vous avez sur votre bureau, vous remarquerez que vous avez l'image originale deer.gif
nous avons encodé dans la première étape.
Comme nous l’avons vu dans cet article, Python facilite très bien l’exécution de ce qui semble être une tâche complexe..
Apprenez Python avec notre guide complet de tutoriel sur Python, que vous soyez débutant ou que vous soyez un codeur chevronné cherchant à acquérir de nouvelles compétences..