Koder obrazów Base64

Koduj obrazy do Base64 data URI dla HTML i CSS

Upuść obraz tutaj lub kliknij, aby przesłać

Obsługuje PNG, JPG, SVG, WebP, GIF, AVIF

Czym jest kodowanie obrazu w Base64?

Kodowanie obrazu w Base64 konwertuje binarne dane obrazu na ciąg ASCII, który można osadzić bezpośrednio w HTML, CSS lub JSON bez odwoływania się do zewnętrznego pliku. Wynikiem jest data URI — samowystarczający ciąg zaczynający się od data:image/png;base64, po którym następują bajty obrazu zakodowane w Base64. Przeglądarki traktują data URI dokładnie tak jak zewnętrzne adresy URL obrazów: dekodują ładunek Base64 i renderują obraz inline.

Technika ta jest zdefiniowana przez RFC 2397 (schemat data URI) oraz RFC 4648 (kodowanie Base64). Gdy obraz jest kodowany w Base64, każde 3 bajty binarnych danych pikseli stają się 4 znakami ASCII, co zwiększa rozmiar ładunku o około 33%. Pomimo tego narzutu, obrazy inline eliminują żądanie HTTP dla każdego zasobu — istotna optymalizacja, gdy obrazy są małe (ikony, loga, piksele śledzące 1x1), a opóźnienie wynikające z osobnego żądania przekroczyłoby koszt dodatkowych bajtów.

Data URI są obsługiwane przez wszystkie nowoczesne przeglądarki, klientów poczty e-mail (z zastrzeżeniami) i każdy kontekst obsługujący standardową składnię URI. Są szeroko stosowane w aplikacjach jednostronicowych, szablonach HTML do wiadomości e-mail, duszach SVG oraz deklaracjach CSS background-image, gdzie zmniejszenie łącznej liczby żądań sieciowych poprawia odczuwany czas ładowania.

Dlaczego warto używać tego kodera obrazów Base64?

To narzędzie konwertuje dowolny obraz na gotowy do użycia data URI bezpośrednio w przeglądarce — bez przesyłania, bez serwera, bez konta.

Natychmiastowa konwersja
Przeciągnij i upuść obraz lub wybierz plik, a pełny data URI pojawia się natychmiast. Żadnego czekania na przetwarzanie po stronie serwera — API FileReader obsługuje wszystko lokalnie.
🔒
Przetwarzanie z poszanowaniem prywatności
Twoje obrazy nigdy nie opuszczają Twojego urządzenia. Kodowanie odbywa się w całości w przeglądarce przy użyciu natywnej metody FileReader.readAsDataURL(). Żadne dane nie są przesyłane na żaden serwer.
🌐
Obsługa wszystkich głównych formatów
Akceptuje PNG, JPEG, SVG, WebP, GIF, ICO, BMP i każdy inny format obrazu obsługiwany przez Twoją przeglądarkę. Typ MIME jest wykrywany automatycznie na podstawie pliku.
📦
Wynik gotowy do skopiowania
Wynikiem jest kompletny ciąg data URI — wklej go bezpośrednio do atrybutu src tagu img w HTML, deklaracji url() w CSS lub ładunku JSON bez żadnego ręcznego formatowania.

Przypadki użycia kodowania obrazu w Base64

