2

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

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

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

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

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

我想像这样定义相应的字符:

0xFF & $pixel

它不起作用。

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

谢谢任何人。

4

1 回答 1

5

使用打包功能:

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
于 2013-03-30T04:21:35.323 回答