Spuneți că aveți un fișier imagine binar pe care doriți să îl transferați într-o rețea. Ești uimit că fișierul nu a fost primit corect de cealaltă parte - fișierul conținea numai caractere ciudate!
Părea că ați încercat să trimiteți fișierul în format de biți bruți și octeți, în timp ce mass-media utilizată a fost proiectată pentru streaming text.
Care ar fi soluția pentru a evita o astfel de problemă? Răspunsul este codarea Base64. În acest articol, vă voi arăta cum putem folosi Python pentru a codifica și decoda o imagine binară. Programul este ilustrat ca un program local independent, însă puteți aplica acest concept pentru diferite aplicații, cum ar fi trimiterea imaginii codate de pe dispozitivul dvs. mobil la un server și multe alte aplicații.
Înainte de a vă deplasa mai adânc în articol, să definim ce înțelegem prin Base64.
Base64 este un mod în care datele binare pe 8 biți sunt codificate într-un format care poate fi reprezentat în 7 biți. Acest lucru se face folosind doar caracterele A-Z
, a-z
, 0-9
, +
, și /
pentru a reprezenta datele, cu =
folosit pentru a introduce datele. De exemplu, folosind această codare, trei octeți de 8 biți sunt convertiți în patru octeți de 7 biți.
Termenul Base64 este preluat din standardul MIME (Multipurpose Internet Mail Extensions), folosit pe scară largă pentru HTTP și XML și a fost inițial dezvoltat pentru codarea atașamentelor de e-mail pentru transmisie.
Base64 este foarte important pentru reprezentarea datelor binare, astfel încât permite ca datele binare să fie reprezentate într-un mod care arată și acționează ca text simplu, ceea ce îl face mai fiabilă pentru a fi stocată în baze de date, trimisă în e-mailuri sau utilizată în text format, cum ar fi XML. Base64 este utilizat în principal pentru a reprezenta datele într-un format de șir ASCII.
După cum sa menționat în introducerea acestui articol, fără Base64, uneori datele nu vor fi citite deloc.
Codarea Base64 este procesul de conversie a datelor binare într-un set de caractere limitat de 64 de caractere. După cum se arată în prima secțiune, acele personaje sunt A-Z
, a-z
, 0-9
, +
, și /
(numără-le, ai observat că se adaugă până la 64?). Acest set de caractere este considerat cel mai obișnuit set de caractere și este denumit Base64 al MIME. Folosește A-Z
, a-z
, 0-9
, +
, și /
pentru primele 62 de valori și +
, și /
pentru ultimele două valori.
Datele codate Base64 ajung să fie mai lungi decât datele originale, astfel încât, așa cum sa menționat mai sus, pentru fiecare 3 octeți de date binare, există cel puțin 4 octeți de date codate Base64. Acest lucru se datorează faptului că stoarcem datele într-un set mai mic de caractere.
Ați văzut vreodată o parte dintr-un fișier de e-mail brut ca cel prezentat mai jos (cel mai probabil provine dintr-un e-mail care nu este livrat)? Dacă da, atunci ați văzut codificarea Base64 în acțiune! (Dacă observați "=", puteți concluziona că aceasta este o codare Base64, deoarece semnul egal este folosit în procesul de codificare pentru umplere.)
"conținut simplu: text / simplu; charset = UTF-8 Content-Transfer-Encoding: base64
2KfZhNiz2YTYp9mFINi52YTZitmD2YUg2YjYsdit2YXYqSDYp9mE2YTZhyDZiNio2LHZg9in2KrZ h9iMDQoNCtij2YjYryDZgdmC2Lcg2KfZhNin2LPYqtmB2LPYp9ixINi52YYg2KfZhNmF2YLYsdix 2KfYqiDYp9mE2K / Ysdin2LPZitipINin2YTYqtmKINiq2YbYtdit2YjZhiDYqNmH2Kcg2YTZhdmG INmK2LHZitivINin2YTYqtmI2LPYuSDZgdmKDQrYt9mE2Kgg2KfZhNi52YTZhSDYp9mE2LTYsdi5 2YrYjCDYudmE2YXYpyDYqNij2YbZiiDYutmK2LEg2YXYqtiu2LXYtSDYqNin2YTYudmE2YUg2KfZ hNi02LHYudmKINmI2KPZgdiq2YLYryDZhNmE2YXZhtmH2Kwg2KfZhNi52YTZhdmKDQrZhNiw2YTZ gy4NCg0K2KzYstin2YPZhSDYp9mE2YTZhyDYrtmK2LHYpyDYudmE2Ykg2YbYtdit2YPZhSDZgdmK INmH2LDYpyDYp9mE2LTYo9mGLg0KDQrYudio2K / Yp9mE2LHYrdmF2YYNCg == -089e0141aa264e929a0514593016 Content-Type: text / html; charset = UTF-8 Content-Transfer-Encoding: base64 "
Base64 se efectuează în mai multe etape, după cum urmează:
Base64 decodarea este opusul codării Base64. Cu alte cuvinte, aceasta se realizează prin inversarea etapelor descrise în secțiunea anterioară.
Deci, etapele de decodificare Base64 pot fi descrise după cum urmează:
Să ajungem acum la carnea acestui articol. În această secțiune, vă voi arăta cum putem baza cu ușurință Base64 să codificați o imagine utilizând Python.
Voi folosi următoarea imagine binară. Mergeți mai departe, descărcați-l și lăsați-l pe Python să se rostogolească! (Presupun că numele imaginii este deer.gif
.)
Primul lucru pe care trebuie să-l facem pentru a folosi Base64 în Python este de a importa modulul base64:
baza de import64
Pentru a codifica imaginea, pur și simplu folosim funcția base64.encodestring (s)
. Python menționează următoarele în ceea ce privește această funcție:
Codificați șirul s, care poate conține date binare arbitrare și returnați un șir care conține una sau mai multe linii de date codate de base64. encodestring () returnează un șir care conține una sau mai multe rânduri de date bazate pe base64, care includ întotdeauna o linie nouă extra trailing ('\ n').
Astfel, putem face următoarele pentru ca Base64 să ne codifice imaginea:
simplu import base64 image = open ('deer.gif', 'rb') #open fișier binar în modul citire image_read = image.read () image_64_encode = base64.encodestring (image_read)
Dacă doriți să vedeți ieșirea procesului de codificare, tastați următoarele:
imprimați image_64_encode
Pentru a decoda o imagine folosind Python, pur și simplu folosim base64.decodestring (s)
funcţie. Python menționează următoarele în ceea ce privește această funcție:
Decodați șirul s, care trebuie să conțină una sau mai multe rânduri de date codate base64 și returnați un șir care conține datele binare rezultate.
Deci, pentru a decoda imaginea pe care am codificat-o în secțiunea anterioară, facem următoarele:
base64.decodestring (image_64_encode)
Să punem programul pe care Base64 codifică și decodează o imagine împreună. Scriptul Python care face acest lucru ar trebui să arate cam așa:
Python import base64 imagine = 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 = 'wb') # crea o imagine scriitoare și scrie rezultatul decodării image_result.write (image_64_decode)
Dacă vă deschideți deer_decode.gif
pe care îl aveți pe desktop, veți observa că aveți imaginea originală deer.gif
am codificat în primul pas.
După cum am văzut din acest articol, Python face foarte ușor să efectueze ceea ce pare a fi o sarcină complexă.
Aflați Python cu ghidul nostru complet de instrucțiuni Python, indiferent dacă sunteți doar începători sau sunteți un coder experimentat în căutarea unor noi abilități.