首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP -将单字节转换为整数(PCX图形格式)

PHP -将单字节转换为整数(PCX图形格式)
EN

Stack Overflow用户
提问于 2012-02-20 22:42:50
回答 2查看 1.7K关注 0票数 1

我正在做一个项目,涉及直接与斑马打印机对话。目前,我正在尝试使用名为"ztools“的工具将图像转换为GRF格式。ZTools看起来很古老,并不总是正确地转换图形。

我已经开始挖掘关于它正在转换的PCX文件格式的信息,现在我发现自己进入了字节世界。这是我目前的推荐人:PCX Technical Reference

所以,我有一个从photoshop中保存的基本PCX文件,它是2x2的,看起来像这样:

代码语言:javascript
复制
10
01

然而,这就是我被卡住的地方。我从来没有处理过字节,正在尝试使用fopen(" file ","rb");和fread用PHP读取pcx文件。然而,似乎无论我做什么,我都会得到一堆零。有人知道我需要做什么才能将字节转换成与之等价的数字吗?

这是我的弱尝试:

代码语言:javascript
复制
<?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);
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-20 23:59:49

我可以使用下面的代码准确地获取标题信息:

代码语言:javascript
复制
<?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";
}*/

但是,我仍然在尝试解析图像数据。

这当前返回以下内容:

代码语言:javascript
复制
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

标题信息是正确的,但我不确定填充后的数据。

在这种情况下运行的图形是4x2-0表示白色,1表示黑色

代码语言:javascript
复制
0101
1010
票数 3
EN

Stack Overflow用户

发布于 2012-02-20 22:51:27

试试这个:

代码语言:javascript
复制
while (!feof($handle)) {
    $contents = fread($handle, 1);
    $contents = $contents && 0xFF;
    echo $contents;
    $content .= $contents;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9362954

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档