vp-webdev
7 лет назадСоздание 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 штрих-код состоящий из прямоугольников, используемый в разных целях, в частности в пищевой промышленности.