我正在使用php
和javascript
开发基于桌面的应用程序,在这里我需要以抖动格式打印人物图像。如question所示。我有将rgb
图像转换为抖动图像的图像的解决方案。这就是转换code。如果要通过斑马打印机打印图像,则需要将该抖动图像转换为grf
。在下面的php
代码中
$photo_url="";
if(isset($_GET['photo'])){
$photo_url=$_GET['photo'];
}
function image2grf($filename='photo_url', $targetname = 'R:IMAGE.GRF')
{
$info = getimagesize($filename);
$im = imagecreatefrompng($filename);
$width = $info[0]; // imagesx($im);
$height = $info[1]; // imagesy($im);
$depth = $info['bits'] ?: 1;
$threshold = $depth > 1 ? 100 : 0;
$hexString = '';
$byteShift = 7;
$currentByte = 0;
// create a gd indexed color converter
$converter = new GDIndexedColorConverter();
// the color palette
$palette = array(
array(0, 0, 0),
array(255, 255, 255),
array(0, 0, 0),
array(0, 0, 0),
array(0, 0, 0)
);
// convert the image to indexed color mode
$photo_url = $converter->convertToIndexedColor($im, $palette, 0.8);
// iterate over all image pixels
for ($y = 0; $y < $height; $y++) {
for ($x = 0; $x < $width; $x++) {
$color = imagecolorat($im, $x, $y);
// $color = imagetruecolortopalette($photo_url, true, 2);
// compute gray value from RGB color
if ($depth > 1) {
$value = max($color >> 16, $color >> 8 & 255, $color & 255);
} else {
$value = $color;
}
// set (inverse) bit for the current pixel
$currentByte |= (($value > $threshold ? 1 : 0) << $byteShift);
$byteShift--;
// 8 pixels filled one byte => append to output as hex
if ($byteShift < 0) {
$hexString .= sprintf('%02X', $currentByte);
$currentByte = 0;
$byteShift = 7;
}
}
// append last byte at end of row
if ($byteShift < 7) {
$hexString .= sprintf('%02X', $currentByte);
$currentByte = 0;
$byteShift = 7;
}
$hexString .= PHP_EOL;
}
// compose ZPL ~DG command
$totalBytes = ceil(($width * $height) / 8);
$bytesPerRow = ceil($width / 8);
return sprintf('~DG%s,%05d,%03d,' . PHP_EOL, $targetname, $totalBytes, $bytesPerRow) . $hexString;
}
// Usage:
print "^XA N ^XZ" . PHP_EOL;
print image2grf($photo_url, 'R:SAMPLE.GRF');
它将捕获的png
图像转换为grf
并存储在变量R:SAMPLE.GRF
中,并按照指定的上一个问题使用javascript
打印下面的图像(指定了链接以上)。
在解决方案中,它将rgb
图像转换为抖动图像,但是我想以grf
格式保存该图像,然后只有我才能通过斑马打印机打印抖动图像。
帮我解决这个问题