php中的C128条码脚本
Posted
技术标签:
【中文标题】php中的C128条码脚本【英文标题】:C128 Barcode script in php 【发布时间】:2015-02-06 09:43:04 【问题描述】:我想在 codeigniter 框架中添加代码 128 自动条形码。我为此使用了 http://davidscotttufts.com/2009/03/31/how-to-create-barcodes-in-php/,但它正在生成 code128B 格式。我也使用了 http://www.barcodephp.com/en/download,但无法在 codeigniter 框架中正确添加类。可以任何人都可以帮助我或建议我 code128 自动条形码 php 脚本。
提前致谢
<?php
// Get thickness parameter from $_GET:
$thickness = ( isset( $_GET["thickness"] ) ? $_GET[ "thickness" ] : 2 );
$text = (isset($_GET["text"])?$_GET["text"]:"00000000024");
//$text=(int)$text;
$size = (isset($_GET["size"])?$_GET["size"]:"30");
$orientation = (isset($_GET["orientation"])?$_GET["orientation"]:"horizontal");
$code_type = (isset($_GET["codetype"])?$_GET["codetype"]:"code128");
$code_string = "";
// Translate the $text into barcode the correct $code_type
if ( strtolower($code_type) == "code128" )
$code_array = array(
0 => '11011001100',
1 => '11001101100',
2 => '11001100110',
3 => '10010011000',
4 => '10010001100',
5 => '10001001100',
6 => '10011001000',
7 => '10011000100',
8 => '10001100100',
9 => '11001001000',
10 => '11001000100',
11 => '11000100100',
12 => '10110011100',
13 => '10011011100',
14 => '10011001110',
15 => '10111001100',
16 => '10011101100',
17 => '10011100110',
18 => '11001110010',
19 => '11001011100',
20 => '11001001110',
21 => '11011100100',
22 => '11001110100',
23 => '11101101110',
24 => '11101001100',
25 => '11100101100',
26 => '11100100110',
27 => '11101100100',
28 => '11100110100',
29 => '11100110010',
30 => '11011011000',
31 => '11011000110',
32 => '11000110110',
33 => '10100011000',
34 => '10001011000',
35 => '10001000110',
36 => '10110001000',
37 => '10001101000',
38 => '10001100010',
39 => '11010001000',
40 => '11000101000',
41 => '11000100010',
42 => '10110111000',
43 => '10110001110',
44 => '10001101110',
45 => '10111011000',
46 => '10111000110',
47 => '10001110110',
48 => '11101110110',
49 => '11010001110',
50 => '11000101110',
51 => '11011101000',
52 => '11011100010',
53 => '11011101110',
54 => '11101011000',
55 => '11101000110',
56 => '11100010110',
57 => '11101101000',
58 => '11101100010',
59 => '11100011010',
60 => '11101111010',
61 => '11001000010',
62 => '11110001010',
63 => '10100110000',
64 => '10100001100',
65 => '10010110000',
66 => '10010000110',
67 => '10000101100',
68 => '10000100110',
69 => '10110010000',
70 => '10110000100',
71 => '10011010000',
72 => '10011000010',
73 => '10000110100',
74 => '10000110010',
75 => '11000010010',
76 => '11001010000',
77 => '11110111010',
78 => '11000010100',
79 => '10001111010',
80 => '10100111100',
81 => '10010111100',
82 => '10010011110',
83 => '10111100100',
84 => '10011110100',
85 => '10011110010',
86 => '11110100100',
87 => '11110010100',
88 => '11110010010',
89 => '11011011110',
90 => '11011110110',
91 => '11110110110',
92 => '10101111000',
93 => '10100011110',
94 => '10001011110',
95 => '10111101000',
96 => '10111100010',
97 => '11110101000',
98 => '11110100010',
99 => '10111011110',
100 => '10111101110',
101 => '11101011110',
102 => '11110101110',
'c' => '10111011110',
'b' => '10111101110',
'a' => '11101011110',
'A' => '11010000100',
'B' => '11010010000',
'C' => '11010011100',
'S' => '1100011101011'
);
$code = array();
$strCode;
// settype($code,'string');
//$this->sourceCode = $code;
$nbKr = strlen($code);
$strCode = '';
for( $i=0; $i<$nbKr; $i++ )
$code[$i] = substr($code, $i, 1);
$strCode = $code_array['B']; // Start
$checksum = 104 ;
$j = 1 ;
for( $i=0; $i<$nbKr; $i++ )
$tmp = ord($code[$i]) - 32 ;
$checksum += ( $j++ * $tmp ) ;
$strCode .= $code_array[$tmp];
$checksum %= 103 ;
$strCode .= $code_array[$checksum];
$strCode .= $code_array['S']; // Stop
$strCode = $strCode;
$tmp = strlen($strCode) + 20;
$width = $tmp;
// Pad the edges of the barcode
$code_length = 20;
for ( $i=1; $i <= strlen($code_string); $i++ )
$code_length = $code_length + (integer)(substr($code_string,($i-1),1));
if ( strtolower($orientation) == "horizontal" )
//$img_width = $code_length;
$img_width = $code_length * $thickness;
$img_height = $size;
else
$img_width = $size;
$img_height = $code_length;
$image = imagecreate($img_width, $img_height);
$black = imagecolorallocate ($image, 0, 0, 0);
$white = imagecolorallocate ($image, 255, 255, 255);
imagefill( $image, 0, 0, $white );
//$location = 10;
$location = 10 * $thickness;
for ( $position = 1 ; $position <= strlen($code_string); $position++ )
//$cur_size = $location + ( substr($code_string, ($position-1), 1);
$cur_size = $location + ( substr($code_string, ($position-1), 1) *$thickness);
if ( strtolower($orientation) == "horizontal" )
imagefilledrectangle( $image, $location, 0, $cur_size, $img_height, ($position % 2 == 0 ? $white : $black) );
else
imagefilledrectangle( $image, 0, $location, $img_width, $cur_size, ($position % 2 == 0 ? $white : $black) );
$location = $cur_size;
// Draw barcode to the screen
header ('Content-type: image/png');
imagepng($image);
imagedestroy($image);
?>
【问题讨论】:
【参考方案1】:您实际上可以按照https://github.com/tecnickcom/tc-lib-barcode/blob/develop/example/index.php 的示例进行操作
例如:
$bobj = $barcode->getBarcodeObj('QRCODE,H', 'hello world', -4, -4, 'black');
echo "<img alt=\"Embedded Image\" src=\"data:image/png;base64,".base64_encode($bobj->getPngData())."\" />";
或者如果您想以不同的格式打印条形码:
echo $bobj->gethtmlDiv();
示例使用tc-lib-barcode (https://github.com/tecnickcom/tc-lib-barcode) PHP 软件库生成线性和二维条码。
源代码完全符合 PSR-2 标准,可以使用 Composer 轻松添加到您的 PHP 项目中。
原始代码已从TCPDF 移植和重构,并已在数十亿文档中使用。
【讨论】:
以上是关于php中的C128条码脚本的主要内容,如果未能解决你的问题,请参考以下文章