<?php /** * draw_upc_barcode * * Draw a barcode for a UPC number. * * @version 0.3 * @author Contributors at eXorithm * @link /algorithm/view/draw_upc_barcode Listing at eXorithm * @link /algorithm/history/draw_upc_barcode History at eXorithm * @license /home/show/license * * @param mixed $number The 12-digit UPC number. * @param bool $show_numbers Whether to draw the numbers at the bottom of the barcode. * @return resource GD image */ function draw_upc_barcode($number='925853043217',$show_numbers=true) { $number = str_replace(array('-',' '), '', $number); if (strlen($number)!=12) throw new Exception("UPC number must have 12 digits"); for ($i=0;$i<12;$i++) { if (!is_numeric($number[$i])) throw new Exception("UPC number must contain only digits"); } $lcodes = array( '0001101', '0011001', '0010011', '0111101', '0100011', '0110001', '0101111', '0111011', '0110111', '0001011', ); $rcodes = array( '1110010', '1100110', '1101100', '1000010', '1011100', '1001110', '1010000', '1000100', '1001000', '1110100', ); $code = '101'; for ($i=0;$i<6;$i++) { $code .= $lcodes[$number[$i]]; } $code .= '01010'; for ($i=6;$i<12;$i++) { $code .= $rcodes[$number[$i]]; } $code .= '101'; // create image $width=190; $height=100; $image = image_create_alpha($width, $height); $white = imagecolorallocate($image, 255, 255, 255); imagefilledrectangle($image, 0, 0, $width, $height, $white); // draw lines $black = imagecolorallocate($image, 0, 0, 0); for ($i=0;$i<strlen($code);$i++) { if ($code[$i]=='1') { imageline($image, $i*2,0, $i*2, $height, $black); imageline($image, $i*2+1,0, $i*2+1, $height, $black); } } // draw numbers if ($show_numbers) { imagefilledrectangle($image, 6, $height-16, 90, $height, $white); imagefilledrectangle($image, 98, $height-16, 182, $height, $white); for ($i=0;$i<6;$i++) { imagestring($image, 2, 11+$i*14, $height-14, $number[$i], $black); } for ($i=6;$i<12;$i++) { imagestring($image, 2, 19+$i*14, $height-14, $number[$i], $black); } } return $image; } /** * image_create_alpha * * Helper function to create a new blank image with transparency. * * @version 0.1 * @author Contributors at eXorithm * @link /algorithm/view/image_create_alpha Listing at eXorithm * @link /algorithm/history/image_create_alpha History at eXorithm * @license /home/show/license * * @param mixed $width * @param mixed $height * @return resource GD image */ function image_create_alpha($width='',$height='') { // Create a normal image and apply required settings $img = imagecreatetruecolor($width, $height); imagealphablending($img, false); imagesavealpha($img, true); // Apply the transparent background $trans = imagecolorallocatealpha($img, 0, 0, 0, 127); for ($x = 0; $x < $width; $x++) { for ($y = 0; $y < $height; $y++) { imagesetpixel($img, $x, $y, $trans); } } return $img; } ?>