การคลิปภาพและส่งออกเป็นหลายรูปแบบเป็นความต้องการทั่วไปเมื่อสร้างรูปย่อ, ตัวอย่างภาพ หรือสินทรัพย์แบบกำหนดเอง คู่มือนี้แสดงวิธีทำการดำเนินการนั้นโดยใช้ Aspose.Imaging for Python และคลาส RasterImageExporter โดยมุ่งเน้นที่คีย์เวิร์ด คลิปและส่งออกภาพใน Python
ประเด็นสำคัญ
- RasterImageExporter สามารถคลิปสี่เหลี่ยมและเขียนผลลัพธ์ไปยังรูปแบบภาพที่รองรับทั้งหมด
- สี่เหลี่ยมคลิปเดียวกันสามารถนำกลับมาใช้ใหม่ในหลายสิบรูปแบบโดยไม่ต้องโหลดภาพต้นฉบับใหม่
- การตรวจสอบขนาดของภาพที่บันทึกไว้ช่วยยืนยันว่าการคลิปสำเร็จ
- การทำสำเนาอ็อบเจกต์ save‑options ช่วยหลีกเลี่ยงผลข้างเคียงระหว่างรูปแบบต่าง ๆ
- ใบอนุญาตชั่วคราวทำให้สามารถใช้ฟังก์ชันทั้งหมดได้ขณะคุณประเมิน API
ทำไมต้องตัดและส่งออกภาพ
นักพัฒนามักต้องการส่วนที่ถูกตัดจากภาพเพียงส่วนเดียว แต่ต้องส่งมอบส่วนนั้นในหลายประเภทไฟล์สำหรับแพลตฟอร์มต่าง ๆ ก่อนที่ความสามารถนี้จะมีอยู่ คุณต้องโหลด, ตัด, และบันทึกภาพแยกกันสำหรับแต่ละรูปแบบ ซึ่งทำให้การ I/O และการใช้ CPU เพิ่มขึ้น RasterImageExporter ทำให้กระบวนการทำงานง่ายขึ้นโดยการใช้สี่เหลี่ยมตัดเดียวกันกับทุกรูปแบบผลลัพธ์ในลูปเดียว ประหยัดเวลาและลดความซับซ้อนของโค้ด
เริ่มต้นใช้งาน Aspose.Imaging สำหรับ Python
ขั้นแรก ให้ติดตั้งแพ็กเกจ Aspose.Imaging โดยใช้ pip:
pip install aspose-imaging-python-net
สำหรับเอกสารโดยละเอียด, โปรดเยี่ยมชม หน้าผลิตภัณฑ์. ไลบรารีทำงานบนสภาพแวดล้อม Python ใด ๆ ที่รองรับการรวม .NET ผ่าน Python.NET.
วิธีตัดและส่งออกภาพในหลายรูปแบบ
ด้านล่างเป็นตัวอย่างที่ครบถ้วนและแยกส่วนได้ ซึ่งโหลดชุดของภาพทดสอบ กำหนดสี่เหลี่ยมคลิป และบันทึกส่วนที่ถูกคลิปเป็นรูปแบบต่าง ๆ จำนวนสิบเอ็ดรูปแบบ.
ตัวอย่างต่อไปนี้แสดงวิธีการคลิปสี่เหลี่ยมและส่งออกผลลัพธ์เป็นหลายรูปแบบโดยใช้ Python.
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ตรงกับขนาดของสี่เหลี่ยม, เพื่อรับประกันว่าการตัดสำเร็จ - ทำความสะอาด – ไฟล์ที่ตรวจสอบสำเร็จจะถูกลบ, และในที่สุดไดเรกทอรีชั่วคราวจะถูกลบออก.
สรุป
โดยใช้ RasterImageExporter ของ Aspose.Imaging คุณสามารถคลิปพื้นที่สี่เหลี่ยมผืนผ้าได้ครั้งเดียวและส่งออกไปยังรูปแบบภาพที่รองรับทั้งหมดในขั้นตอนเดียว วิธีนี้ช่วยลดการโหลดซ้ำ ลดความซับซ้อนของโค้ด และทำให้ผลลัพธ์สอดคล้องกันในทุกรูปแบบ
คำถามที่พบบ่อย
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/
