用于PHP中热敏打印机的PNG到单色位图?

时间:2012-04-02 23:13:25

标签: php image-conversion thermal-printer

我正在尝试为我的热敏打印机动态生成QR码。为此,我必须向我的服务器发送请求(比如http://domain.example.com/qr?url=)。

然后,此页面应以PNG格式从Google获取二维码。到目前为止一切都很好。

但现在困难的部分。完成后,我需要将其转换为this的行。

我之前发现this问题,但是,与他不同,我需要在网上进行。我没有权限在服务器上安装PHP模块,所以对我来说最好的选择是phMagik,但问题是我知道这不支持可以提供给正常Linux或Windows版本ImageMagik的额外参数,详见this documentation page

所以有人知道如何解决这个问题吗?从长远来看,我希望自己制作Little Printer版本。感谢。

1 个答案:

答案 0 :(得分:0)

只需使用正常的Linux版本的ImageMagick - 使用exec()

调用它

如果您无权在服务器上安装东西,那么它会变得更复杂一些。如果您安装了GD(您可能已经安装),则可以使用http://php.net/imagecreatefrompng来获取像素数据。然后,您可以手动创建您正在寻找的东西,如下所示:

$file = "/path/to/png.png"; 
$image = ImageCreateFromPng($file); 
list($w, $h) = GetImageSize($file); 

$pixels = array();
for ($x=0; $x<$w; $x++){
for ($y=0; $y<$h; $y++){
    $rgb = ImageColorAt($image, $x, $y); 
    $r = ($rgb >> 16) & 0xFF;
    $g = ($rgb >> 8) & 0xFF;
    $b = $rgb & 0xFF;
    $pixels = '0x'.sprintf('%02x', ($r+$g+$b)/3); # store the average of r/g/b
}
}

echo "static unsigned char __attribute__ ((progmem)) adalogo [] = {\n";
echo implode(', ', $pixels);
echo "};\n";

您需要先获取实际的PNG - 如果您启用了文件包装,则可以通过URL获取它:

$file = "http://url.com/to/png.png"; 
$image = ImageCreateFromPng($file); 

或者首先在命令行上使用PHP抓取图像:

$file = "/path/to/png.png"; 
exec("php /path/to/script.php > $file");
$image = ImageCreateFromPng($file);