Programowanie front-end
Osadzaj małe ikony i zasoby UI bezpośrednio w HTML lub CSS, aby wyeliminować żądania HTTP. Zmniejsza to opóźnienie kaskadowe dla kluczowych obrazów powyżej linii zgięcia, poprawiając wyniki Largest Contentful Paint (LCP).
Szablony HTML do wiadomości e-mail
Wiele klientów poczty e-mail domyślnie blokuje zewnętrzne obrazy. Obrazy Base64 inline są renderowane natychmiast bez potrzeby klikania przez odbiorcę "załaduj obrazy", co poprawia wskaźniki otwarć i spójność wizualną.
Aplikacje jednostronicowe
Dołącz małe zasoby jako data URI do kodu JavaScript lub CSS, aby zmniejszyć łączną liczbę żądań sieciowych. Webpack i Vite obsługują automatyczne inline'owanie Base64 dla zasobów poniżej konfigurowalnego progu rozmiaru.
Ładunki API i JSON
Koduj avatary użytkowników, podpisy lub miniatury jako ciągi Base64, aby dołączyć je bezpośrednio do odpowiedzi JSON API. Pozwala to uniknąć konieczności tworzenia osobnego punktu końcowego do hostowania plików dla małych obrazów.
Dokumentacja i Markdown
Osadzaj diagramy lub zrzuty ekranu jako data URI w plikach Markdown lub dokumentach README. Obrazy podróżują razem z dokumentem i wyświetlają się poprawnie bez zewnętrznego hostingu.
Testowanie i prototypowanie
Używaj Base64 data URI jako obrazów zastępczych w danych testowych, historiach Storybook lub prototypowych plikach HTML. Nie ma potrzeby konfigurowania serwera plików statycznych ani zarządzania zasobami graficznymi we wczesnej fazie rozwoju.

Struktura data URI

Data URI koduje format obrazu i zawartość binarną w jednym ciągu. Zrozumienie jego struktury pomaga przy programowym tworzeniu lub parsowaniu data URI:

KomponentOpis
data:URI scheme identifier
image/pngMIME type of the image
;base64,Encoding declaration
iVBORw0KGgo...Base64-encoded binary data

Porównanie formatów obrazów do kodowania Base64

Wybór formatu obrazu wpływa na rozmiar wyjścia Base64, obsługę przez przeglądarki i charakterystykę renderowania. Użyj formatu najlepiej dopasowanego do rodzaju treści:

FormatTyp MIMEPrzezroczystośćNajlepszy do
PNGimage/pngYesScreenshots, icons, UI elements
JPEGimage/jpegNoPhotos, gradients, large images
SVGimage/svg+xmlYesLogos, icons, scalable graphics
WebPimage/webpYesModern web images, smaller files
GIFimage/gifYes (1-bit)Simple animations, small icons
ICOimage/x-iconYesFavicons

Przykłady kodu

Jak konwertować obrazy na Base64 data URI w popularnych językach i środowiskach:

JavaScript (browser)
// Convert a File object to a Base64 data URI
function fileToDataUri(file) {
  return new Promise((resolve, reject) => {
    const reader = new FileReader()
    reader.onload = () => resolve(reader.result)
    reader.onerror = reject
    reader.readAsDataURL(file)
    // reader.result → "data:image/png;base64,iVBORw0KGgo..."
  })
}

// Convert a canvas element to a data URI
const dataUri = canvas.toDataURL('image/png')
// → "data:image/png;base64,iVBORw0KGgo..."

// Convert with quality parameter (JPEG/WebP only)
const jpegUri = canvas.toDataURL('image/jpeg', 0.8)
// → "data:image/jpeg;base64,/9j/4AAQ..."
Python
import base64

# Read an image file and encode it to a data URI
with open('logo.png', 'rb') as f:
    encoded = base64.b64encode(f.read()).decode('ascii')

data_uri = f'data:image/png;base64,{encoded}'
# → "data:image/png;base64,iVBORw0KGgo..."

# Detect MIME type automatically
import mimetypes
mime, _ = mimetypes.guess_type('photo.jpg')
# mime → "image/jpeg"

with open('photo.jpg', 'rb') as f:
    b64 = base64.b64encode(f.read()).decode('ascii')

data_uri = f'data:{mime};base64,{b64}'
Node.js
import { readFileSync } from 'fs'
import { lookup } from 'mime-types'

// Read file and encode to data URI
const buffer = readFileSync('icon.png')
const base64 = buffer.toString('base64')
const mime = lookup('icon.png') // → "image/png"

const dataUri = `data:${mime};base64,${base64}`
// → "data:image/png;base64,iVBORw0KGgo..."

// From a Buffer received via HTTP/API
function bufferToDataUri(buf, mimeType) {
  return `data:${mimeType};base64,${buf.toString('base64')}`
}
CLI (bash)
# Encode an image to Base64 (macOS)
base64 -i logo.png | tr -d '\n'

