برش یک تصویر و صادرات آن به چندین فرمت یک نیاز رایج هنگام ایجاد تصویرهای کوچک، پیش‌نمایش‌ها یا دارایی‌های سفارشی است. این راهنما نشان می‌دهد چگونه این عملیات را با استفاده از 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)

توضیح مراحل کلیدی

  1. راه‌اندازی پوشه‌ها – اسکریپت یک پوشه output ایجاد می‌کند تا فایل‌های برش‌خورده موقت را ذخیره کند.
  2. آماده‌سازی فهرست‌های فایل – files نام‌های تصاویر منبع را نگه می‌دارد، در حالی که save_exts و save_options هر فایل را به یک فرمت هدف و شیء گزینه‌های مربوطه‌اش نگاشت می‌کنند.
  3. تعریف مستطیل برش – Rectangle(10, 15, 100, 100) ناحیه‌ای را که باید استخراج شود مشخص می‌کند (x=10، y=15، عرض=100، ارتفاع=100).
  4. بارگذاری تصویر منبع – Image.load(file_path) منبع را یک بار باز می‌کند و I/O را کاهش می‌دهد.
  5. ذخیره با برش – image.save(out_file, save_options[i].clone(), out_rect) ناحیه برش‌خورده را به فرمت مناسب می‌نویسد. فراخوانی clone() اطمینان می‌دهد که هر فرمت یک نمونه گزینه‌های مستقل دریافت کند.
  6. اعتبارسنجی اندازه خروجی – پس از هر ذخیره‌سازی، اسکریپت فایل خروجی را دوباره بارگذاری می‌کند و بررسی می‌کند که test_image.size با اندازه مستطیل مطابقت داشته باشد، تا اطمینان حاصل شود برش موفق بوده است.
  7. پاک‌سازی – فایل‌های تأیید شده با موفقیت حذف می‌شوند و در نهایت پوشه موقت حذف می‌گردد.

نتیجه‌گیری

با استفاده از Aspose.Imaging’s RasterImageExporter، می‌توانید یک ناحیه مستطیلی را یک‌بار برش داده و آن را به هر یک از فرمت‌های تصویری پشتیبانی‌شده در یک عبور صادر کنید. این رویکرد بارگذاری‌های تکراری را کاهش می‌دهد، کد را ساده می‌کند و خروجی سازگار در تمام فرمت‌ها را تضمین می‌کند.

سوالات متداول

  1. آیا RasterImageExporter می‌تواند تصاویر را در هر قالبی برش دهد؟
    بله، این امکان را برای تمام قالب‌های موجود در آرایهٔ save‑options فراهم می‌کند، از جمله BMP، GIF، JPEG، PNG، TIFF، ICO، JP2، WebP، DICOM، TGA و BigTIFF.

  2. آیا هنگام فراخوانی save نیاز به مشخص کردن فرمت خروجی دارم؟ فرمت از پسوند فایلی که ارائه می‌دهید استخراج می‌شود؛ شیء save‑options مطابقت‌دار هر تنظیمات خاص فرمت را تعریف می‌کند.

  3. اگر مستطیل برش از اندازه تصویر منبع فراتر رود چه اتفاقی می‌افتد؟ یک ArgumentOutOfRangeException پرتاب می‌شود، بنابراین قبل از ذخیره‌سازی مستطیل را نسبت به image.size اعتبارسنجی کنید.

  4. آیا کلون کردن گزینه‌های ذخیره برای هر تکرار لازم است؟ کلون کردن یک نمونهٔ تازه از گزینه‌ها را برای هر فرمت ایجاد می‌کند و از بروز اثرات جانبی هنگام استفاده مجدد از همان شیء جلوگیری می‌کند.

  5. چگونه می‌توانم تأیید کنم که تصویر برش‌خورده دارای ابعاد مورد انتظار است؟ فایل ذخیره‌شده را با Image.load دوباره بارگذاری کنید و ویژگی .size آن را با Rectangle.size اصلی مقایسه کنید.

  6. آیا برای برش به یک لایسنس تجاری نیاز دارم؟ برش با یک لایسنس موقت کار می‌کند؛ برای استفاده در تولید، یک لایسنس کامل از طریق صفحه لایسنس موقت دریافت کنید.

دریافت یک لایسنس رایگان و کشف بیشتر

با درخواست یک لایسنس موقت، می‌توانید تمام عملکردها را آزمایش کنید: https://purchase.aspose.com/temporary-license/

موارد مرتبط