Aktueller Standort: Startseite> Neueste Artikel> Verwenden Sie Pack (), um Bild-/Audio -Metadaten -Header -Informationen zu erstellen

Verwenden Sie Pack (), um Bild-/Audio -Metadaten -Header -Informationen zu erstellen

M66 2025-05-29

Bei der Verarbeitung von Binärdaten bietet PHP eine sehr leistungsstarke Funktion - pack () . Es kann Daten gemäß dem angegebenen Format in binäre Zeichenfolgen verpacken, das sehr nützlich ist, um Metadaten -Header -Informationen für Mediendateien wie Bilder, Audio usw. zu erstellen.

Was ist pack () ?

Die grundlegende Syntax der Funktion pack () lautet wie folgt:

 string pack(string $format, mixed ...$values)
  • $ format ist eine Formatzeichenfolge, die angibt, wie jeder Wert in binär konvertiert werden soll.

  • $ values ​​ist ein oder mehrere Werte, die konvertiert werden müssen.

Gemeinsame Formatzeichen umfassen:

  • C : Unsignierte Zeichen (8 Bit)

  • N : Nicht signierte kurze Ganzzahl (16-Bit, Big-Endian)

  • V : nicht signierte kurze Ganzzahl (16-Bit, Kleinanleiter)

  • N : Unsigned Long Ganzzahl (32-Bit, Big Endian)

  • V : Unsigned Long (32-Bit, Kleinanleiter)

  • A : NUL füllt die Zeichenfolge

  • A : Space Filling String

Beispiel 1: Erstellen von Headerinformationen der WAV -Audiodatei

Der Dateikopf einer WAV-Datei folgt dem Riff-Format und besteht im Allgemeinen aus einem 44-Byte-Header. Hier ist ein Beispiel für eine minimale WAV -Datei -Header -Konstruktion:

 <?php
$sampleRate = 44100;
$bitsPerSample = 16;
$channels = 2;
$dataSize = 100000; // Audiodatengröße,Annehmen 100000 Byte
$byteRate = $sampleRate * $channels * $bitsPerSample / 8;
$blockAlign = $channels * $bitsPerSample / 8;

// Struktur WAV Datei -Header
$header = pack(
    'A4VVA4A4VVvvVVvvA4V',
    'RIFF',                // ChunkID
    36 + $dataSize,        // ChunkSize
    0x45564157,            // Format 'WAVE'
    'fmt ',                // Subchunk1ID
    16,                    // Subchunk1Size (PCM)
    1,                     // AudioFormat (1 = PCM)
    $channels,             // NumChannels
    $sampleRate,           // SampleRate
    $byteRate,             // ByteRate
    $blockAlign,           // BlockAlign
    $bitsPerSample,        // BitsPerSample
    'data',                // Subchunk2ID
    $dataSize              // Subchunk2Size
);

// Ausgabe als tatsächliche Datei
file_put_contents('output.wav', $header);
?>

Das Skript erstellt einen Ausgangs -WAV -Dateiheader, den Sie dann die tatsächlichen Audiodaten anschließen können, um eine spielbare WAV -Datei zu generieren.

Beispiel 2: Erstellen Sie den Datei -Header des BMP -Bildes

BMP -Dateien verwenden auch feste Format -Headers, die mit Pack () konstruiert werden können.

 <?php
$width = 100;
$height = 100;
$bitsPerPixel = 24;
$rowSize = (int)(($bitsPerPixel * $width + 31) / 32) * 4;
$imageSize = $rowSize * $height;
$fileSize = 54 + $imageSize; // 54 Byte的头部 + Bilddaten

$header = pack(
    'A2VvvVVVVvvVVVV',
    'BM',             // Signature
    $fileSize,        // File size
    0,                // Reserved1
    0,                // Reserved2
    54,               // Offset to image data
    40,               // Info header size
    $width,           // Width
    $height,          // Height
    1,                // Planes
    $bitsPerPixel,    // Bits per pixel
    0,                // Compression (none)
    $imageSize,       // Image size
    2835,             // X pixels per meter (72 DPI)
    2835,             // Y pixels per meter (72 DPI)
    0,                // Colors used
    0                 // Important colors
);

// Header ausgeben zur Datei ausgeben
file_put_contents('output.bmp', $header);
?>

Anschließend können Sie jede Zeile von Pixeldaten ausfüllen (beachten Sie, dass jede BMP -Zeile 4 Bytes ausgerichtet sein muss), um die Bilddatei zu vervollständigen.

Dinge zu beachten

  1. Byte Order Problem : Multi-Byte-Nummern sollten die Plattform-Endreihenfolge in Betracht ziehen und V oder N zur Kontrolle (Little Endian oder Big Endian) verwenden.

  2. Ausrichtungsanforderungen : BMP, WAV und andere Formate haben strenge Anforderungen an die Feldausrichtung und die strukturelle Ordnung. Bei der Verwendung von pack () müssen Sie sicherstellen, dass die Felder genau entsprechen.

  3. Debug -Ausgabe : Sie können Bin2hex () oder pack () verwenden, um festzustellen, ob die verpackten Ergebnisse den Erwartungen entsprechen.

  4. Konstrukte komplexe Datei -Header : Kann manuell analysiert und in Pack () -Anrufe in Kombination mit offiziellen Formatspezifikationen konvertiert werden. Um beispielsweise einen IHDR -Block eines ID3V2 -Audiokopfes oder PNG zu generieren, konsultieren Sie unbedingt die entsprechenden Dokumente.

Abschluss