วิธีแปลงค่า Raw Big-Endian ใน Python
ไฟล์ PSD เก็บฟิลด์ไบนารีส่วนใหญ่ในลำดับไบต์แบบ big-endian เมื่อคุณต้องการถอดรหัสฟิลด์ดิบด้วยตัวเอง — ตัวอย่างเช่น จากไบต์ดิบของทรัพยากรภาพ — BigEndianBitConverter จะอ่านจำนวนเต็ม 32-บิตแบบ big-endian โดยตรงจากอาเรย์ไบต์.
คู่มือแบบทีละขั้นตอน
ขั้นตอนที่ 1: ติดตั้งแพ็กเกจ
git clone https://github.com/aspose-psd-foss/Aspose.PSD-FOSS-for-Python.git
cd Aspose.PSD-FOSS-for-Python
# No packaging manifest is published yet -- run from this folder,
# or add it to PYTHONPATH:
export PYTHONPATH=$PWD:$PYTHONPATHขั้นตอนที่ 2: นำเข้าคลาสที่ต้องการ
from aspose_psd_foss.psdimage import PsdImage
from aspose_psd_foss.bigendianbitconverter import BigEndianBitConverterขั้นตอนที่ 3: อ่านไบต์ดิบของทรัพยากร
PsdImage.parsed_resources คืนค่าอ็อบเจ็กต์ UnknownResource ระดับล่างแต่ละอันโดยเปิดเผย payload ดิบผ่าน data:
image = PsdImage.load("input.psd")
for resource in image.parsed_resources:
raw = resource.dataขั้นตอนที่ 4: ถอดรหัสค่า 32-Bit แบบ Big-Endian
data = bytes([0x00, 0x00, 0x04, 0x10]) # example 4-byte big-endian field
value = BigEndianBitConverter.to_int32(data, 0)
print(f"Decoded value: {value}") # 1040to_int32(byte_array, offset) อ่าน 4 ไบต์เริ่มจาก offset แล้วรวมเข้าด้วยกันโดยเรียงลำดับไบต์ที่สำคัญที่สุดก่อน.
ปัญหาทั่วไปและวิธีแก้
IndexError เมื่อเรียกใช้ to_int32. อาเรย์ไบต์ต้องมีอย่างน้อย 4 ไบต์พร้อมใช้งานเริ่มจาก offset — ตรวจสอบ len(byte_array) >= offset + 4 ก่อนเรียกใช้.
ค่าเหล่านี้ดูเหมือนถูกสลับไบต์. ยืนยันว่าคุณไม่ได้โดยบังเอิญใช้การแปลง little-endian ที่อื่นในโค้ดของคุณ — ทรัพยากร PSD และฟิลด์หัวเรื่องเป็น big-endian อย่างสม่ำเสมอ ซึ่งเป็นสิ่งที่ BigEndianBitConverter สมมติ.
คำถามที่พบบ่อย
BigEndianBitConverter รองรับขนาดจำนวนเต็มอื่น ๆ หรือไม่?
ในรุ่น FOSS นี้, BigEndianBitConverter ให้เฉพาะ to_int32 — สำหรับค่าขนาด 16-bit หรือ 64-bit แบบ big-endian, ให้ถอดรหัสไบต์ด้วยตนเองโดยใช้ Python ที่มี int.from_bytes(data, byteorder="big") ในตัว.
ฉันต้องการสิ่งนี้สำหรับการแก้ไขเอกสารทั่วไปหรือไม่?
ไม่ — BigEndianBitConverter เป็นยูทิลิตี้ระดับล่างสำหรับทำงานกับไบต์ดิบที่คุณได้มาด้วยตนเอง (เช่น จากแหล่งภาพที่ไม่รู้จัก) การโหลด แก้ไข และบันทึกตามปกติ (ดู การทำงานกับ Core API) ไม่จำเป็นต้องใช้โดยตรงเลย.