# Encode an image to a full data URI (Linux)
echo -n "data:image/png;base64,$(base64 -w 0 logo.png)"

# Encode and copy to clipboard (macOS)
echo -n "data:image/png;base64,$(base64 -i logo.png | tr -d '\n')" | pbcopy

# Detect MIME type and encode (Linux, requires file command)
MIME=$(file -b --mime-type image.webp)
echo -n "data:$MIME;base64,$(base64 -w 0 image.webp)"

Często zadawane pytania

Jaki jest maksymalny rozmiar obrazu do kodowania Base64?
Sama specyfikacja Base64 nie narzuca twardego limitu. Obsługa data URI przez przeglądarki jest zróżnicowana: większość nowoczesnych przeglądarek obsługuje data URI do kilku megabajtów. Jednak kodowanie Base64 zwiększa rozmiar o 33%, więc obraz 1 MB staje się ciągiem o rozmiarze około 1,33 MB. W przypadku obrazów większych niż 10–20 KB efektywniejsze jest serwowanie ich jako oddzielnych plików z właściwym buforowaniem.
Czy kodowanie Base64 obniża jakość obrazu?
Nie. Base64 to kodowanie bezstratne — konwertuje dane binarne na tekst bez zmiany zawartości. Zdekodowane dane są bajt po bajcie identyczne z oryginalnym plikiem. Ewentualna utrata jakości pochodzi z samego formatu obrazu (np. kompresja JPEG), a nie z kodowania Base64.
Dlaczego wynik kodowania Base64 jest większy niż oryginalny obraz?
Base64 reprezentuje 3 bajty danych binarnych przy użyciu 4 znaków ASCII, co skutkuje wzrostem rozmiaru o 33%. Data URI zawiera również prefiks (np. data:image/png;base64,) o długości około 25–30 znaków. W przypadku małych obrazów (poniżej 2–5 KB) ten narzut jest kompensowany przez eliminację żądania HTTP. W przypadku większych obrazów narzut rozmiaru sprawia, że zewnętrzne pliki są wydajniejsze.
Czy mogę używać obrazów Base64 w CSS background-image?
Tak. Użyj data URI jako wartości funkcji url(): background-image: url('data:image/png;base64,...'). Działa to we wszystkich nowoczesnych przeglądarkach. Najskuteczniejsze jest dla małych, często używanych wzorców tła lub ikon, gdzie uniknięcie żądania HTTP jest warte nieznacznie większego pliku CSS.
Czy kodowanie obrazu w Base64 jest bezpieczne dla wrażliwych obrazów?
Base64 to kodowanie, a nie szyfrowanie. Każdy, kto widzi data URI, może zdekodować go z powrotem do oryginalnego obrazu. Nie polegaj na Base64 w celu ochrony poufnych obrazów. To narzędzie przetwarza obrazy w całości w Twojej przeglądarce — żadne dane nie są wysyłane na żaden serwer — ale wynikowy data URI to zwykły tekst, który może odczytać każdy mający dostęp do Twojego kodu HTML lub CSS.
Jak przekonwertować Base64 data URI z powrotem na plik graficzny?
W JavaScript użyj fetch() z data URI i wywołaj blob() na odpowiedzi, a następnie utwórz link do pobrania. W Python podziel ciąg przy przecinku, zdekoduj część Base64 za pomocą base64.b64decode() i zapisz bajty do pliku. Możesz też skorzystać z narzędzia Dekoder obrazów Base64 na tej stronie.
Czy powinienem kodować w Base64 wszystkie obrazy na swojej stronie?
Nie. Inline'owanie Base64 jest korzystne dla małych obrazów (ikony, loga, piksele 1x1), gdzie narzut żądania HTTP przekracza karę rozmiaru wynoszącą 33%. W przypadku większych obrazów używaj oddzielnych plików z odpowiednimi nagłówkami cache — przeglądarka może je buforować niezależnie i ładować równolegle. Powszechny próg to 2–8 KB: obrazy poniżej tej wartości korzystają z inline'owania, natomiast większe powinny być serwowane jako pliki zewnętrzne.