<?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;
}
?>