Example #1
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);
 }
Example #2
0
 /**
  * Write data to byte
  * 
  * @param QR_BitBuffer $buffer The data to write into byte
  * 
  * @see QR_Byte::write()
  */
 public function write(QR_BitBuffer $buffer)
 {
     for ($i = 0; $i < strlen($this->data); $i++) {
         $buffer->put(ord($this->data[$i]), 8);
     }
 }