Generator BlurHash
Koduj obrazy w ciągi BlurHash dla szybkiego ładowania. Dostosuj komponenty, zdekoduj skróty i sprawdź błędy koloru. Całkowicie w przeglądarce.
To narzędzie działa w całości w Twojej przeglądarce. Twoje pliki nigdy nie są wysyłane na serwer.
Źródło
Zdekodowany placeholder
Tylko przy dekodowaniu; nie jest zapisywane w hashu.
BlurHash to ciąg znaków, który zapisujesz obok obrazu i rozwijasz w rozmyty placeholder podczas renderowania — dzięki czemu układ może pokazać coś sensownego, zanim dotrze prawdziwy obraz, bez drugiego zapytania sieciowego. Twój klient potrzebuje dekodera, aby go wyświetlić; przycisk URI danych daje zamiast tego gotowy obraz, który nie wymaga dekodera, ale jest większy. Nic nie jest przesyłane.
Jak z tego korzystać
- Przeciągnij obraz, wybierz plik albo wklej go za pomocą Ctrl+V — przykład jest już zakodowany, więc od razu widać kształt wyniku.
- Zostaw szczegółowość na 4 × 3, chyba że masz powód, by ją zmienić.
- Skopiuj hash i zapisz go w tym samym wierszu lub rekordzie co sam obraz.
- Zdekoduj go w swoim kliencie albo użyj przycisków URI danych lub pobierania, jeśli wolisz nie dodawać dekodera.
Co właściwie otrzymujesz
Długość jest ustalona przez liczbę komponentów: cztery znaki nagłówka plus dwa na komponent. Dzięki temu rozmiar jest w pełni przewidywalny, zanim jeszcze cokolwiek zakodujesz:
1 × 1 6 znaków jednolity, uśredniony kolor 3 × 3 22 znaki przybliżone jasne i ciemne obszary 4 × 3 28 znaków zwykły domyślny wybór 9 × 9 166 znaków malejące korzyści
Dwadzieścia osiem bajtów to na tyle mało, że nic nie kosztuje dołączenie ich do odpowiedzi JSON listującej Twoje obrazy — mniej niż większość pojedynczych nagłówków HTTP. Na tym właśnie polega sens tego formatu: placeholder przychodzi razem z metadanymi, w żądaniu, które i tak już wykonywano, więc nie trzeba drugiej podróży w obie strony, zanim strona pokaże cokolwiek. Transformacja działa też w świetle liniowym, a nie na surowych bajtach sRGB: bezpośrednie uśrednianie wartości zakodowanych gammą daje właśnie ten mętny, zbyt ciemny efekt rozmycia, który czasem widać. Efekt jest najłatwiej widoczny przy jednym komponencie, gdzie hash jest niczym więcej niż średnią — testowy gradient o średniej bajtów sRGB rgb(130, 110, 95) dekoduje się przy 1 × 1 do rgb(147, 116, 103), a wynik liniowy jest fizycznie poprawny — odpowiada temu, co zmierzylibyśmy, rozogniskowując aparat skierowany na obraz. Przy większej liczbie komponentów różnica w ogólnej średniej zmniejsza się do około jednego lub dwóch poziomów na 255.
Najczęstsze pytania
Czy mogę użyć hasha bezpośrednio w znaczniku <img>?
Nie, i to najczęściej zaskakuje. BlurHash nie jest formatem obrazu — to 20-30 znaków, które dekoder rozwija do pikseli. Twoja aplikacja potrzebuje dekodera, aby je wyświetlić. Jeśli chcesz czegoś, co działa bez żadnego dekodera, użyj zamiast tego przycisków URI danych lub pobierania jako PNG: oba dają prawdziwy PNG rozmytego placeholdera, większy, ale gotowy do wstawienia w atrybut src lub zapisania jako plik na dysku.
Ile komponentów powinienem użyć?
Cztery w poziomie i trzy w pionie to typowa wartość domyślna, od której zaczyna to narzędzie. Poniżej tego traci się poczucie, gdzie w kadrze coś się znajduje; powyżej hash szybko rośnie przy bardzo małym widocznym zysku, bo wynik i tak będzie rozmyty. Dziewięć na dziewięć to 166 znaków — sześć razy więcej niż 4×3, dla placeholdera, któremu nikt się dokładnie nie przygląda.
Dlaczego hash 1×1 wygląda jaśniej niż mój obraz?
Ponieważ średnia jest obliczana w świetle liniowym, a nie na bajtach sRGB. Zakodowanie testowego gradientu, którego kanały sRGB dają średnią rgb(130, 110, 95), daje hash 1×1, który dekoduje się do rgb(147, 116, 103). To nie błąd — błędem jest bezpośrednie uśrednianie wartości zakodowanych gammą, i dlatego naiwnie uśrednione miniatury często wyglądają na mętne. Średnia liniowa jest tą percepcyjnie poprawną.
Czy suwak kontrastu zmienia hash?
Nie. Wartość „punch” jest stosowana dopiero przy dekodowaniu, więc ciąg znaków pozostaje identyczny bez względu na jej ustawienie. Jest tu dodany, ponieważ większość bibliotek dekodujących udostępnia ten sam parametr, a przydatne jest zobaczenie jego efektu, zanim wybierzesz wartość we własnym kodzie.
Czy BlurHash zachowuje przezroczystość?
Nie. Format nie ma kanału alfa, więc przezroczysty PNG jest kodowany tak, jakby został spłaszczony na tło znajdujące się na płótnie. Dla obrazów z rzeczywistą przezroczystością zwykle lepszym wyborem jest kolor zastępczy niż rozmycie.
Czy mój obraz jest przesyłany na serwer?
Nie. Jest dekodowany, próbkowany w dół i przekształcany bezpośrednio na stronie. Zarówno koder, jak i dekoder to czysta arytmetyka działająca w Twojej przeglądarce, bez wysyłania jakiegokolwiek żądania w żadnym momencie.
Dlaczego pokazywać rozmyty placeholder zamiast wskaźnika ładowania?
Placeholder pasujący do kolorów i ogólnej kompozycji obrazu robi dwie użyteczne rzeczy. Rezerwuje właściwą przestrzeń, dzięki czemu nic się nie przesuwa, gdy obraz się pojawia — to główna przyczyna skarg na przesunięcia układu na stronach bogatych w obrazy. A także od razu daje oku coś wiarygodnego, dzięki czemu ładowanie wydaje się krótsze niż taki sam czas oczekiwania na szare pole, bo jest na co patrzeć, zamiast na co czekać.
Jak wypadamy na tle innych
| Funkcja | Online Tool Store | Kodery z wiersza poleceń | Placeholdery CDN obrazów |
|---|---|---|---|
| Obraz nigdy nie opuszcza Twojego urządzenia | ✓ | ✓ | ✗ |
| Nic do zainstalowania | ✓ | ✗ | ✓ |
| Dekoduje istniejący hash w celu sprawdzenia | ✓ | Osobne polecenie | ✗ |
| Pokazuje błąd koloru przy pełnym cyklu | ✓ | ✗ | ✗ |
| Eksportuje też URI danych bez dekodera | ✓ | Wymaga dodatkowych kroków | ✓ |
| Wczytuje obraz przez przeciąganie, wybór pliku lub wklejenie | ✓ | Tylko ścieżka pliku | Tylko przeciąganie lub wybór |
| Koduje całą bibliotekę za jednym razem | ✗ | ✓ | ✓ |
| Uruchamia się automatycznie po przesłaniu | ✗ | ✓ | ✓ |
Użyj tego, aby zrozumieć format, dostosować liczbę komponentów i wygenerować hashe dla kilku obrazów. Gdy zaczniesz kodować każdy przesyłany plik, powinno to trafić do Twojego pipeline'u — kroku budowania albo obsługi przesyłania — a nie do karty przeglądarki. To narzędzie służy do ustalenia, czego chcesz, zanim napiszesz ten kod.