Przycinanie obrazu i eksportowanie go do wielu formatów jest powszechnym wymaganiem przy tworzeniu miniatur, podglądów lub niestandardowych zasobów. Ten przewodnik pokazuje, jak wykonać tę operację przy użyciu Aspose.Imaging for Python oraz klasy RasterImageExporter, koncentrując się na frazie przycinanie i eksportowanie obrazów w Pythonie.
Najważniejsze wnioski
- RasterImageExporter może przyciąć prostokąt i zapisać wynik w dowolnym obsługiwanym formacie obrazu.
- Ten sam prostokąt przycięcia może być używany w dziesiątkach formatów bez ponownego ładowania obrazu źródłowego.
- Sprawdzenie rozmiaru zapisanego obrazu zapewnia, że operacja przycięcia zakończyła się sukcesem.
- Klony obiektów opcji zapisu zapobiegają efektom ubocznym między formatami.
- Tymczasowa licencja umożliwia pełną funkcjonalność podczas oceny API.
Dlaczego przycinać i eksportować obrazy
Programiści często potrzebują jednego przyciętego regionu z obrazu, ale muszą dostarczyć ten region w kilku typach plików dla różnych platform. Przed tą funkcją trzeba było ładować, przycinać i zapisywać obraz osobno dla każdego formatu, zwiększając obciążenie I/O i CPU. RasterImageExporter usprawnia przepływ pracy, stosując ten sam prostokąt przycięcia do każdego formatu wyjściowego w jednej pętli, oszczędzając czas i redukując złożoność kodu.
Rozpoczęcie pracy z Aspose.Imaging dla Pythona
Najpierw zainstaluj pakiet Aspose.Imaging przy użyciu pip:
pip install aspose-imaging-python-net
Aby uzyskać szczegółową dokumentację, odwiedź stronę produktu. Biblioteka działa w każdym środowisku Python, które obsługuje integrację .NET za pośrednictwem Python.NET.
Jak przycinać i eksportować obrazy w wielu formatach
Poniżej znajduje się kompletny, samodzielny przykład, który ładuje zestaw obrazów testowych, definiuje prostokąt przycięcia i zapisuje przycięty obszar w jedenastu różnych formatach.
Poniższy przykład pokazuje, jak przyciąć prostokąt i wyeksportować wynik do wielu formatów przy użyciu Pythona.
import os
from aspose.imaging import Image, Rectangle
from aspose.imaging.imageoptions import *
from aspose.imaging.fileformats.tiff.enums import TiffExpectedFormat
base_dir = "testdata"
out_dir = os.path.join(base_dir, "output")
if not os.path.exists(out_dir):
os.mkdir(out_dir)
files = [
"decHex_16Bpp555.bmp",
"2086.gif",
"3.jpg",
"1.png",
"bi_CCITT3_2d.tif",
"light.ico",
"Input.jp2",
"ExifChunk.webp",
"0008.DCM",
"src-base-indexed.tga",
"BigTiff.tiff.tiff"
]
save_exts = ["bmp", "gif", "jpeg", "png", "tiff", "ico", "jp2", "webp", "dicom", "tga", "bigtiff"]
save_options = [
BmpOptions(),
GifOptions(),
JpegOptions(),
PngOptions(),
TiffOptions(TiffExpectedFormat.TIFF_DEFLATE_RGB),
IcoOptions(),
Jpeg2000Options(),
WebPOptions(),
DicomOptions(),
TgaOptions(),
BigTiffOptions(TiffExpectedFormat.TIFF_DEFLATE_RGB)
]
assert len(files) == len(save_exts)
assert len(files) == len(save_options)
# Define the Clipping Rectangle: (X, Y, Width, Height)
out_rect = Rectangle(10, 15, 100, 100)
error_list = []
for file in files:
file_path = os.path.join(base_dir, file)
# Load the source image once
with Image.load(file_path) as image:
for i in range(len(save_exts)):
out_file = os.path.join(out_dir, file + "_clipped." + save_exts[i])
# Clone the format‑specific options and apply the clipping rectangle
image.save(out_file, save_options[i].clone(), out_rect)
# Verify that the saved image has the expected size
can_remove = True
with Image.load(out_file) as test_image:
if out_rect.size != test_image.size:
can_remove = False
error_list.append(
"Sizes (exp = {0}, real = {1}) are not equal! Input file: {2}, Output file: {3}".format(
out_rect.size, test_image.size, file, out_file))
if can_remove:
os.remove(out_file)
if error_list:
error_text = "\n".join(error_list)
print(error_text)
raise AssertionError(error_text)
# Clean up the Temporary Directory
os.rmdir(out_dir)
Wyjaśnienie kluczowych kroków
- Utworzenie katalogów – Skrypt tworzy folder
output, aby przechowywać tymczasowe przycięte pliki. - Przygotowanie list plików –
fileszawiera nazwy źródłowych obrazów, natomiastsave_extsisave_optionsmapują każdy plik na docelowy format oraz odpowiadający mu obiekt opcji. - Zdefiniowanie prostokąta przycinania –
Rectangle(10, 15, 100, 100)określa region do wyodrębnienia (x=10, y=15, szerokość=100, wysokość=100). - Załadowanie obrazu źródłowego –
Image.load(file_path)otwiera źródło raz, zmniejszając operacje I/O. - Zapis z przycięciem –
image.save(out_file, save_options[i].clone(), out_rect)zapisuje przycięty region w odpowiednim formacie. Wywołanieclone()zapewnia, że każdy format otrzymuje niezależną instancję opcji. - Walidacja rozmiaru wyjścia – Po każdym zapisie skrypt ponownie ładuje plik wyjściowy i sprawdza, czy
test_image.sizeodpowiada rozmiarowi prostokąta, co gwarantuje pomyślne przycięcie. - Czyszczenie – Pomyślnie zweryfikowane pliki są usuwane, a na koniec katalog tymczasowy zostaje usunięty.
Wnioski
Korzystając z Aspose.Imaging’s RasterImageExporter, możesz przyciąć prostokątny obszar jednorazowo i wyeksportować go do dowolnego z obsługiwanych formatów obrazu w jednym przebiegu. To podejście redukuje zbędne ładowanie, upraszcza kod i zapewnia spójny wynik we wszystkich formatach.
FAQ
Czy RasterImageExporter może przycinać obrazy w dowolnym formacie? Tak, obsługuje przycinanie wszystkich formatów wymienionych w tablicy opcji zapisu, takich jak BMP, GIF, JPEG, PNG, TIFF, ICO, JP2, WebP, DICOM, TGA oraz BigTIFF.
Czy muszę określić format wyjściowy przy wywoływaniu save?
Format jest wywnioskowany z rozszerzenia pliku, które podajesz; odpowiadający obiekt save‑options definiuje wszelkie ustawienia specyficzne dla formatu.Co się stanie, jeśli prostokąt przycinania przekracza rozmiar obrazu źródłowego? Zostaje rzucony
ArgumentOutOfRangeException, więc należy zwalidować prostokąt względemimage.sizeprzed zapisem.Czy klonowanie opcji zapisu jest wymagane przy każdej iteracji?
Klonowanie tworzy nową instancję opcji dla każdego formatu, zapobiegając skutkom ubocznym, gdy ten sam obiekt jest ponownie używany.Jak mogę zweryfikować, że przycięty obraz ma oczekiwane wymiary? Ponownie załaduj zapisany plik przy użyciu
Image.loadi porównaj jego właściwość.sizez oryginalnymRectangle.size.Czy potrzebuję komercyjnej licencji na przycinanie? Przycinanie działa z tymczasową licencją; uzyskaj pełną licencję do użytku produkcyjnego poprzez stronę tymczasowej licencji.
Uzyskaj darmową licencję i odkryj więcej
Rozpocznij eksperymentowanie z pełną funkcjonalnością, prosząc o tymczasową licencję: https://purchase.aspose.com/temporary-license/
