برش یک تصویر و صادرات آن به چندین فرمت یک نیاز رایج هنگام ایجاد تصویرهای کوچک، پیشنمایشها یا داراییهای سفارشی است. این راهنما نشان میدهد چگونه این عملیات را با استفاده از Aspose.Imaging for Python و کلاس RasterImageExporter انجام دهید، با تمرکز بر کلیدواژه clip and export images in Python.
نکات کلیدی
- RasterImageExporter میتواند یک مستطیل را برش دهد و نتیجه را به هر فرمت تصویری پشتیبانیشده بنویسد.
- همان مستطیل برش میتواند در دهها فرمت بدون بارگذاری مجدد تصویر منبع استفاده مجدد شود.
- تأیید اندازه تصویر ذخیرهشده تضمین میکند که عملیات برش موفق بوده است.
- کلون کردن اشیاء گزینههای ذخیرهسازی از اثرات جانبی بین فرمتها جلوگیری میکند.
- یک لایسنس موقت تمام عملکردها را در حین ارزیابی API فعال میکند.
چرا برش و صادرات تصاویر
توسعهدهندگان اغلب به یک ناحیه برشخوردهٔ واحد از یک تصویر نیاز دارند، اما باید آن ناحیه را در چندین نوع فایل برای پلتفرمهای مختلف ارائه دهند. قبل از این قابلیت، مجبور بودید تصویر را برای هر فرمت بهصورت جداگانه بارگذاری، برش داده و ذخیره کنید که منجر به افزایش بار I/O و CPU میشد. RasterImageExporter با اعمال همان مستطیل برش بر روی هر فرمت خروجی در یک حلقهٔ واحد، جریان کار را ساده میکند، زمان را ذخیره مینماید و پیچیدگی کد را کاهش میدهد.
شروع کار با Aspose.Imaging برای Python
ابتدا، بسته Aspose.Imaging را با استفاده از pip نصب کنید:
pip install aspose-imaging-python-net
برای مستندات دقیق، به صفحه محصول مراجعه کنید. این کتابخانه بر روی هر محیط پایتونی که ادغام .NET را از طریق Python.NET پشتیبانی میکند، کار میکند.
نحوه برش و صادرات تصاویر در چندین قالب
در زیر یک مثال کامل و خودکفا آورده شده است که مجموعهای از تصاویر تست را بارگذاری میکند، یک مستطیل برش تعریف میکند و ناحیه برشخورده را در یازده قالب مختلف ذخیره مینماید.
مثال زیر نشان میدهد که چگونه یک مستطیل را برش داده و نتیجه را با استفاده از پایتون به چندین فرمت مختلف صادر کنید.
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)
توضیح مراحل کلیدی
- راهاندازی پوشهها – اسکریپت یک پوشه
outputایجاد میکند تا فایلهای برشخورده موقت را ذخیره کند. - آمادهسازی فهرستهای فایل –
filesنامهای تصاویر منبع را نگه میدارد، در حالی کهsave_extsوsave_optionsهر فایل را به یک فرمت هدف و شیء گزینههای مربوطهاش نگاشت میکنند. - تعریف مستطیل برش –
Rectangle(10, 15, 100, 100)ناحیهای را که باید استخراج شود مشخص میکند (x=10، y=15، عرض=100، ارتفاع=100). - بارگذاری تصویر منبع –
Image.load(file_path)منبع را یک بار باز میکند و I/O را کاهش میدهد. - ذخیره با برش –
image.save(out_file, save_options[i].clone(), out_rect)ناحیه برشخورده را به فرمت مناسب مینویسد. فراخوانیclone()اطمینان میدهد که هر فرمت یک نمونه گزینههای مستقل دریافت کند. - اعتبارسنجی اندازه خروجی – پس از هر ذخیرهسازی، اسکریپت فایل خروجی را دوباره بارگذاری میکند و بررسی میکند که
test_image.sizeبا اندازه مستطیل مطابقت داشته باشد، تا اطمینان حاصل شود برش موفق بوده است. - پاکسازی – فایلهای تأیید شده با موفقیت حذف میشوند و در نهایت پوشه موقت حذف میگردد.
نتیجهگیری
با استفاده از Aspose.Imaging’s RasterImageExporter، میتوانید یک ناحیه مستطیلی را یکبار برش داده و آن را به هر یک از فرمتهای تصویری پشتیبانیشده در یک عبور صادر کنید. این رویکرد بارگذاریهای تکراری را کاهش میدهد، کد را ساده میکند و خروجی سازگار در تمام فرمتها را تضمین میکند.
سوالات متداول
آیا RasterImageExporter میتواند تصاویر را در هر قالبی برش دهد؟
بله، این امکان را برای تمام قالبهای موجود در آرایهٔ save‑options فراهم میکند، از جمله BMP، GIF، JPEG، PNG، TIFF، ICO، JP2، WebP، DICOM، TGA و BigTIFF.آیا هنگام فراخوانی save نیاز به مشخص کردن فرمت خروجی دارم؟ فرمت از پسوند فایلی که ارائه میدهید استخراج میشود؛ شیء save‑options مطابقتدار هر تنظیمات خاص فرمت را تعریف میکند.
اگر مستطیل برش از اندازه تصویر منبع فراتر رود چه اتفاقی میافتد؟ یک
ArgumentOutOfRangeExceptionپرتاب میشود، بنابراین قبل از ذخیرهسازی مستطیل را نسبت بهimage.sizeاعتبارسنجی کنید.آیا کلون کردن گزینههای ذخیره برای هر تکرار لازم است؟ کلون کردن یک نمونهٔ تازه از گزینهها را برای هر فرمت ایجاد میکند و از بروز اثرات جانبی هنگام استفاده مجدد از همان شیء جلوگیری میکند.
چگونه میتوانم تأیید کنم که تصویر برشخورده دارای ابعاد مورد انتظار است؟ فایل ذخیرهشده را با
Image.loadدوباره بارگذاری کنید و ویژگی.sizeآن را باRectangle.sizeاصلی مقایسه کنید.آیا برای برش به یک لایسنس تجاری نیاز دارم؟ برش با یک لایسنس موقت کار میکند؛ برای استفاده در تولید، یک لایسنس کامل از طریق صفحه لایسنس موقت دریافت کنید.
دریافت یک لایسنس رایگان و کشف بیشتر
با درخواست یک لایسنس موقت، میتوانید تمام عملکردها را آزمایش کنید: https://purchase.aspose.com/temporary-license/
