Hoe ruwe Big-Endian-waarden te converteren in Python
PSD-bestanden slaan de meeste binaire velden op in big-endian bytevolgorde. Wanneer je zelf een ruwe veld moet decoderen — bijvoorbeeld vanuit de ruwe bytes van een afbeeldingsresource — leest BigEndianBitConverter een big-endian 32-bits geheel getal direct uit een byte-array.
Stapsgewijze handleiding
Stap 1: Installeer het pakket
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:$PYTHONPATHStap 2: Importeer de vereiste klassen
from aspose_psd_foss.psdimage import PsdImage
from aspose_psd_foss.bigendianbitconverter import BigEndianBitConverterStap 3: Lees de ruwe bytes van een resource
PsdImage.parsed_resources retourneert de onderliggende UnknownResource objecten, elk de ruwe payload beschikbaar stellend via data:
image = PsdImage.load("input.psd")
for resource in image.parsed_resources:
raw = resource.dataStap 4: Decodeer een 32-Bit Big-Endian-waarde
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) leest 4 bytes beginnend bij offset en combineert ze met het meest significante byte eerst.
Veelvoorkomende problemen en oplossingen
IndexError bij het aanroepen to_int32. De byte array moet minstens 4 bytes beschikbaar hebben vanaf offset — controle len(byte_array) >= offset + 4 voor het aanroepen.
Waarden lijken byte-swapped. Bevestig dat je niet per ongeluk ergens in je eigen code een little-endian conversie gebruikt — PSD resource en header fields zijn consequent big-endian, wat precies is wat BigEndianBitConverter aanneemt.
Veelgestelde vragen
Ondersteunt BigEndianBitConverter andere integergroottes?
In deze FOSS-build biedt BigEndianBitConverter alleen to_int32 — voor 16-bit of 64-bit big-endian-waarden decodeer je de bytes handmatig met de ingebouwde int.from_bytes(data, byteorder="big") van Python.
Heb ik dit nodig voor normale documentbewerking?
Nee — BigEndianBitConverter is een low-level hulpprogramma voor het werken met ruwe bytes die je zelf hebt verkregen (bijvoorbeeld van een niet-herkende afbeeldingresource). Typisch laden, bewerken en opslaan (zie Werken met de Core API) vereist het nooit direct.