Optymalizacja i konwersja obrazów wsadowych za pomocą ImageMagick

  • ImageMagick, mogrify i convert umożliwiają zmianę rozmiaru, konwersję i optymalizację dużych zbiorów obrazów z poziomu terminala, zapewniając przy tym dużą elastyczność.
  • Dodatkowe narzędzia, takie jak cwebp, jpegtran i img2webp, poprawiają kompresję i obsługę nowoczesnych formatów, np. WebP, przeznaczonych do użytku w Internecie.
  • Przetwarzanie wsadowe można zautomatyzować za pomocą skryptów powłoki lub zintegrować z językami takimi jak PHP, Python lub Node.js.
  • Rozwiązania graficzne, takie jak Converseen, ułatwiają korzystanie z ImageMagick do zbiorczych konwersji i zmiany nazw bez konieczności obsługi poleceń.

Optymalizuj obrazy partiami za pomocą ImageMagick

Jeśli pracujesz z obrazami codziennie, prędzej czy później będziesz musiał zmierzyć się z tą okropną chwilą: zmień rozmiar, sformatuj lub zoptymalizuj setki lub tysiące plików jednocześnieRęczne robienie tego w edytorze graficznym to szaleństwo, nie wspominając o ogromnej stracie czasu. Dobra wiadomość jest taka, że ​​dzięki ImageMagick i kilku powiązanym narzędziom można zautomatyzować niemal cały proces z poziomu terminala.

W tym artykule pokażemy, jak wykorzystać tę możliwość ImageMagick do optymalizacji i konwersji obrazów wsadowychłącząc go w razie potrzeby z innymi narzędziami, takimi jak mogrify, cwebp o jpegtranPraktyczne przykłady znajdziesz w systemie Linux (bash), ale wiele poleceń doskonale nadaje się również do zastosowania w systemach Windows i macOS.

Dlaczego musimy optymalizować i konwertować obrazy wsadowo?

Modyfikowanie pojedynczego zdjęcia jest bardzo proste: Każda przeglądarka lub edytor grafiki pozwala na zmianę rozmiaru i formatu. dwoma kliknięciami. Problem zaczyna się, gdy nie chodzi już o jedno czy dwa zdjęcia, ale o dziesiątki tysięcy rozproszonych po folderach lub ogromnych bibliotekach.

Wyobraź sobie przypadek jak na stronie poświęconej modelowaniu ponad 300 000 obrazów JPEG i PNGWiele z tych obrazów ma rozmiar od 1 do 15 MB. Jeśli duża część odbiorców korzysta ze słabych łączy (na przykład użytkownicy w Niemczech z wolnym ADSL), załadowanie tych obrazów na stronie internetowej staje się koszmarem zarówno dla użytkownika, jak i serwera.

Bardzo często jest też potrzeba zmniejsz rozmiar zdjęć na raz Wysyłać e-mailem, udostępniać przez Dropbox/Google Drive lub przygotowywać materiały do ​​prezentacji. Ręczne wykonywanie tych czynności jest żmudne i nieefektywne; rozsądniej jest zautomatyzować zadanie za pomocą skryptów i narzędzi konsolowych.

Złośliwy plik PDF
Podobne artykuł:
Jak wykryć złośliwy plik PDF w systemie Windows

Opcje ogólne dla projektów z wieloma obrazami

