编辑: 经过一天搞乱一切之后。我的问题是sprintf。我原本以为我的循环错了。
sprintf('%02x',base_convert($binary, 2, 16));
我不得不使用s而不是x来获得正确的输出。 X正在将FF转换为00,但其他转换为罚款。这是我过去经历wbmp的循环,请注意我重新调整了图像的大小,使其/ 8,24。
$w = imagesx($im);
$h = imagesy($im);
for($x = 0; $x <= $w; $x++)
{
$image = "";
$cntr = 0;
for($y = 0; $y <= $h; $y++)
{
$rgb = imagecolorat($im, $x, $y);
$image .= ($rgb == "") ? 0 : $rgb; //resizing causes value to return blank
if(strlen($image) == 8)
{
$imgHex = sprintf('%02s',base_convert($image, 2, 16));
$cntr++;
$line[$lineNum] .= $imgHex;
if($cntr == 3)
{
$lineNum++;
$cntr = 0;
}
$image = "";
}
}
$lineNum = 0;
}
答案 0 :(得分:0)
要将数字转换为字节,您可以尝试使用0xFF对其进行AND运算。这将切断一个字节范围之外的所有位。
slice |= 0xFF & ((v ? 1 : 0) << (7 - b));