'011000100', '$' => '010101000', '%' => '000101010', '*' => '010010100', // Start/stop marker '+' => '010001010', '|' => '010000101', '.' => '110000100', '/' => '010100010', '-' => '010000101', '0' => '000110100', '1' => '100100001', '2' => '001100001', '3' => '101100000', '4' => '000110001', '5' => '100110000', '6' => '001110000', '7' => '000100101', '8' => '100100100', '9' => '001100100', 'A' => '100001001', 'B' => '001001001', 'C' => '101001000', 'D' => '000011001', 'E' => '100011000', 'F' => '001011000', 'G' => '000001101', 'H' => '100001100', 'I' => '001001100', 'J' => '000011100', 'K' => '100000011', 'L' => '001000011', 'M' => '101000010', 'N' => '000010011', 'O' => '100010010', 'P' => '001010010', 'Q' => '000000111', 'R' => '100000110', 'S' => '001000110', 'T' => '000010110', 'U' => '110000001', 'V' => '011000001', 'W' => '111000000', 'X' => '010010001', 'Y' => '110010000', 'Z' => '011010000', ); /* * const bar proportions */ const NARROW_BAR = 20; const WIDE_BAR = 55; const QUIET_BAR = 35; /* * Set the data * * @param mixed data - (int or string) Data to be encoded * @return instance of \emberlabs\Barcode\BarcodeInterface * @return throws \OverflowException */ public function setData($data) { $this->data = $data; } /* * Get a binary map value */ private function getMap($char) { return self::$binMap[$char] ?: self::$this->binMap[' ']; } /* * Draw the image * * Based on the implentation PHP Barcode Image Generator v1.0 * by Charles J. Scheffold - cs@sid6581.net * It was released into the Public Domain by its creator. * * @return void */ public function draw() { // I know, lots of junk. $data = '*' . strtoupper(ltrim(rtrim(trim($this->data), '*'), '*')) . '*'; // Length of data X [ 6 narrow bars + 3 wide bars + A single Quiet stop ] - a single quiet stop $pxPerChar = (strlen($data) * ((6 * self::NARROW_BAR) + (3 * self::WIDE_BAR) + self::QUIET_BAR)) - self::QUIET_BAR; $widthQuotient = $this->x / $pxPerChar; // Lengths per type $narrowBar = (int) (self::NARROW_BAR * $widthQuotient); $wideBar = (int) (self::WIDE_BAR * $widthQuotient); $quietBar = (int) (self::QUIET_BAR * $widthQuotient); $imageWidth = (strlen($data) * ((6 * $narrowBar) + (3 * $wideBar) + $quietBar)) - $quietBar; // Do we have degenerate rectangles? if ($narrowBar < 1 || $wideBar < 1 || $quietBar < 1 || $narrowBar == $quietBar || $narrowBar == $wideBar || $wideBar == $quietBar) { throw new \OverflowException("You need to specify a bigger width to properly display this barcode"); } $currentBarX = (int)(($this->x - $imageWidth) / 2); $charAry = str_split($data); $this->img = @imagecreate($this->x, $this->y); if (!$this->img) { throw new \RuntimeException("Code39: Image failed to initialize"); } // Grab our colors $white = imagecolorallocate($this->img, 255, 255, 255); $black = imagecolorallocate($this->img, 0, 0, 0); $color = $black; foreach($charAry as $_k => $char) { $code = str_split($this->getMap($char)); $color = $black; foreach($code as $k => $bit) { // Narrow bar if ($bit == '0') { imagefilledrectangle($this->img, $currentBarX, 0, ($currentBarX + $narrowBar), ($this->y - 1), $color); $currentBarX += $narrowBar; } // Wide Bar elseif($bit == '1') { imagefilledrectangle($this->img, $currentBarX, 0, ($currentBarX + $wideBar), ($this->y - 1), $color); $currentBarX += $wideBar; } $color = ($color == $black) ? $white : $black; } // Skip the spacer on the last run if ($_k == (sizeof($charAry) - 1)) { break; } // Draw spacer imagefilledrectangle($this->img, $currentBarX, 0, ($currentBarX + $quietBar), ($this->y - 1), $white); $currentBarX += $quietBar; } } } ?>