Subversion-Projekte lars-tiefland.php_share

Revision

Details | Letzte Änderung | Log anzeigen | RSS feed

Revision Autor Zeilennr. Zeile
1 lars 1
<?php
2
/* vim: set expandtab tabstop=4 softtabstop=4 shiftwidth=4: */
3
 
4
/**
5
 * Image_Barcode_ean13 class
6
 *
7
 * Renders EAN 13 barcodes
8
 *
9
 * PHP versions 4
10
 *
11
 * LICENSE: This source file is subject to version 3.0 of the PHP license
12
 * that is available through the world-wide-web at the following URI:
13
 * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
14
 * the PHP License and are unable to obtain it through the web, please
15
 * send a note to license@php.net so we can mail you a copy immediately.
16
 *
17
 * @category   Image
18
 * @package    Image_Barcode
19
 * @author     Didier Fournout <didier.fournout@nyc.fr>
20
 * @copyright  2005 The PHP Group
21
 * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
22
 * @version    CVS: $Id: ean13.php 304741 2010-10-25 09:14:17Z clockwerx $
23
 * @link       http://pear.php.net/package/Image_Barcode
24
 */
25
 
26
require_once 'Image/Barcode.php';
27
 
28
/**
29
 * Image_Barcode_ean13 class
30
 *
31
 * Package which provides a method to create EAN 13 barcode using GD library.
32
 *
33
 * @category   Image
34
 * @package    Image_Barcode
35
 * @author     Didier Fournout <didier.fournout@nyc.fr>
36
 * @copyright  2005 The PHP Group
37
 * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
38
 * @version    Release: @package_version@
39
 * @link       http://pear.php.net/package/Image_Barcode
40
 * @since      Image_Barcode 0.4
41
 */
