Większość formularzy wysyłania zgłasza każdą porażkę tym samym zdaniem. Ten jeden komunikat kryje co najmniej cztery różne kontrole, a lekarstwo na każdą z nich jest inne.
Kontrola pierwsza: limit bajtów
Najczęstszy limit i jedyny, o którym ludzie zwykle myślą. Mierzy się go w bajtach, a nie w megapikselach, więc niewielki z wyglądu obraz prosto ze współczesnego telefonu bez trudu go przekracza.
Rozwiązaniem jest kompresja do liczby poniżej podanego limitu — a nie dokładnie do niego. Niektóre systemy mierzą zakodowane żądanie, a nie plik, a wysyłka zakodowana po drodze w base64 jest o mniej więcej jedną trzecią większa niż plik na dysku. Celowanie kilka procent pod limit nie kosztuje cię prawie nic i usuwa całe zagadnienie.
Kontrola druga: limit wymiarów
Niezależny od rozmiaru pliku i często nieudokumentowany. Formularz może wymagać zdjęcia nie szerszego niż 1200 pikseli, niezależnie od tego, jak mały jest plik. Mocniejsza kompresja nigdy go nie zadowoli — trzeba zmienić rozmiar. Jeśli formularz podaje rozmiar wyświetlania, zwykle egzekwuje też maksimum gdzieś w jego okolicy.
Kontrola trzecia: typ MIME
Staranne serwery nie ufają rozszerzeniu pliku; czytają kilka pierwszych bajtów i rozpoznają format po
jego sygnaturze. Zmień nazwę PNG na .jpg, a rygorystyczny serwer nadal widzi PNG, bo tak mówią
bajty.
Dlatego konwersja ma znaczenie, a zmiana nazwy nie. Dlatego też plik wyeksportowany z narzędzia graficznego jako „JPEG” potrafi zostać odrzucony: niektóre eksportery zapisują wariant, którego biblioteka serwera nie przyjmuje.
Kontrola czwarta: przestrzeń barw i wariant kodowania
Rzadsza, ale prawdziwa. JPEG-i w CMYK, 16-bitowe PNG i progresywne JPEG-i to poprawne pliki, które część starszych bibliotek serwerowych odrzuca z miejsca.
Ponowne zakodowanie naprawia te przypadki, do których sięga. ToolZool dekoduje do zwykłych 8-bitowych pikseli i domyślnie zapisuje JPEG bazowy, więc 16-bitowy PNG wraca jako 8-bitowy, a progresywny JPEG jako bazowy — czyli w wariantach, które grymaśny serwer najprawdopodobniej przyjmie. Kłopotliwy jest JPEG w CMYK: to plik z toku przygotowania do druku, a nie z toku internetowego, i pewnym rozwiązaniem jest wyeksportowanie go ponownie jako RGB z tego programu, który go stworzył.
Jak je od siebie odróżnić
Spróbuj celowo maleńkiego obrazu testowego: kilka kilobajtów, kilkaset pikseli, zwykły bazowy JPEG. Jeśli się wyśle, problem jest w twoim pliku i już wiesz, którą oś zmienić — zacznij od kompresji, a jeśli limit jest ciasny, tekst jak zmieścić się w limicie 50 KB omawia kolejność, w jakiej warto zmieniać rzeczy. Jeśli obraz testowy również przejdzie bez skutku, problemem jest formularz, sesja albo przeglądarka i żadne ponowne kodowanie nie pomoże.

