Jak używać
- Przeciągnij plik .jpg lub .jpeg na pole upuszczania, kliknij, aby go wybrać, lub wklej obraz.
- Aby zachować plik dokładnie w obecnej postaci, pozostaw opcję „Zachowaj oryginał”. Aby go zmniejszyć, wybierz JPEG lub WebP i obniż „Jakość”.
- Ustaw „Maks. szerokość”, jeśli zdjęcie jest większe, niż będzie wyświetlane.
- 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?
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.