Уважаемые пользователи Голос!
Сайт доступен в режиме «чтение» до сентября 2020 года. Операции с токенами Golos, Cyber можно проводить, используя альтернативные клиенты или через эксплорер Cyberway. Подробности здесь: https://golos.io/@goloscore/operacii-s-tokenami-golos-cyber-1594822432061
С уважением, команда “Голос”
GOLOS
RU
EN
UA
vp-webdev
6 лет назад

Создание Bar-кодов средствами PHP.

В прошлый раз я рассказал о создании QR-кодов. Теперь на очереди Bar-коды.


Сразу скажу - QR круче:)
В отличии от QR - Bar коды бывают разными, могут шифровать разные наборы символов, имеют разный размер и даже немного по-разному отображаются.
Если нужно зашифровать ссылку или текст - это только QR. Он "раздуется", но вместит в себя всю информацию. Bar-у если подсунуть лишние символы - он просто не отобразится.
В первую очередь подключаем класс Barcode

include('Barcode.php');

Сам класс можно скачать тут
Затем указываем параметры для генерации кода:

$fontSize = 10;   // размер шрифта, если используется hri
$marge    = 10;   // расстояние между кодом и hri
$x        = 200;  // центр bar-кода по оси x (px)
$y        = 200;  // центр bar-кода по оси y (px)
$height   = 50;   // высота bar-кода (px)
$width    = 2;
$angle    = 0;   // угл поворота. Например 90

Далее указываем что и как будем шифровать.
Например

$code     = 'golos.io';
$type     = 'code93';

Шрифт я положил в папку со скриптом

$font     = './arial.ttf';

Для прорисовки линий создадим вспомогательную функцию:

function drawCross($im, $color, $x, $y){
    imageline($im, $x - 10, $y, $x + 10, $y, $color);
    imageline($im, $x, $y- 10, $x, $y + 10, $color);
}

Теперь, собственно, отрисовка.
Зададим холст размерами 400х400 пикселей и зальём его белым цветом

$im     = imagecreatetruecolor(400, 400);
$black  = ImageColorAllocate($im,0x00,0x00,0x00);
$white  = ImageColorAllocate($im,0xff,0xff,0xff);
$red    = ImageColorAllocate($im,0xff,0x00,0x00);
$blue   = ImageColorAllocate($im,0x00,0x00,0xff);
imagefilledrectangle($im, 0, 0, 400, 400, $white);

Для создания кода передадим ему холст, цвет отрисовки(черный), координаты, угол, тип и шифруемую строку.

$data = Barcode::gd($im, $black, $x, $y, $angle, $type, ['code'=>$code], $width, $height);

Пишем HRI

if ( isset($font) ){
    $box = imagettfbbox($fontSize, 0, $font, $data['hri']);
    $len = $box[2] - $box[0];
    Barcode::rotate(-$len / 2, ($data['height'] / 2) + $fontSize + $marge, $angle, $xt, $yt);
    imagettftext($im, $fontSize, $angle, $x + $xt, $y + $yt, $blue, $font, $data['hri']);
}

Если хотим обозначить границы bar-кода - добавляем код:

for($i=1; $i<5; $i++){
    drawCross($im, $blue, $data['p'.$i]['x'], $data['p'.$i]['y']);
}

Обозначение центра bar-кода:

imageline($im, $x, 0, $x, 400, $red);
imageline($im, 0, $y, 400, $y, $red);

Ну и создание изображения:

header('Content-type: image/gif');
imagegif($im);
imagedestroy($im);

На выходе будем иметь следующее:

Типы шифрования.

В библиотеке доступны следующие типы:

  • std25 - используется для хранения десятичных цифр и использует всего 5 бит.
  • int25 - используется для хранения десятичных цифр.
  • ean8 - произошел от более длинного кода EAN-13.Он предназначен для использования на маленьких упаковках.
  • ean13 - 13-циферный (12 + контрольная цифра) стандарт штрих-кодов.
  • code11 - может кодировать строки произвольной длины (однако Labeljoy ограничивает их 255 знаками), состоящие из цифр 0-9 и символа дефис (-).
  • code39 - штрих-кодовое обозначение переменной длин. Спецификация Code 39 определяет 43 символа: заглавные латинские буквы (от A до Z), цифры (от 0 до 9) и специальные символы (-, ., $, /, +, %, и пробел).
  • code93 - штрих-кодовое обозначение, разработанная в 1982 году компанией Intermec для обеспечения большей плотности и безопасности по сравнению с Code 39.
  • code128 - штрих-код очень высокой плотности. Используется для алфавитно-цифровых и цифровых штрих-кодов. Можно закодировать все 128 ASCII символов.
  • codabar - может кодировать цифры и следующие специальные знаки: – . $ : / +. Текст должен быть разделен в начале и конце заглавными буквами A, B C или D.
  • msi - один из первых типов штрих-кодов, используется в США
  • datamatrix - 2D штрих-код состоящий из прямоугольников, используемый в разных целях, в частности в пищевой промышленности.
205
295.028 GOLOS
На Golos с August 2017
Комментарии (4)
Сортировать по:
Сначала старые