Masowa optymalizacja obrazów
Obsługa JPG, PNG, WebP, AVIF i GIF. Podglądy, link jednorazowy, export ZIP. Idealne do sklepów i blogów.
- Bez rejestracji
- Szybkie działanie
- Operacje w pamięci
Zero back-endu, 100% lokalnie.
Kompresor Obrazów (Wsadowy)
Wsadowa optymalizacja obrazów online. JPG, PNG, WebP, AVIF i GIF w jednym miejscu
BulkImgOptimizer kompresuje i optymalizuje wiele obrazów naraz. Działa z plikami lokalnymi oraz zdalnymi URL. Oferuje trzy poziomy jakości, tworzy szybkie podglądy, raportuje oszczędności i generuje bezpieczne linki do pobrania. Pod spodem korzysta z łańcucha Spatie Image Optimizer oraz wybranych binarek systemowych.
Co potrafi narzędzie i kiedy je wybrać
Jeśli prowadzisz sklep, publikujesz wpisy z wieloma zdjęciami albo przygotowujesz kampanię, wsadowa optymalizacja eliminuje ręczne klikanie. Wgrywasz paczkę obrazów lub podajesz link do pliku zdalnego, wybierasz poziom jakości i uruchamiasz kompresję. Moduł czyści metadane, redukuje rozmiar i zachowuje ważne atrybuty, a na końcu zwraca zoptymalizowane zasoby gotowe do użycia w produkcji.
- Obsługa typów: JPG, JPEG, PNG, GIF, WebP i AVIF.
- Tryb wejścia: lokalne pliki lub pojedynczy zdalny URL.
- Trzy poziomy pracy: bezstratny, zbalansowany, agresywny.
- Podglądy i lista wgranych z rozmiarami przed obróbką.
- Raport z wynikami: rozmiar przed, po oraz procent oszczędności.
- Szybki podgląd wyników z publicznego storage oraz link jednorazowy do pobrania.
- Eksport ZIP wszystkich przetworzonych plików jednym kliknięciem.
Jak działa komponent od środka
Komponent Livewire utrzymuje stan wejścia i listę wyników. onConvertType przełącza typ źródła. updatedLocalFile generuje podglądy po wgraniu i publikuje je w magazynie publicznym. onSetRemoteURL pobiera plik spod adresu HTTP w czasie kontrolowanym przez timeout, zapisuje go tymczasowo i wystawia podgląd. Główne przetwarzanie uruchamia onBulkImageOptimizer, która waliduje wejście, iteruje po plikach i deleguje jednostkową optymalizację do processFile. Po zakończeniu zapisywana jest pozycja w historii użyć jeśli włączono logowanie.
Poziomy jakości i łańcuch optymalizatorów
Lossless - Bezstratna
Domyślny łańcuch bez dodatkowych przełączników jakości. Usuwa zbędne metadane i stosuje bezpieczne optymalizacje. Idealne na start oraz do materiałów wrażliwych.
Balanced - Zbalansowana
Dodaje jpegoptim z limitem jakości -m85, pngquant z zakresem 65-85, cwebp z q=82 oraz gifsicle na poziomie O2. Daje znaczną redukcję bez widocznych strat w typowych zastosowaniach web.
Aggressive - Agresywna
Dokręca parametry: jpegoptim do -m75, pngquant z jakością 60-80 i prędkością 1, cwebp q=80, gifsicle O3. Największe zyski kosztem większego ryzyka artefaktów, zalecane do banerów, miniaturek i assetów, które nie wymagają maksymalnej wierności.
Ścieżki wejścia i podglądy
- Pliki lokalne - wgrywasz wiele obrazów naraz. Komponent generuje wiersze na liście i udostępnia miniatury.
- Zdalny URL - podajesz adres. System pobiera zasób metodą GET z limitem czasu 20 s, zapisuje do katalogu tymczasowego i pokazuje miniaturę.
- Podglądy trafiają do dysku publicznego w folderze tymczasowym i są bezpieczne do użycia w interfejsie.
Proces przetwarzania i wynik
// Skrót logiki
validateInputs()
files = local_file[] lub request()->file('file') lub [pobrany z remote_url]
for each file:
result[] = processFile(filePath, originalName)
// processFile
- kontrola rozszerzenia: jpg jpeg png gif webp avif
- zapis kopii do katalogu roboczego
- dobór chaina: lossless - balanced - aggressive
- chain->optimize(optimizedPath)
- obliczenie oszczędności
- zapis do public/optimized z unikalną nazwą
- budowa linku jednorazowego: HMAC + base64 ścieżki
- zwrot statystyk i adresów
Parametry wejściowe i wyjściowe
| Pole | Opis | Zakres lub format |
|---|---|---|
| convertType | Źródło danych | localFile lub remoteURL |
| local_file | Jeden lub wiele plików wgrywanych z urządzenia | .jpg .jpeg .png .gif .webp .avif |
| remote_url | Adres do pojedynczego pliku pobieranego HTTP | pełny URL, timeout 20 s |
| level | Profil kompresji | lossless, balanced, aggressive |
| previews[] | Lista podglądów z nazwą, rozmiarem i URL | generowane automatycznie |
| data[] | Wyniki optymalizacji z rozmiarami i linkami | status, old_size, new_size, saved, download_url, download_once |
Walidacja, bezpieczeństwo i logi
- Walidacja reCAPTCHA jest respektowana jeśli włączona w ustawieniach ogólnych.
- Historia użycia może być zapisana z adresem IP, user agentem i krajem z GeoLite2. Funkcja jest opcjonalna i zależy od flagi w konfiguracji.
- Pliki tymczasowe trafiają do storage Livewire. Wyniki są zapisywane w publicznym storage w folderze
optimized. - Link jednorazowy jest podpisany HMAC i wykorzystuje zakodowaną ścieżkę. Pobranie usuwa plik po stronie serwera.
- ZIP budowany jest dynamicznie z pozycji, które fizycznie istnieją na dysku.
Najczęstsze pytania
Czy narzędzie zmienia wymiary obrazu
Nie. Komponent nie skaluje wymiarów. Redukuje wagę przez czyszczenie metadanych i optymalizację kodeków.
Czy mogę przetwarzać bardzo duże pliki
Tak, w granicach zasobów serwera i limitów PHP. Zadbaj o pamięć i czas wykonywania. Pobieranie zdalne ma limit czasu 20 s.
Jakie zyski są typowe
JPEG 20 do 60 procent, PNG 20 do 50 procent, WebP 5 do 25 procent, GIF 20 do 45 procent, AVIF zwykle mniejsze zyski bo format jest już zoptymalizowany. Profil agresywny daje więcej, ale wymaga testu wizualnego.
Czy wyniki są publiczne
Bezpośredni URL jest publiczny. Używaj linku jednorazowego jeśli chcesz wymusić jednorazowe pobranie i usunięcie zasobu po stronie serwera.
Czy mogę przetworzyć obrazy z wielu adresów URL
Aktualny interfejs przewiduje pojedynczy zdalny plik na sesję. Dla wielu adresów uruchom przetwarzanie wielokrotnie lub skorzystaj z plików lokalnych.
Dobre praktyki optymalizacji
- Startuj od profilu zbalansowanego. Jeśli wynik jest za ciężki, przełącz na agresywny i porównaj.
- Assety krytyczne jakościowo trzymaj w profilu bezstratnym i rozważ ręczne dostrojenie w pipeline CI.
- Przed optymalizacją usuń zbędne warianty rozdzielczości. Mniej plików to szybsze przetwarzanie.
- Dostarczaj obrazy responsywne przez
srcsetisizes. Optymalizacja wagowa współgra z doborem rozdzielczości. - Po wdrożeniu monitoruj LCP i transfer. Różnice w CDN i przeglądarkach potrafią zmienić efekt końcowy.
Rozwiązywanie problemów
- Komunikat o nieobsługiwanym pliku - sprawdź rozszerzenie. Dozwolone: jpg, jpeg, png, gif, webp, avif.
- Brak efektu na AVIF lub WebP - formaty są już wydajne. Zysk będzie mniejszy niż w JPEG czy PNG.
- Błąd pobierania z URL - zweryfikuj kod odpowiedzi HTTP oraz nagłówki CORS i typ Content-Type.
- Niski zysk na PNG - spróbuj profilu agresywnego, ewentualnie ponownego eksportu z mniejszą głębią barw.
- Chcesz ściąć rozmiary bardziej - rozważ konwersję do WebP lub AVIF poza tym modułem, a potem finalny przelot optymalizatorem.
Upewnij się, że masz prawo do przetwarzania plików. Włącz politykę retencji i czyszczenia katalogów tymczasowych po zakończonych zadaniach.