php生成带数字字母的barcode
print_barcode.php
<img src="barcode.test.php?id=*22222OPI*" name="barcode" id="barcode"/>
barcode.test.php
<?php
include("barcode.class.php");
$mybarcode= new barcode();
$mybarcode->image_create($_GET['id'],array(250,43));
$mybarcode->show();
?>
barcode.class.php
<?php
class barcode{
/**
* This section allows you to modify the default font and errors messages.
*/
const ERROR_SAVE_JPEG = "NO se puede crear el Archivo JPG ";
const ERROR_SAVE_GIF = "NO se puede crear el Archivo GIF ";
const ERROR_SAVE_PNG = "NO se puede crear el Archivo PNG ";
const ERROR_SAVE_BAD_TYPE = "Tipo de Im醙en incorrecto.";
const DEFAULT_FONT_FAMILY = "/fonts/free3of9.ttf";
protected $font_family;
protected $font_width_relation;
protected $extension;
protected $image_resource;
protected $error;
protected $type;
protected $path;
/**
* Instantiates a barcode class, that generate a image barcode from a given string, using a TTF font.
* @param string $type Defines the image type or format. Valid values PNG, GIF and JPEG. Default PNG.
* @param integer $resolution Only for JPEG. Defines the image resolution. For the others formats, has no effects.
* @param bool|string $font_family If false, then the class uses the default font especified at barcode::DEFAULT_FONT_FAMILY. If a valid string that match a font path (may be relative), uses the parametrized font.
* @param float $relation Relation between image width and font size width. Only used if "barcode::image_create fontsize" is false.
*/
public function __construct($type="png",$resolution=72,$font_family=false,$relation=0.13){
$this->path = pathinfo(__FILE__);
$this->type = strtolower($type);
$this->resolution = $resolution;
$this->font_family = !$font_family ? $this->path["dirname"].barcode::DEFAULT_FONT_FAMILY : $font_family;
$this->font_width_relation = $relation;
}
/**
* Returns a timestamp with micro seconds for serialize the file names.
* @return string
*/
private function serial(){
return "-".strftime("%Y%m%d%H%M%S",time()).microtime(true);
}
/**
* Set the Response Headers. Limited only for the Images Content-Type.
* @return bool True if the headers were set. Otherwise false.
*/
private function set_headers(){
return header("Content-type: image/".$this->type);
}
/**
* This method creates the output image resource. After that, you can show() or save_file().
* @param string $text The text string to encoded.
* @param array $size The image size as an array(width,height).
* @param float $angle The angle for the barcode. Useful for vertical (90 or 270) barcode.
* @param float $fontsize The font size to use to encode the text string. If not set, the class uses the param $relation of a constructor.
* @param array $text_color The font (barcode) color as an array(Red,Green,Blue).
* @param array $fill_color The background color as an array(Red,Green,Blue).
* @return bool True if the image was created. Otherwise False.
*/
public function image_create($text="", $size = array(400,40), $angle=0, $fontsize=false, $text_color=array(0,0,0), $fill_color=array(255,255,255)){
$this->error = false;
$width = (int) $size[0];
$height = (int) $size[1];
$image = imagecreatetruecolor($width, $height);
$background = imagecolorallocate($image,$fill_color[0],$fill_color[1],$fill_color[2]);
imagefill($image,0,0,$background);
imagetruecolortopalette($image,false,2);
!$fontsize ? $fontsize = (int) $width * $this->font_width_relation : null;
$bounding_box = imagettfbbox($fontsize, $angle, $this->font_family, $text);
$text_width = strlen($text)*$fontsize;
/*
Centers the barcode at background
*/
$top = (int)($height-($bounding_box[5]-$bounding_box[1]))/2;
$left = (int)($width-($bounding_box[4]-$bounding_box[0]))/2;
$color = imagecolorallocate($image,$text_color[0],$text_color[1],$text_color[2]);
imagettftext($image, $fontsize, $angle, $left, $top, $color, $this->font_family, $text);
$this->image_resource = $image;
return $this->error == false;
}
/**
* This method saves a image resource to a file. It's posible to select a image type, that can differs from the $type at contructor parametrized.
* @param bool|string $path If false, or not especified, then the file name is automaticaly generated.
* @param string $type The image type that will save.
*/
public function save_file($path=false, $type="png"){
$this->error = false;
!$path ? $path = "./barcode".$this->serial().".".$type : null;
$type = strtolower($type);
switch ($type){
case "jpeg":
if (!imagejpeg($this->image_resource, $path)) $this->error = barcode::ERROR_SAVE_JPEG.$path;
break;
case "gif":
if (!imagegif($this->image_resource, $path)) $this->error = barcode::ERROR_SAVE_GIF.$path;
break;
case "png":
if (!imagepng($this->image_resource, $path)) $this->error = barcode::ERROR_SAVE_PNG.$path;
break;
default:
$this->error = barcode::ERROR_SAVE_BAD_TYPE;
break;
}
}
/**
* This method show in a browser the image generated by barcode::image_create().
*/
public function show(){
$this->set_headers($this->type);
ob_start();
eval("image".$this->type."(\$this->image_resource);");
$out = ob_get_contents();
ob_end_clean();
$this->type=="jpeg"?$out = substr_replace($out, pack('cnn',1,$this->resolution,$this->resolution),13,5):null;
print $out;
}
/**
* At script's finish, the image resource is destroyed.
* However you can call this method at any time, if necessary.
*/
public function __destroy(){
@imagedestroy($this->image_resource);
}
}
?>