1. Wczytywanie i zapisywanie obrazów
Do wczytywania obrazów w Pillow używa się klasy Image
.
Po wczytaniu obraz można modyfikować i zapisywać w różnych
formatach. Przyjrzyjmy się podstawowym operacjom wczytywania i zapisywania obrazów.
Wczytywanie obrazu
Aby wczytać obraz, użyj metody Image.open()
.
Pozwala ona otwierać obrazy w dowolnym obsługiwanym formacie.
from PIL import Image
# Otwieranie obrazu
image = Image.open("example.jpg")
# Wyświetlenie informacji o pliku
print(image.format) # Format obrazu, np. JPEG lub PNG
print(image.size) # Rozmiar obrazu (szerokość, wysokość)
print(image.mode) # Tryb kolorów, np. RGB lub Grayscale
Ten kod wczytuje obraz example.jpg
i wyświetla jego
podstawowe właściwości: format, rozmiar i tryb kolorów. Jeśli obraz nie
znajduje się w tym samym folderze, podaj pełną ścieżkę do pliku.
Zapisywanie obrazu
Po wczytaniu i modyfikacji obrazu możesz zapisać go w dowolnym innym
obsługiwanym formacie, po prostu podając odpowiednie rozszerzenie w nazwie pliku. Metoda
save()
pozwala określić nazwę i format pliku wynikowego.
# Zapis obrazu w innym formacie
image.save("example.png") # Zapisuje obraz w formacie PNG
Możesz także zmienić jakość zapisywanego obrazu w celu zmniejszenia rozmiaru pliku, co jest szczególnie przydatne dla obrazów w formacie JPEG.
# Zapis z modyfikacją jakości
image.save("compressed_example.jpg", quality=85) # Wartość quality waha się od 1 do 95
2. Zmiana rozmiaru obrazu
Zmiana rozmiaru to jedno z najczęstszych zadań przy pracy z obrazami. Pillow oferuje kilka metod zmiany rozmiaru, w tym ustawienie konkretnych wymiarów szerokości i wysokości, zmianę proporcjonalną i tworzenie miniatur.
Zmiana rozmiaru za pomocą metody resize()
Metoda resize()
pozwala określić dokładne wymiary obrazu (szerokość i wysokość), ale obraz może być zdeformowany, jeśli nowe wymiary nie zachowują proporcji.
# Ustawienie nowego rozmiaru
new_size = (800, 600)
resized_image = image.resize(new_size)
# Zapisanie zmniejszonego obrazu
resized_image.save("resized_example.jpg")
W tym przykładzie obraz jest zmieniany do wymiarów 800x600 pikseli i zapisywany jako nowy plik. Jeśli obraz źródłowy ma inne proporcje, zostanie rozciągnięty lub skompresowany, aby dopasować się do nowych wymiarów.
Proporcjonalna zmiana rozmiaru za pomocą thumbnail()
Aby zmienić rozmiar obrazu, zachowując jego proporcje, użyj metody
thumbnail()
. Metoda ta automatycznie zmniejsza obraz tak, aby pasował do podanych wymiarów, zachowując oryginalne proporcje. To szczególnie przydatne do tworzenia miniatur obrazów.
# Tworzenie miniatury o maksymalnych wymiarach 400x400 pikseli
image.thumbnail((400, 400))
# Zapis miniatury
image.save("thumbnail_example.jpg")
Metoda thumbnail()
modyfikuje obraz "w miejscu", co
oznacza, że zmiany zachodzą w oryginalnym obiekcie image
.
Po wykonaniu thumbnail()
, Pillow zmniejszy obraz tak,
aby jego wymiary nie przekraczały 400x400 pikseli, zachowując proporcje.
Skalowanie z zachowaniem proporcji za pomocą ImageOps.fit()
Czasami konieczne jest zmodyfikowanie rozmiaru obrazu, aby dokładnie pasował
do określonych wymiarów, ale z zachowaniem proporcji poprzez przycięcie nadmiarowych części. W takich przypadkach można użyć metody ImageOps.fit()
.
from PIL import ImageOps
# Ustawienie nowego rozmiaru
target_size = (400, 400)
fitted_image = ImageOps.fit(image, target_size, method=Image.LANCZOS)
# Zapis przyciętego obrazu
fitted_image.save("fitted_example.jpg")
Metoda ImageOps.fit()
automatycznie przycina obraz, aby
pasował do podanych wymiarów bez zniekształceń. Na przykład, jeśli obraz źródłowy jest prostokątny, metoda przytnie krawędzie, aby stał się kwadratowy i pasował do wymiarów 400x400 pikseli.
3. Przykład kompletnego kodu
Poniżej znajduje się przykład kodu, który łączy wszystkie omawiane metody — od wczytywania do zmiany rozmiarów i zapisywania obrazów.
from PIL import Image, ImageOps
# Otwieranie obrazu
image = Image.open("example.jpg")
# Zmiana rozmiaru bez zachowania proporcji
resized_image = image.resize((800, 600))
resized_image.save("resized_example.jpg")
# Proporcjonalne zmniejszenie obrazu
image.thumbnail((400, 400))
image.save("thumbnail_example.jpg")
# Skalowanie z przycięciem do żądanych wymiarów
fitted_image = ImageOps.fit(image, (400, 400), method=Image.LANCZOS)
fitted_image.save("fitted_example.jpg")
Wyjaśnienie metod zmiany rozmiaru
-
resize()
: pozwala określić dowolne wymiary, ale może prowadzić do zniekształcenia obrazu, jeśli nowe wymiary nie odpowiadają proporcjom oryginału. -
thumbnail()
: zmienia rozmiar obrazu, zachowując proporcje. Przydatne do tworzenia miniatur i zmniejszania dużych obrazów. -
ImageOps.fit()
: skaluje obraz do określonych wymiarów z przycięciem krawędzi. Stosowane, gdy ważne jest dokładne dopasowanie do podanych wymiarów bez zniekształceń.
4. Wskazówki:
Praktyczne zastosowanie zmiany rozmiaru obrazów
- Optymalizacja obrazów dla stron internetowych: Duże obrazy mogą spowalniać ładowanie strony, dlatego ważne jest ich optymalizowanie poprzez zmniejszanie rozmiaru bez utraty jakości.
-
Tworzenie miniatur do galerii: Użycie
thumbnail()
pozwala szybko tworzyć miniatury obrazów, które można wyświetlać w podglądzie. -
Dopasowanie obrazów do określonych wymiarów: Gdy konieczne jest
dopasowanie obrazu do stałych wymiarów, np. dla awatara
lub profilu, metoda
ImageOps.fit()
pozwala przyciąć i skalować obraz, aby spełniał te wymagania.
Wskazówki dotyczące wyboru metod
Używaj resize()
, gdy chcesz dokładnie określić szerokość i
wysokość obrazu, i nie zależy Ci na zachowaniu proporcji.
Stosuj thumbnail()
do tworzenia miniatur lub kiedy chcesz
zmniejszyć obraz, zachowując jego proporcje.
Wybierz ImageOps.fit()
, gdy potrzebny jest obraz
o określonych wymiarach, ale bez zniekształcenia proporcji. Metoda ta przycina
nadmiarowe części, co jest wygodne do dopasowywania obrazu do określonych ram.
GO TO FULL VERSION