PHP-単一バイトを整数に変換する(PCXグラフィック形式)
質問
私はゼブラプリンターと直接話すことを含むプロジェクトに取り組んでいます。現在、「Ztools」と呼ばれるものを使用して、画像をGRF形式に変換しようとしています。 Ztoolsは古代のように見え、常にグラフィックを正しく変換するとは限りません。
私はそれが変換されているPCXファイル形式の情報を掘り始め、今では自分自身をバイトの土地に見つけました。これは現時点での私の参照です: PCXテクニカルリファレンス
だから、私は2x2のPhotoshopから保存した基本的なPCXファイルを持っていて、次のようになります。
10
01
しかし、これは私が立ち往生している場所です。私はバイトを使用したことがなく、fopen( "file"、 "rb")を使用してPHPを使用してPCXファイルを読み込もうとしています。そしてフリード。しかし、私が何をしても、私はたくさんのゼロを手に入れます。バイトをそこに数値等価物に変換するために私がする必要があることを知っている人はいますか?
これは私の弱い試みです:
<?php
$file = "test.pcx";
// Open the file for binary reading (b flag)
$handle = fopen($file, "rb");
while (!feof($handle)) {
$contents = fread($handle, 1);
$contents = $contents >> 8;
echo $contents >> 8;
$content .= $contents;
}
fclose($handle);
解決
これでヘッダー情報を正確に取得することができました。
<?php
$file = "test.pcx";
function intToBits($int) {
$return = "00000000";
if ($int <= 255 && $int >= 0) {
$check = 128;
$x = 0;
while ($int > 0) {
if ($int > $check) {
$return[$x] = "1";
}
$int -= $check;
$check /= 2;
$x++;
}
}
return $return;
}
// Open the file for binary reading (b flag)
$handle = fopen($file, "rb");
$PCX_MAP = array();
$PCX_MAP['Manufacturer'][0] = 1; // Manufacturer
$PCX_MAP['Version'] = 1; // Version Info
$PCX_MAP['Encoding'] = 1; // Encoding
$PCX_MAP['BitsPerPixel'] = 1; // BitsPerPixel
$PCX_MAP['Xmin'] = 2; // Window Xmin
$PCX_MAP['Ymin'] = 2; // Window Ymin
$PCX_MAP['Xmax'] = 2; // Window Xmax
$PCX_MAP['Ymax'] = 2; // Window Ymax
$PCX_MAP['HDpi'] = 2; // HDpi (Resolution)
$PCX_MAP['VDpi'] = 2; // VDpi (Resolution)
$PCX_MAP['colormap'] = 48; // Colormap
$PCX_MAP['Reserved'] = 1; // Reserved = 0
$PCX_MAP['NumberColorPlanes'] = 1; // Number of color planes
$PCX_MAP['BytesPerLine'] = 2; // Bytes Per Line
$PCX_MAP['PalleteInfo'] = 2; // Palette Info
$PCX_MAP['HorizontalScreenSize'] = 2; // H Screen Size
$PCX_MAP['VerticalScreenSize'] = 2; // V Screen Size
$PCX_MAP['Filler'] = 54; // Filler
$length = reset($PCX_MAP);
while (!feof($handle)) {
if ($length !== false) {
$contents = fread($handle, $length);
$contents = ord($contents);
echo key($PCX_MAP) . " : {$contents}\n";
$content .= $contents;
$length = next($PCX_MAP);
}
else {
// Get the rest 1 By 1
$contents = fread($handle, 1);
$contents = ord($contents);
$contents = intToBits($contents);
echo $contents ."\n";
}
}
fclose($handle);
/*
$data = file_get_contents($file);
for($i = 0; $i < strlen($data); ++$i) {
$char = ord($data[$i]);
echo "Byte $i: $char\n";
}*/
しかし、私はまだ画像データを解析しようとしています。
これは現在これを返しています:
Manufacturer : 10
Version : 5
Encoding : 1
BitsPerPixel : 1
Xmin : 0
Ymin : 0
Xmax : 3
Ymax : 1
HDpi : 200
VDpi : 200
colormap : 15
Reserved : 0
NumberColorPlanes : 1
BytesPerLine : 2
PalleteInfo : 1
HorizontalScreenSize : 0
VerticalScreenSize : 0
Filler : 0
10000000
11000000
11111110
00000000
11000000
11111110
00000000
ヘッダー情報は正しいですが、フィラー後のデータについてはわかりません。
この例で実行されたグラフィックは4 x 2-0が白、1は黒を意味します
0101
1010
他のヒント
これを試して:
while (!feof($handle)) {
$contents = fread($handle, 1);
$contents = $contents && 0xFF;
echo $contents;
$content .= $contents;
}
所属していません StackOverflow