博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
php生成带数字字母的barcode
阅读量:6533 次
发布时间:2019-06-24

本文共 5427 字,大约阅读时间需要 18 分钟。

  hot3.png

php生成带数字字母的barcode

print_barcode.php

<img src="barcode.test.php?id=*22222OPI*" name="barcode" id="barcode"/>

barcode.test.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);
    }
}
?>

转载于:https://my.oschina.net/myroot/blog/113324

你可能感兴趣的文章
MySql中is NULL、ISNULL()和IFNULL()运行速度的比较
查看>>
oracle-xe手工创建数据库
查看>>
Cisco交换机 链路聚合
查看>>
我的友情链接
查看>>
UG中卸载被占用的DLL
查看>>
eclipse 设置注释模板详解,与导入模板方法介绍总结
查看>>
Cocos2d-x3.2 文字显示
查看>>
估计下星期就能考科目二了
查看>>
轻松实现localStorage本地存储和本地数组存储
查看>>
mongodb group
查看>>
python+selenium自动化测试(二)
查看>>
(笔记 - 纯手敲)Spring的IOC和AOP 含GIT地址
查看>>
7-设计模式介绍
查看>>
让运维更高效:关于ECS系统事件
查看>>
J2EE分布式框架--单点登录集成方案
查看>>
跨域传递参数
查看>>
android 4.2的新特性layoutRtl,让布局自动从右往左显示
查看>>
iOS tableView 下拉列表的设计
查看>>
sharepoint 2010 属性编辑工具 SPCamlEditor 1.5.1
查看>>
linux下配置网络环境
查看>>