一个简单的简单问题,但我找不到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数据类型,但它确实很重,它会在更大的图片上崩溃我的脚本。
谢谢任何人。
答案 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