Konwerter JPG na Base64

Kodowanie obrazów JPG i JPEG do Base64. Zachowaj oryginalny plik bajt w bajt albo zakoduj go ponownie z niższą jakością i mniejszą szerokością, aby ciąg był krótki.

Działa w całości w przeglądarce. Nic nie jest wysyłane.

Jak używać

  1. Przeciągnij plik .jpg lub .jpeg na pole upuszczania, kliknij, aby go wybrać, lub wklej obraz.
  2. Aby zachować plik dokładnie w obecnej postaci, pozostaw opcję „Zachowaj oryginał”. Aby go zmniejszyć, wybierz JPEG lub WebP i obniż „Jakość”.
  3. Ustaw „Maks. szerokość”, jeśli zdjęcie jest większe, niż będzie wyświetlane.
  4. Skopiuj potrzebny wynik, np. znacznik img do strony lub czysty Base64 dla API, albo pobierz go jako plik.

JPEG w skrócie

JPEG to standardowy format zdjęć. Stosuje kompresję stratną, która odrzuca szczegóły ledwo dostrzegalne dla oka, i nie obsługuje przezroczystości. Pliki mają rozszerzenie .jpg, .jpeg lub czasem .jfif, ale typ MIME to zawsze image/jpeg; image/jpg nie jest zarejestrowanym typem, choć wiele przeglądarek go toleruje. Data URI z obrazem JPEG zaczyna się od data:image/jpeg;base64,/9j/, czyli zakodowanego znacznika początku obrazu (SOI).

Zmniejszanie zdjęcia przed kodowaniem

Przy zdjęciach Base64 daje się najbardziej we znaki: plik JPEG o rozmiarze 200 KB zamienia się w około 270 KB tekstu. Największą różnicę robią dwa ustawienia:

  • Maks. szerokość – zmniejszenie szerokości o połowę ogranicza liczbę pikseli do jednej czwartej. Zdjęcie z telefonu o szerokości 4000 pikseli rzadko jest potrzebne w takim rozmiarze.
  • Jakość – przy wartościach około 70–80% obraz na ekranie zwykle wygląda tak samo jak oryginał, a plik jest znacznie mniejszy. Bardzo niskie wartości powodują widoczne artefakty w postaci bloków.

Konwersja na WebP przy podobnej jakości często daje jeszcze mniejszy plik. Obserwuj rozmiar po zakodowaniu wyświetlany dla każdego ustawienia i zachowaj najmniejszy wynik, który nadal dobrze wygląda.

Metadane EXIF

Zdjęcia z aparatów i telefonów zawierają metadane EXIF: model aparatu, datę i godzinę, a czasem współrzędne GPS. Bez konwersji wynik Base64 zawiera oryginalne bajty razem z metadanymi i każdy, kto go zdekoduje, może je odczytać. Właśnie o to chodzi, gdy liczy się dokładnie ten sam plik, np. gdy API sprawdza skrót lub odczytuje datę wykonania zdjęcia.

Konwersja ponownie koduje piksele w przeglądarce, a dane EXIF nie są przenoszone. Wynik jest mniejszy i nie zdradza już, gdzie zrobiono zdjęcie.

Kiedy data URI z JPEG ma sens

Dobrze sprawdza się w przypadku drobnych rozmytych obrazów zastępczych (obrazu o szerokości od 20 do 40 pikseli osadzonego w stronie na czas leniwego wczytywania pełnego zdjęcia), miniatur w odpowiedziach JSON i jednoplikowych eksportów HTML. Duże obrazy w nagłówkach stron i galerie powinny być osobnymi plikami, które przeglądarka może buforować.

# Python
import base64
with open('photo.jpg', 'rb') as f:
    uri = 'data:image/jpeg;base64,' + base64.b64encode(f.read()).decode('ascii')

Najczęściej zadawane pytania

Czy JPG to to samo co JPEG?

Tak. Krótsze rozszerzenie .jpg pochodzi z systemów, które dopuszczały rozszerzenia o długości najwyżej trzech znaków. Oba oznaczają ten sam format z typem MIME image/jpeg.

Czy kodowanie Base64 obniża jakość JPEG?

Nie. Base64 to bezstratna reprezentacja bajtów pliku. Jakość zmienia się tylko wtedy, gdy zostanie wybrana konwersja, która koduje obraz ponownie z ustawioną jakością.

Czy data URI z JPEG może mieć przezroczyste tło?
Nie, JPEG nie ma kanału alfa. Jeśli potrzebna jest przezroczystość, użyj PNG lub WebP.
Czy ciąg Base64 zawiera lokalizację zdjęcia?

Może. Jeśli oryginalny plik JPEG ma dane GPS w metadanych EXIF i zostanie zakodowany bez zmian, lokalizacja znajdzie się w ciągu. Konwersja obrazu usuwa metadane EXIF.