CodeGym /Kurs Javy /Python SELF PL /Zarządzanie formatami i konwersja

Zarządzanie formatami i konwersja

Python SELF PL
Poziom 46 , Lekcja 2
Dostępny

1. Rozpoznawanie formatu obrazu

Obsługiwane formaty obrazów

Pillow obsługuje wiele formatów obrazów, w tym:

  • JPEG (JPG): Jeden z najpopularniejszych formatów dla zdjęć. Kompresuje obraz z utratą jakości, ale znacznie zmniejsza rozmiar pliku. Nie obsługuje przezroczystości.
  • PNG: Format bezstratny, który obsługuje przezroczystość (kanał alfa). Idealny do logotypów, ikon i obrazów, gdzie ważna jest szczegółowość.
  • BMP: Format o wysokiej jakości bez kompresji, ale dużym rozmiarze pliku. Obsługuje przezroczystość.
  • TIFF: Popularny do przechowywania obrazów bez strat. Często używany w poligrafii.
  • WEBP: Nowoczesny format z wysokim poziomem kompresji i obsługą przezroczystości. Idealny do obrazów na stronach internetowych, ponieważ zapewnia mały rozmiar pliku przy dobrej jakości.

Ładowanie obrazu do konwersji

Zanim obraz zostanie przekonwertowany, należy go załadować za pomocą metody Image.open().

Python

from PIL import Image

# Otwieranie obrazu
image = Image.open("example.jpg")
print(image.format)  # Sprawdzamy oryginalny format obrazu

2. Konwersja obrazu do innego formatu

Metoda save() pozwala zapisać obrazy w różnych formatach, zmieniając po prostu rozszerzenie w nazwie pliku lub jawnie określając format.

Konwersja JPEG do PNG

Aby przekonwertować obraz z JPEG do PNG, wystarczy podać nowe rozszerzenie przy zapisywaniu pliku:

Python

# Zapisywanie obrazu w formacie PNG
image.save("example_converted.png")

Ten kod przekonwertuje obraz z formatu JPEG do formatu PNG i zapisze go z podaną nazwą. PNG idealnie nadaje się do przechowywania obrazów bez strat i obsługuje obszary przezroczyste.

Konwersja PNG do JPEG

Konwersja obrazów z PNG do JPEG również jest możliwa, ale warto pamiętać, że JPEG nie obsługuje przezroczystości. Przy konwersji obszary przezroczyste zostaną wypełnione białym kolorem.

Python

# Konwersja PNG do JPEG (przezroczystość zostanie zastąpiona białym tłem)
image = image.convert("RGB")  # Przełączenie do trybu RGB, wymaganego dla JPEG
image.save("example_converted.jpg", "JPEG")

Metoda convert("RGB") służy do zmiany trybu obrazu na RGB, ponieważ JPEG nie obsługuje przezroczystości. Jest to konieczne do zapisania pliku w formacie JPEG.

3. Zarządzanie jakością obrazu

Do optymalizacji obrazów Pillow oferuje parametry quality oraz optimize, które pozwalają kontrolować jakość i rozmiar pliku. Parametry te są szczególnie przydatne dla JPEG i PNG.

Optymalizacja i zarządzanie jakością JPEG

Podczas zapisywania obrazu w formacie JPEG parametr quality kontroluje stopień kompresji. Im wyższa wartość jakości, tym większy rozmiar pliku i lepsza jakość obrazu. Wartość quality waha się od 1 do 95 (domyślnie 75).

Python

# Zapisywanie obrazu JPEG o mniejszej jakości
image.save("example_compressed.jpg", "JPEG", quality=85)

Ten kod zapisuje obraz z jakością 85, co zwykle pozwala na zachowanie dobrej jakości przy zmniejszonym rozmiarze pliku. Jeśli wymagane jest jeszcze mniejsze jakości, np. do tworzenia miniatur, można podać quality = 50.

Optymalizacja PNG

Dla PNG parametr optimize = True wykonuje kompresję bezstratną, usuwając nadmiarowe dane. Jest to szczególnie przydatne przy publikowaniu obrazów w internecie.

Python

# Zapisywanie zoptymalizowanego PNG
image.save("example_optimized.png", "PNG", optimize=True)

Optymalizacja PNG pomaga zmniejszyć rozmiar pliku bez utraty jakości, co jest szczególnie ważne dla logotypów i ikon, gdzie każdy kilobajt ma znaczenie.

Porównanie jakości JPEG z różnym stopniem kompresji

Zobaczmy, jak zmiana parametru quality wpływa na rozmiar pliku i jakość obrazu.

Python

# Zapisywanie obrazów JPEG o różnej jakości
image.save("quality_95.jpg", "JPEG", quality=95)
image.save("quality_75.jpg", "JPEG", quality=75)
image.save("quality_50.jpg", "JPEG", quality=50)

W tym przykładzie zapisujemy ten sam obraz z trzema poziomami jakości: 95, 75 i 50. Obraz z jakością 95 będzie prawie nieodróżnialny od oryginału, ale zajmie więcej miejsca, podczas gdy jakość 50 doprowadzi do znacznej kompresji i być może zauważalnej utraty szczegółów.

4. Użycie formatu WebP

Format WebP to nowoczesny format, który obsługuje zarówno kompresję stratną, jak i bezstratną, a także przezroczystość. Jest szeroko stosowany w internecie dzięki wysokiemu poziomowi kompresji.

Konwersja obrazu do formatu WebP

Python

# Konwersja obrazu do WebP
image.save("example.webp", "WEBP", quality=80)

W tym przykładzie zapisujemy obraz w formacie WebP z jakością 80. WebP pozwala na uzyskanie znacznie mniejszego rozmiaru pliku w porównaniu z JPEG lub PNG przy podobnej jakości.

Przykład pełnej konwersji z optymalizacją

Połączmy teraz wszystkie omówione metody i stwórzmy skrypt do konwersji obrazu do kilku formatów z optymalizacją.

Python

from PIL import Image

# Otwieranie obrazu
image = Image.open("example.jpg")

# Konwersja do PNG z optymalizacją
image.save("converted_optimized.png", "PNG", optimize=True)

# Konwersja do JPEG z mniejszą jakością
image_rgb = image.convert("RGB")  # Przełączenie do trybu RGB dla JPEG
image_rgb.save("converted_compressed.jpg", "JPEG", quality=85)

# Konwersja do WebP z optymalizacją jakości
image_rgb.save("converted_optimized.webp", "WEBP", quality=80)

W tym przykładzie:

  • Konwertujemy obraz do PNG z optymalizacją, co pomaga zmniejszyć rozmiar pliku bez strat.
  • Zapisujemy obraz w formacie JPEG z jakością 85, co zapewnia dobrą jakość i mały rozmiar pliku.
  • Konwertujemy obraz do formatu WebP, który idealnie nadaje się do publikacji w internecie, zachowując wysoką jakość przy małym rozmiarze pliku.
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION