Jak używać
- Przeciągnij plik .bmp na pole upuszczania, kliknij, aby go wybrać, lub wklej obraz.
- Wybierz PNG w polu „Konwertuj na”, aby uzyskać bezstratny i znacznie mniejszy wynik, albo pozostaw opcję „Zachowaj oryginał”, jeśli system docelowy wymaga formatu BMP.
- Porównaj oryginalny rozmiar z rozmiarem po zakodowaniu, aby zobaczyć oszczędność.
- Skopiuj lub pobierz wynik jako data URI, czysty Base64, znacznik img, regułę CSS lub obraz Markdown.
Czym jest plik BMP?
BMP to stosowany w systemie Windows format map bitowych niezależnych od urządzenia (DIB). Przechowuje piksele wiersz po wierszu, prawie zawsze bez kompresji (dla obrazów 4- i 8-bitowych istnieje prosty tryb kodowania długości serii, RLE). Typ MIME to image/bmp, choć niektóre systemy podają image/x-ms-bmp, a wynik Base64 zaczyna się od Qk, czyli zakodowanych liter BM.
Bez kompresji rozmiar wynika wprost z wymiarów. Obraz 24-bitowy o wymiarach 800 na 600 pikseli zajmuje około 1,4 MB, a jego Base64 to blisko 1,9 MB tekstu.
Konwersja na PNG przed kodowaniem
PNG również jest formatem bezstratnym, więc typowa 24-bitowa mapa bitowa przekonwertowana na PNG zachowuje dokładnie te same piksele, a plik się zmniejsza – często kilkukrotnie, a w przypadku zrzutów ekranu i płaskiej grafiki znacznie bardziej. Dla zdjęć zapisanych jako BMP jeszcze krótszy ciąg da JPEG lub WebP w dobrej jakości. Rozmiar oryginalny i rozmiar po zakodowaniu, wyświetlane dla każdego obrazu, pozwalają łatwo dostrzec różnicę.
Kiedy zachować oryginalny BMP
Niektóre systemy docelowe oczekują prawdziwej mapy bitowej: starsze oprogramowanie dla Windows, drukarki etykiet i paragonów, małe wyświetlacze sterowane przez mikrokontrolery albo dane testowe, które muszą być zgodne z plikiem bajt w bajt. W takich przypadkach nie włączaj konwersji; wynik Base64 jest wtedy dokładną kopią pliku. Wszystkie popularne przeglądarki potrafią wyświetlać obrazy data:image/bmp, ale na stronach internetowych i w wiadomościach e-mail lepszym formatem jest PNG.
Ta sama konwersja w skrypcie, z użyciem Pythona i biblioteki Pillow:
from PIL import Image
import base64, io
buf = io.BytesIO()
Image.open('scan.bmp').save(buf, 'PNG')
uri = 'data:image/png;base64,' + base64.b64encode(buf.getvalue()).decode()
Najczęściej zadawane pytania
Dlaczego ciąg Base64 z pliku BMP jest tak długi?
BMP przechowuje każdy piksel bez kompresji, a Base64 dodaje do tego jeszcze jedną trzecią. Wcześniejsza konwersja na PNG zwykle radykalnie skraca ciąg bez utraty jakichkolwiek szczegółów.
Czy konwersja BMP na PNG obniża jakość?
Nie. PNG to format bezstratny, więc piksele pozostają takie same. Zmienia się tylko sposób ich zapisu.
Czy przeglądarki wyświetlają data URI data:image/bmp?
Tak, Chrome, Edge, Firefox i Safari wyświetlają BMP. Programy pocztowe i wiele platform internetowych obsługują ten format mniej niezawodnie, dlatego tam bezpieczniejszym wyborem jest PNG.
Czy BMP obsługuje przezroczystość?
32-bitowy plik BMP może zawierać kanał alfa, ale programy i przeglądarki traktują go niekonsekwentnie. Jeśli potrzebna jest przezroczystość, przekonwertuj obraz na PNG lub WebP.