将png图像转换为grf图像

时间:2019-01-11 07:27:58

标签: javascript php zebra-printers zpl

我正在使用phpjavascript开发基于桌面的应用程序,在这里我需要以抖动格式打印人物图像。如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打印下面的图像(指定了链接以上)。

printed

在解决方案中,它将rgb图像转换为抖动图像,但是我想以grf格式保存该图像,然后只有我才能通过斑马打印机打印抖动图像。

帮我解决这个问题

0 个答案:

没有答案