在PHP中定义一个unsigned CHAR

时间:2013-03-29 17:45:18

标签: php types integer imagemagick int

一个简单的简单问题,但我找不到php网站上的文档。

我正在使用ImageMagick,我将像素导出为CHAR

$pixels = $im->exportImagePixels(0, 0, $im->getImageGeometry()['width'], $im->getImageGeometry()['height'], "RGB", Imagick::PIXEL_CHAR);

我需要定义新的像素,我希望它们是CHAR类型。 当我在sigle像素上使用var_dump时,PHP将它们识别为整数。 现在我看到php没有CHAR数据类型,所以我想定义一个两字节无符号整数,如下所示:

我将像素定义为$ pixel = 134;范围从0到255

我想要定义相应的字符:

0xFF & $pixel

它不起作用。

任何人都知道为什么?或者我该怎么办? 我尝试使用PIXEL_FLOAT数据类型,但它确实很重,它会在更大的图片上崩溃我的脚本。

谢谢任何人。

1 个答案:

答案 0 :(得分:5)

使用pack功能:

function printPacked($base, $packed_value)
{
    $value = unpack($base, $packed_value);
    printf("%08x \n", $value[1]);
}

// Unsigned char
//
$oldpixel = pack( "C", 0xFF );
printPacked("C", $oldpixel);

// Unsigned short, little-endian
//
$newpixel = pack( "v", 0xCDEF );
printPacked("v", $newpixel);

// Assign the short to the char
//
$oldpixel = $newpixel;
printPacked("C", $oldpixel);

// Mask operation on the char
//
$oldpixel = $oldpixel & pack( "C", 0xAB );                                      
printPacked("C", $oldpixel);

上述程序的输出是:

000000ff 
0000cdef 
000000ef 
000000ab