42
class Image_Barcode_ean13 extends Image_Barcode
43
{
44
    /**
45
     * Barcode type
46
     * @var string
47
     */
48
    var $_type = 'ean13';
49
 
50
    /**
51
     * Barcode height
52
     *
53
     * @var integer
54
     */
55
    var $_barcodeheight = 50;
56
 
57
    /**
58
     * Font use to display text
59
     *
60
     * @var integer
61
     */
62
    var $_font = 2;  // gd internal small font
63
 
64
    /**
65
     * Bar width
66
     *
67
     * @var integer
68
     */
69
    var $_barwidth = 1;
70
 
71
 
72
    /**
73
     * Number set
74
     * @var array
75
     */
76
    var $_number_set = array(
77
           '0' => array(
78
                    'A' => array(0,0,0,1,1,0,1),
79
                    'B' => array(0,1,0,0,1,1,1),
80
                    'C' => array(1,1,1,0,0,1,0)
81
                        ),
82
           '1' => array(
83
                    'A' => array(0,0,1,1,0,0,1),
84
                    'B' => array(0,1,1,0,0,1,1),
85
                    'C' => array(1,1,0,0,1,1,0)
86
                        ),
87
           '2' => array(
88
                    'A' => array(0,0,1,0,0,1,1),
89
                    'B' => array(0,0,1,1,0,1,1),
90
                    'C' => array(1,1,0,1,1,0,0)
91
                        ),
92
           '3' => array(
93
                    'A' => array(0,1,1,1,1,0,1),
94
                    'B' => array(0,1,0,0,0,0,1),
95
                    'C' => array(1,0,0,0,0,1,0)
96
                        ),
97
           '4' => array(
98
                    'A' => array(0,1,0,0,0,1,1),
99
                    'B' => array(0,0,1,1,1,0,1),
100
                    'C' => array(1,0,1,1,1,0,0)
101
                        ),
102
           '5' => array(
103
                    'A' => array(0,1,1,0,0,0,1),
104
                    'B' => array(0,1,1,1,0,0,1),
105
                    'C' => array(1,0,0,1,1,1,0)
106
                        ),
107
           '6' => array(
108
                    'A' => array(0,1,0,1,1,1,1),
109
                    'B' => array(0,0,0,0,1,0,1),
110
                    'C' => array(1,0,1,0,0,0,0)
111
                        ),
112
           '7' => array(
113
                    'A' => array(0,1,1,1,0,1,1),
114
                    'B' => array(0,0,1,0,0,0,1),
115
                    'C' => array(1,0,0,0,1,0,0)
116
                        ),
117
           '8' => array(
118
                    'A' => array(0,1,1,0,1,1,1),
119
                    'B' => array(0,0,0,1,0,0,1),
120
                    'C' => array(1,0,0,1,0,0,0)
121
                        ),
122
           '9' => array(
123
                    'A' => array(0,0,0,1,0,1,1),
124
                    'B' => array(0,0,1,0,1,1,1),
125
                    'C' => array(1,1,1,0,1,0,0)
126
                        )
127
        );
128
 
129
    var $_number_set_left_coding = array(
130
           '0' => array('A','A','A','A','A','A'),
131
           '1' => array('A','A','B','A','B','B'),
132
           '2' => array('A','A','B','B','A','B'),
133
           '3' => array('A','A','B','B','B','A'),
134
           '4' => array('A','B','A','A','B','B'),
135
           '5' => array('A','B','B','A','A','B'),
136
           '6' => array('A','B','B','B','A','A'),
137
           '7' => array('A','B','A','B','A','B'),
138
           '8' => array('A','B','A','B','B','A'),
139
           '9' => array('A','B','B','A','B','A')
140
        );
141
 
142
    /**
143
     * Draws a EAN 13 image barcode
144
     *
145
     * @param  string $text     A text that should be in the image barcode
146
     * @param  string $imgtype  The image type that will be generated
147
     *
148
     * @return image            The corresponding Interleaved 2 of 5 image barcode
149
     *
150
     * @access public
151
     *
152
     * @author     Didier Fournout <didier.fournout@nyc.fr>
153
     * @todo       Check if $text is number and len=13
154
     *
155
     */
156
    function &draw($text, $imgtype = 'png')
157
    {
158
        // Calculate the barcode width
159
        $barcodewidth = (strlen($text)) * (7 * $this->_barwidth)
160
            + 3 // left
161
            + 5 // center
162
            + 3 // right
163
            + imagefontwidth($this->_font)+1
164
            ;
165
 
166
        $barcodelongheight = (int) (imagefontheight($this->_font)/2) + $this->_barcodeheight;
167
 
168
        // Create the image
169
        $img = ImageCreate(
170
                    $barcodewidth,
171
                    $barcodelongheight + imagefontheight($this->_font) + 1
172
                );
173
 
174
        // Alocate the black and white colors
175
        $black = ImageColorAllocate($img, 0, 0, 0);
176
        $white = ImageColorAllocate($img, 255, 255, 255);
177
 
178
        // Fill image with white color
179
        imagefill($img, 0, 0, $white);
180
 
181
        // get the first digit which is the key for creating the first 6 bars
182
        $key = substr($text,0,1);
183
 
184
        // Initiate x position
185
        $xpos = 0;
186
 
187
        // print first digit
188
        imagestring($img, $this->_font, $xpos, $this->_barcodeheight, $key, $black);
189
        $xpos= imagefontwidth($this->_font) + 1;
190
 
191
        // Draws the left guard pattern (bar-space-bar)
192
        // bar
193
        imagefilledrectangle($img, $xpos, 0, $xpos + $this->_barwidth - 1, $barcodelongheight, $black);
194
        $xpos += $this->_barwidth;
195
        // space
196
        $xpos += $this->_barwidth;
197
        // bar
198
        imagefilledrectangle($img, $xpos, 0, $xpos + $this->_barwidth - 1, $barcodelongheight, $black);
199
        $xpos += $this->_barwidth;
200
 
201
        // Draw left $text contents
202
        $set_array=$this->_number_set_left_coding[$key];
203
        for ($idx = 1; $idx < 7; $idx ++) {
204
            $value=substr($text,$idx,1);
205
            imagestring ($img, $this->_font, $xpos+1, $this->_barcodeheight, $value, $black);
206
            foreach ($this->_number_set[$value][$set_array[$idx-1]] as $bar) {
207
                if ($bar) {
208
                    imagefilledrectangle($img, $xpos, 0, $xpos + $this->_barwidth - 1, $this->_barcodeheight, $black);
209
                }
210
                $xpos += $this->_barwidth;
211
            }
212
        }
213
 
214
        // Draws the center pattern (space-bar-space-bar-space)
215
        // space
216
        $xpos += $this->_barwidth;
217
        // bar
218
        imagefilledrectangle($img, $xpos, 0, $xpos + $this->_barwidth - 1, $barcodelongheight, $black);
219
        $xpos += $this->_barwidth;
220
        // space
221
        $xpos += $this->_barwidth;
222
        // bar
223
        imagefilledrectangle($img, $xpos, 0, $xpos + $this->_barwidth - 1, $barcodelongheight, $black);
224
        $xpos += $this->_barwidth;
225
        // space
226
        $xpos += $this->_barwidth;
227
 
228
 
229
        // Draw right $text contents
230
        for ($idx = 7; $idx < 13; $idx ++) {
231
            $value=substr($text,$idx,1);
232
            imagestring ($img, $this->_font, $xpos+1, $this->_barcodeheight, $value, $black);
233
            foreach ($this->_number_set[$value]['C'] as $bar) {
234
                if ($bar) {
235
                    imagefilledrectangle($img, $xpos, 0, $xpos + $this->_barwidth - 1, $this->_barcodeheight, $black);
236
                }
237
                $xpos += $this->_barwidth;
238
            }
239
        }
240
 
241
        // Draws the right guard pattern (bar-space-bar)
242
        // bar
243
        imagefilledrectangle($img, $xpos, 0, $xpos + $this->_barwidth - 1, $barcodelongheight, $black);
244
        $xpos += $this->_barwidth;
245
        // space
246
        $xpos += $this->_barwidth;
247
        // bar
248
        imagefilledrectangle($img, $xpos, 0, $xpos + $this->_barwidth - 1, $barcodelongheight, $black);
249
        $xpos += $this->_barwidth;
250
 
251
        return $img;
252
    } // function create
253
 
254
} // class
255
?>