Zanim zagłębimy się w ImageMagick, istotne jest zrozumienie, że istnieje kilka strategii radzenia sobie z tym problemem. ogromne biblioteki multimedialne, jak te na bardzo dużej stronie internetowej:

  • Wtyczki lub narzędzia do konwersji zbiorczej w systemie CMS (na przykład wtyczki WordPress konwertujące do formatu WebP). Mogą one działać dobrze w bibliotekach średniej wielkości, ale przy setkach tysięcy obrazów często zawodzą, przeciążają serwer lub powodują jego przeciążenie.
  • Optymalizacja na warstwie CDN (Na przykład płatny plan Cloudflare z optymalizacją/wersją polską). W tym przypadku CDN obsługuje wersje zoptymalizowane (lub WebP) bez konieczności ponownej konwersji wszystkich oryginalnych plików. To wygodna i skalowalna opcja, chociaż jesteś zależny od dostawcy i nie zmniejszasz przestrzeni dyskowej na serwerze źródłowym.
  • Przetwarzanie wsadowe na poziomie systemu Używając ImageMagick, cwebp i innych narzędzi CLI. Wymaga nieco więcej pracy początkowej (skrypty, testowanie, kopie zapasowe), ale daje pełną kontrolę nad formatami, jakością, ścieżkami i przepływami pracy. To idealne rozwiązanie, gdy chcesz uporządkować starą bibliotekę lub przygotować zasoby w bardzo specyficzny sposób.

W przypadku wielu dużych projektów najlepszym podejściem jest połączenie obu tych elementów: Optymalizuj i konwertuj wsadowo dane historyczne za pomocą ImageMagick i w tym samym czasie, polegając na CDN aby dopracować i podać najlżejszą możliwą wersję według przeglądarki.

Podstawowa instalacja ImageMagick i powiązanych narzędzi

Pierwszą rzeczą, oczywiście, jest jego instalacja ImageMagick i dodatkowe narzędzia cokolwiek chcesz użyć. W większości dystrybucji Linuksa możesz po prostu użyć menedżera pakietów:

  • Debian/Ubuntu (i pochodne):
    sudo apt-get install imagemagick
    lub
    sudo aptitude install imagemagick
  • openSUSE, Fedora, itp.: instaluje pakiet imagemagick z oficjalnych repozytoriów lub poprzez graficzne narzędzia dystrybucji.

W systemach Windows i macOS instalator można pobrać bezpośrednio ze strony Oficjalna strona internetowa ImageMagickktóry zapewnia gotowe do użycia pliki binarne. Podczas instalacji należy wybrać opcję dodania plików binarnych do Ścieżka systemowa móc korzystać magick, convert o mogrify bezpośrednio z terminala.

