Exemplo n.º 1
0
 /**
  * Singleton pattern
  * 
  * @return QR_RSBlock
  */
 public static function getInstance()
 {
     if (!self::$instance) {
         self::$instance = new self(0, 0);
     }
     return self::$instance;
 }
Exemplo n.º 2
0
 /**
  * Create a bitmap out of all append data elements
  *
  * @param int $typeNumber          
  * @param int $errorCorrectLevel          
  * @param array $dataList          
  *
  * @throws QR_CodeException
  *
  * @return array
  */
 private function createData($typeNumber, $errorCorrectLevel, $dataList)
 {
     $rsBlocks = QR_RSBlock::getInstance()->getRSBlocks($typeNumber, $errorCorrectLevel);
     $buffer = new QR_BitBuffer();
     for ($i = 0; $i < sizeof($dataList); $i++) {
         $data = $dataList[$i];
         assert($data instanceof QR_Byte);
         $buffer->put($data->getMode(), 4);
         $buffer->put($data->getLength(), QR_Util::getInstance()->getLengthInBits($data->getMode(), $typeNumber));
         $data->write($buffer);
     }
     // calc num max data
     $totalDataCount = 0;
     for ($i = 0; $i < sizeof($rsBlocks); $i++) {
         $totalDataCount += $rsBlocks[$i]->getDataCount();
     }
     if ($buffer->getLengthInBits() > $totalDataCount * 8) {
         throw new QR_CodeException("code length overflow (" . $buffer->getLengthInBits() . " > " . $totalDataCount * 8 . ")");
     }
     // end code
     if ($buffer->getLengthInBits() + 4 <= $totalDataCount * 8) {
         $buffer->put(0, 4);
     }
     // padding
     while ($buffer->getLengthInBits() % 8 != 0) {
         $buffer->putBit(false);
     }
     // padding
     while (true) {
         if ($buffer->getLengthInBits() >= $totalDataCount * 8) {
             break;
         }
         $buffer->put(QR_Code::PAD0, 8);
         if ($buffer->getLengthInBits() >= $totalDataCount * 8) {
             break;
         }
         $buffer->put(QR_Code::PAD1, 8);
     }
     return $this->createBytes($buffer, $rsBlocks);
 }