လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> ရုပ်ပုံ / အသံ Metadata header header အချက်အလက်များကိုဖန်တီးရန် Pack () ကိုသုံးပါ

ရုပ်ပုံ / အသံ Metadata header header အချက်အလက်များကိုဖန်တီးရန် Pack () ကိုသုံးပါ

M66 2025-05-29

Binary Data ကိုထုတ်ပေးသည့်အခါ PHP သည်အလွန်အစွမ်းထက်သော function ကိုထောက်ပံ့ပေးသည် - Pack () ။ Metadata header header and format များဖန်တီးရန်အတွက် Metadata header information ကိုဖန်တီးရန် Metadata header header information ကိုဖန်တီးရန် Metadata header information ကိုဖန်တီးရန်အလွန်အသုံးဝင်သည်

အဘယ်အရာကို ထုပ်ပိုး () ?

အထုပ် ၏အခြေခံ syntax သည်အောက်ပါအတိုင်းဖြစ်သည် -

 string pack(string $format, mixed ...$values)
  • $ format သည်တန်ဖိုးတစ်ခုစီကို Binary သို့မည်သို့ပြောင်းလဲသင့်သည်ကိုသတ်မှတ်သည့် format string တစ်ခုဖြစ်သည်။

  • $ တန်ဖိုးများသည် ပြောင်းလဲရန်တန်ဖိုးတစ်ခုသို့မဟုတ်တစ်ခုထက်ပိုသောတန်ဖိုးများဖြစ်သည်။

ဘုံပုံစံဇာတ်ကောင်များတွင်:

  • : လက်မှတ်မထိုးထားသောအက္ခရာများ (8 bits)

  • N : IFFIGNED မတိုသောကိန်း (16-bit, big-endian)

  • v : လက်မှတ်မထိုးထားသောကိန်းတို (16-bit, Small-endian)

  • N : လက်မှတ်မထိုးထားသောရှည်လျားသောကိန်းဂဏန်း (32-bit, big endian)

  • v : လက်မှတ်မထိုးထားသောရှည်လျားသော (32-bit, အသေးစား - endian)

  • A : nul string ကိုဖြည့်

  • A : Space သည် string ကိုဖြည့်သည်

ဥပမာ 1 - WAV အသံဖိုင်၏ header အချက်အလက်များဖန်တီးခြင်း

WAV ဖိုင်၏ဖိုင် header သည် riff format ကိုအောက်ပါအတိုင်းလိုက်နာပြီးယေဘုယျအားဖြင့် 44-byte header ဖြင့်ဖွဲ့စည်းထားသည်။ ဤနေရာတွင်အနည်းငယ်မျှသာ WAV ဖိုင်ခေါင်းစဉ်ဆောက်လုပ်ရေး၏ဥပမာတစ်ခုဖြစ်သည်။

 <?php
$sampleRate = 44100;
$bitsPerSample = 16;
$channels = 2;
$dataSize = 100000; // အသံဒေတာအရွယ်အစား,မှတ်ယူ 100000 ဒရယ်
$byteRate = $sampleRate * $channels * $bitsPerSample / 8;
$blockAlign = $channels * $bitsPerSample / 8;

// ဆောက်လုပ်ပုံ WAV header ဖိုင် 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
);

// အမှန်တကယ်ဖိုင်အဖြစ် output ကို
file_put_contents('output.wav', $header);
?>

script သည် playable wav file ကိုထုတ်လုပ်ရန်အမှန်တကယ်အသံအချက်အလက်များကိုပူးတွဲပေးနိုင်သည့် output header ကိုဖန်တီးနိုင်သည်။

ဥပမာ 2 - BMP Image ၏ဖိုင်ခေါင်းစဉ်ကိုတည်ဆောက်ပါ

BMP ဖိုင်များသည် pack ကို အသုံးပြု. တည်ဆောက်နိုင်သောပုံသေ format headers များကိုလည်းအသုံးပြုသည်။

 <?php
$width = 100;
$height = 100;
$bitsPerPixel = 24;
$rowSize = (int)(($bitsPerPixel * $width + 31) / 32) * 4;
$imageSize = $rowSize * $height;
$fileSize = 54 + $imageSize; // 54 ဒရယ်的头部 + ပုံရိပ်ဒေတာ

$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
);

// file မှ output header
file_put_contents('output.bmp', $header);
?>

ထို့နောက် pixel data တစ်ခုချင်းစီကိုသင်ဖြည့်စွက်နိုင်သည် (BMP ၏အတန်းတစ်ခုစီသည် 4 bmp တစ်ခုစီသည် 4 bytes align-bytes align လုပ်ရမည်) ကိုသတိပြုပါ။

မှတ်သားရန်အရာ

  1. Byte အမိန့်ပြ problem နာ

  2. Alignment လိုအပ်ချက်များ - BMP, WAV နှင့်အခြားအမျိုးအစားများတွင်ကွင်းပြင်နှင့်ဖွဲ့စည်းတည်ဆောက်ပုံဆိုင်ရာအမိန့်များတွင်တင်းကျပ်သောလိုအပ်ချက်များကိုရှိသည်။ Pack ကိုအသုံးပြုတဲ့အခါ () , လယ်ကွင်းတွေဟာတိကျမှုနဲ့ကိုက်ညီအောင်သေချာအောင်လုပ်ရမယ်။

  3. Debug output : ထုပ်ပိုးရတဲ့ရလဒ်တွေဟာမျှော်လင့်ချက်တွေရှိမရှိကြည့်ဖို့ bin2hex () ()) ကိုသုံးနိုင်တယ်။

  4. ရှုပ်ထွေးသော File Headers များဖြင့်တည်ဆောက်ခြင်း - တရားဝင် format on သတ်မှတ်ချက်များနှင့်ပေါင်းစပ်ခြင်းနှင့် pack () ခေါ်ဆိုမှုများကိုကိုယ်တိုင်ခွဲခြမ်းစိတ်ဖြာနိုင်သည်။ ဥပမာအားဖြင့် ID3V2 Audio Head (သို့) PNG တစ်ခု၏ iHDR ကိုထုတ်လွှင့်ရန်သက်ဆိုင်ရာစာရွက်စာတမ်းများနှင့်တိုင်ပင်ရန်သေချာပါစေ။

ကောက်ချက်