Jeśli oficjalne pakiety sprawiają Ci problemy (np. błędy podczas konwersji z XCF W dystrybucji Debian/Ubuntu istnieją skrypty takie jak „ImageMagick Easy Install (IMEI)”, które automatycznie pobierają, kompilują i instalują nowszą wersję ze źródeł.

Niektóre kompleksowe lokalne środowiska programistyczne, takie jak ServBay, już zawierają Zainstalowano ImageMagick, cwebp, jpegtran, djpeg, cjpeg i img2webp i dodane do PATH, co pozwala na korzystanie z tych narzędzi bez dodatkowej konfiguracji z poziomu zintegrowanego terminala.

Kluczowe polecenia ImageMagick do podstawowego użytkowania

ImageMagick to nie pojedynczy program, ale zbiór narzędzi wiersza poleceń Skupiamy się na manipulacji obrazem. Do najczęstszych działań podczas optymalizacji i konwersji należą:

  • magia / konwertyta: do transformacji obrazów (zmiany rozmiaru, formatu, stosowania filtrów, kompozycji itp.). W nowszych wersjach polecenie „main” to magick; convert Zazwyczaj istnieje jako symboliczne łącze zapewniające kompatybilność.
  • mogryfikować:podobny do convertale zaprojektowane specjalnie dla przetwarzanie wsadowe i nadpisywanie oryginalnych plików chyba że powiesz mu inaczej.
  • zidentyfikować: wyświetla informacje o obrazie (format, wymiary, głębię kolorów itp.).

Aby dostać szybkie fakty Z konkretnego obrazu, na przykład logo w formacie XCF, możesz użyć:

magick identify logo.xcf

Jeśli chcesz uzyskać znacznie bardziej szczegółowy raport, dodaj -gadatliwy Będziesz miał wszystkie ważne metadane w podziale. To przydatne, aby mieć pewność, że Proces konwersji zachowuje lub zmienia to, czego chcesz.

Zmień format i rozmiar poszczególnych obrazów

Konwersja obrazów wsadowych za pomocą ImageMagick

Najbardziej podstawowym zadaniem jest konwersja z formatu un do otroNa przykład z JPEG do PNG:

magick convert fotoorigen.jpg fotoresultado.png

ImageMagick decyduje o formacie wyjściowym na podstawie ostateczne rozszerzenie plikuwięc jeśli się zmienisz .jpg przez .png, .webp lub cokolwiek chcesz, zostanie wygenerowane bezpośrednio w tym formacie.

magick convert fotoorigen.jpg -resize 800x600 -quality 90 fotoresultado.jpg

W tym przykładzie obraz jest dostosowany do 800 x 600 pikseli i jest ustalone Jakość JPEG na poziomie 90%To szybki sposób na redukcję wagi bez zauważalnej utraty wagi w zdecydowanej większości przypadków.

Możesz także użyć tylko szerokość lub tylko wysokość (na przykład -resize 1200x o -resize x800) tak, aby ImageMagick automatycznie dostosował drugi wymiar, zachowując proporcje. Jeśli używasz znaku ! (na przykład -resize 800x600!) wymusza dokładnie takie wymiary, chociaż obraz będzie zniekształcony, jeśli proporcje obrazu nie będą pasować.

W przypadku pracy z Pliki GIMP XCF z wieloma warstwamiJeśli konwertujesz bezpośrednio do PNG lub JPG, dla każdej warstwy zostanie wygenerowany osobny plik. Aby tego uniknąć i uzyskać pojedynczy, spłaszczony obraz, dodaj opcję -flatten przed plikiem wyjściowym.

Mogrify kontra Convert: kiedy używać którego z nich

Bardzo ważną różnicą podczas pracy w partiach jest zrozumienie co dokładnie robi każde polecenie:

  • konwertować (lub nawracać magicznie) Odczytuje obraz wejściowy, stosuje transformacje i generuje nowy plik wyjściowyOryginalny obraz pozostaje nienaruszony.
  • mogryfikować Otwórz plik, zastosuj zmiany i jeśli nie używasz -format o -path, nadpisuje oryginalny plikOszczędza to miejsce na dysku, ale zmiany są nieodwracalne, jeśli nie masz kopii zapasowej.

Typowe połączenia by:

convert imagenoriginal.png -parametro valor imagendestino.png
mogrify -parametro valor imagenoriginal.png

Na przykład, jeśli uruchomisz:

convert torres.jpg -negate torresnegadas.jpg

nadal będziesz mieć dwa różne plikioryginał i negatyw. Jeśli jednak to zrobisz:

mogrify -negate torres.jpg

plik torres.jpg został zmodyfikowany I nie ma kopii zapasowej, chyba że utworzysz ją wcześniej. To idealne rozwiązanie do czyszczenia dużej liczby zdjęć, gdy martwisz się o miejsce, ale musisz zachować ostrożność.

W obu przypadkach Kolejność argumentów ma znaczenie. Z convert Najpierw należy określić obraz źródłowy, następnie parametry, a na końcu miejsce docelowe. Jeśli odwrócisz źródło i miejsce docelowe, narzędzie zawiedzie, ponieważ nie będzie mogło znaleźć pliku, który ma odczytać. mogrify Parametry podaje się przed nazwami plików. Jeśli najpierw podasz plik, a potem opcje, nic nie zostanie zastosowane.

Tworzenie płócien i tekstów od podstaw

Kolejna kluczowa różnica polega na tym Tylko Convert może tworzyć obrazy od podstawZ modyfikatorem xc: Można wygenerować płótno o jednolitym kolorze:

convert -size 500x250 xc:red imagenroja.jpg

Jeśli spróbujesz zrobić coś podobnego z mogrify Bez poprzedniego pliku nie uda się, ponieważ Nie ma nic do zmiany.To samo dotyczy generowania etykiet lub obrazów bezpośrednio zawierających tekst:

convert -size 500x250 -gravity Center -background blue -font FreeMono-Bold label:"Linux Center" cartela_Linux_Center.jpg

To polecenie tworzy niebieskie tło, wyśrodkowuje tekst, stosuje czcionkę i generuje nowy obraz. mogrify potrzebowałbyś zaczynając od istniejącego plikuNie można tego wymyślić z niczego.

Przetwarzanie wsadowe za pomocą mogrify i skryptów powłoki

Kiedy mamy setki zdjęć w folderze i chcemy zastosować ta sama konwersja automatycznieSkrypty powłoki wchodzą do gry i mogrify.

#!/bin/bash
mkdir -p convertidas
for img in *.jpeg; do
convert "$img" -resize 800x600 -quality 90 "convertidas/$img"
done

Ten mini-scenariusz oprowadza wszystkie obrazy z rozszerzeniem .jpeg W bieżącym folderze zastosuj zmianę rozmiaru i pozostaw wyniki przekonwertowany/Można go dostosować, aby zmienić format (na przykład tak, aby wynik był .png o .webp), dodaj znaki wodne lub dowolny inny filtr obsługiwany przez ImageMagick.

Jeśli masz wiele obrazów w tym samym formacie i chcesz nadpisz je na stronie oszczędność miejsca, mogrify Świeci szczególnie jasno. Typowy przykład konwersji z XCF do PNG, zmiany rozmiaru i wysłania wyniku do innego folderu wyglądałby następująco:

mogrify -resize 128x128 -format png -path "$HOME/imgs_convertidas" $HOME/imgs_originales/*.xcf

mogrify do konwersji zbiorczej i standardowych parametrów

Kolejność mogryfikować Pozwala na jednoczesne łączenie wielu transformacji. Dość kompletnym przykładem konwersji wszystkich plików PDF w folderze do formatu JPG, zmiany ich rozmiaru, dostosowania jakości i obracania byłoby:

mogrify -format jpg -density 300 -quality 80 -resize 1280x1024 -rotate -90 *.pdf

Niektóre z najczęściej używanych parametrów W kontekście optymalizacji i konwersji są to:

  • -format: format obrazu wyjściowego (jpg, png, webp, itp.).
  • -gęstość: rozdzielczość w dpi (150, 300, 600…), przydatna przy konwersji plików PDF lub innych formatów wektorowych na mapy bitowe.
  • JakościJakość kompresji dla formatów stratnych (szczególnie JPEG i WebP). 80 to zazwyczaj dobra wartość dla sieci.
  • -Zmień rozmiar: wymiary końcowe, możliwość określenia tylko szerokości, tylko wysokości lub obu.
  • -obracać się: obrót w stopniach (dodatni zgodnie z ruchem wskazówek zegara, ujemny przeciwnie do ruchu wskazówek zegara).

Należy pamiętać, że w niektórych dystrybucjach (takich jak Ubuntu/Debian z ImageMagick 7) zostały one ustanowione zasady bezpieczeństwa, które domyślnie wyłączają niektóre wrażliwe formaty, takich jak PDF. Jeśli podczas korzystania mogrify W przypadku plików PDF pojawia się błąd uprawnień; możesz edytować plik. /etc/ImageMagick-7/policy.xml z uprawnieniami administratora i zmień linię:

Jeśli podczas używania mogrify o plikach PDF widzisz błąd uprawnień, możesz edytować plik /etc/ImageMagick-7/policy.xml z uprawnieniami administratora i zmień linię:

<policy domain="coder" rights="none" pattern="PDF" />

dla czegoś takiego:

<policy domain="coder" rights="read | write" pattern="PDF" />

złagodzenie bezpieczeństwa Powinieneś ocenić, czy warto to zrobić, czy nie; z punktu widzenia purysty otwiera to niewielką lukę, ale w wielu kontrolowanych środowiskach jest to akceptowalne.

Konwersja i optymalizacja do nowoczesnych formatów (WebP, zoptymalizowany JPEG)

Oprócz ImageMagick istnieją specjalne narzędzia, które są bardzo przydatne optymalizuj rozmiar bez utraty zbyt dużej jakościszczególnie jeśli Twoim celem jest sieć.

Konwersja do WebP za pomocą cwebp i img2webp

WebP To nowoczesny format stworzony przez Google, który oferuje kompresja lepsza niż JPEG i PNG W wielu przypadkach zarówno ze stratą, jak i bez. Zysk cwebp Służy do konwersji istniejących obrazów (JPEG, PNG…) do formatu WebP z poziomu wiersza poleceń:

  • Konwersja JPEG do WebP z jakością 80:
    cwebp -q 80 input.jpg -o output.webp
  • Konwertuj PNG do WebP, zachowując przezroczystość:
    cwebp -q 80 input.png -o output.webp

Aby przetworzyć wsadowo (na przykład wszystkie obrazy zaczynające się od servbay), możesz użyć małej pętli w powłoce:

for file in servbay*.{jpg,png}; do
cwebp -q 45 "$file" -o "${file%.*}.webp"
done

Składnia ${plik%.*} To rozszerzenie parametrów powłoki, które usuwa oryginalne rozszerzenie, a następnie dodaje .webp.

Jeśli chcesz utwórz animowany WebP (coś podobnego do animowanego GIF-a, ale bardziej wydajnego), możesz wyciągnąć z img2webp:

img2webp -loop 0 -d 100 frame1.png frame2.png frame3.png -o output.webp

W tym przykładzie połączono kilka obrazów w jeden plik animowany, Opóźnienie 100 ms między ramkami i pętlą nieskończoną.

Bezstratna optymalizacja JPEG za pomocą jpegtran, djpeg i cjpeg

W przypadku JPEG istnieje wiele klasycznych narzędzi, które są bardzo przydatne, gdy chcesz wykonać optymalizacja bezstratna lub bardzo dokładna kontrola:

  • jpegtranObraca, odwraca, zmienia kolejność i optymalizuje pliki JPEG bez ponownej kompresji (operacje bezstratne). Umożliwia również generowanie progresywnych plików JPEG i usuwanie zbędnych metadanych.
  • djpeg:dekoduje pliki JPEG do nieskompresowanych formatów pośrednich (takich jak PPM), co jest przydatne w przypadku niskopoziomowych przepływów pracy.
  • cjpeg: wykonuje odwrotny proces, kompresując surowe obrazy do formatu JPEG z innymi parametrami jakości.
Czym są obrazy AVIF?
Podobne artykuł:
AVIF: Wszystko o nowym formacie obrazu, który rewolucjonizuje sieć

Typowe zastosowanie jpegtran do optymalizacji plików JPEG bez strat i uczynienie ich postępowymi byłoby:

jpegtran -optimize -progressive -copy none input.jpg > output.jpg

Tutaj usuwamy metadane (EXIF, komentarze itp.), poprawiamy organizację wewnętrzną i konwertujemy na progresywne, co zwykle zapewnia lepsze postrzeganie obciążenia w sieci, gdy obraz jest wyświetlany w „warstwach” szczegółów.

Przetwarzanie wsadowe obrazów z interfejsem graficznym: Converseen

Jeśli terminal nie jest tym, czego potrzebujesz, ale nadal chcesz wykorzystać możliwości ImageMagick, dostępne są narzędzia takie jak Converseen, który oferuje wieloplatformowy interfejs graficzny (Windows i Linux) do zarządzania konwersjami zbiorczymi.

Converseen jest wewnętrznie oparty na bibliotece ImageMagick i pozwala jednym zamachem:

  • Konwertuj między formatami (JPG, PNG, TIF i wiele innych, takich jak DPX, EXR, GIF, SVG, PhotoCD, PostScript…).
  • Zmień rozmiar, obróć i odwróć obrazy wsadowe.
  • Kompresuj obrazy do sieci lub w przypadku dokumentów, kontrolując ich jakość i rozmiar.
  • Zmień nazwy grup plików z prefiksami, sufiksami lub liczbami progresywnymi.
  • Konwertuj cały plik PDF na wiele obrazówjeden na stronę.

Instaluje się łatwo z repozytoriów wielu dystrybucji (converseeni w openSUSE converseen-lang (dla wybranego języka) lub pobierając wersję wykonywalną/przenośną na system Windows.

Interfejs Converseen jest podzielony na kilka paneli: panel akcji (podgląd, wymiary, obrót i opcje wyjściowe), obszar centralny, w którym można zobaczyć pliki do przetworzenia oraz dolny panel gdzie wybierasz format wyjściowy, konkretne preferencje (kompresję JPG/PNG, kolor przezroczystego tła, itp.).

Do jego najbardziej praktycznych funkcji należą: na masową skalę i znanyMożesz na przykład wybrać opcję „Skaluj obraz”, zachować proporcje obrazu, ustawić szerokość lub procent pomniejszenia oraz wybrać, czy zachować oryginalny format, czy przekonwertować go na inny. Możesz zmienić nazwę obrazu na kilka sposobów. Prefiks/Sufiks (wstaw ciągi znaków wokół oryginalnej nazwy) i Liczba progresywna (dodaj numerację sekwencyjną).

To także pozwala obracanie obrazów o 90°, 180° lub obracać je poziomo/pionowo, a także ma określony przepływ pracy do konwersji pliku PDF na zestaw obrazów: importujesz plik PDF, wybierasz strony, które Cię interesują, wybierasz wymiary, format, progresywne zmienianie nazw i, jeśli to konieczne, Zamieniasz przezroczyste tła na określony kolor (na przykład biały).

Typowe praktyczne przypadki z ImageMagick

Dzięki wszystkim powyższym możliwościom możesz teraz skonfigurować szeroką gamę przepływów pracy. Oto kilka typowych przykładów Optymalizacja i konwersja wsadowa z ImageMagick by:

  • Zmiana rozmiaru masy W przypadku bloga lub galerii: użyj skryptu powłoki, który przejdzie przez wszystkie duże zdjęcia, zmniejszy je do maksymalnej szerokości (np. 1200 px) i zapisze w folderze „web”.
  • Pobieraj obrazy z adresu URL, skaluj i optymalizuj w jednym poleceniu:
    convert https://blogandweb.com/INPUT_IMAGE.jpg -resize 1200x -quality 60 -strip OUTPUT_IMAGE.jpg
  • Dodaj logo lub znaki wodne automatycznie zastosuj wszystkie obrazy w kampanii, używając kombinacji -gravity, -geometry y -composite w pętli.
  • Usuń obramowania z zestawu obrazów z -shave 10x10, idealny do zeskanowanych zdjęć z niechcianymi ramkami.
  • Połącz kilka obrazów w montaż poziomo z +append, przydatne do porównań przed i po lub pasków ramek.
  • Generuj animowane pliki GIF z sekwencji JPG/PNG z -delay y -loop.

Cały ten potencjał można zaaranżować z innych języków, takich jak PHP, Python lub Node.js wywoływanie poleceń za pomocą exec(), subprocess o child_processDzięki temu integracja optymalizacji obrazu z procesem przesyłania danych lub przetwarzaniem zaplecza jest znacznie prostsza.

Jak odzyskać brakujące zdjęcia z mobilnej Galerii
Podobne artykuł:
Jak odzyskać brakujące zdjęcia z galerii mobilnej: kompletny przewodnik

Mistrz ImageMagick, mogrify i uzupełniające narzędzia, takie jak cwebp lub jpegtran Pozwala pewnie obsługiwać ogromne biblioteki obrazów, skracać czas ładowania stron internetowych, oszczędzać miejsce na dysku i automatyzować zadania, których nie dałoby się wykonać ręcznie. Gdy przyzwyczaisz się do pisania trzech lub czterech przemyślanych poleceń lub krótkiego skryptu, zmiana rozmiaru, formatu i jakości tysięcy zdjęć przestanie być uciążliwa, a stanie się naturalną częścią Twojego procesu pracy. Udostępnij te informacje, a więcej użytkowników dowie się o tym narzędziu.