忍者ブログ
[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。



2024/11/22 23:00 |
PHP1-26:バーコードを作ってみる

Image_Barcode 1.1.0 (stable)
http://pear.php.net/package/Image_Barcode

バーコードは何気に個人でも発行することが出来ます。

JAN企業コード(JANメーカーコード)利用の手引き
http://www.amazon.co.jp/dp/B000VPKMAW

まあ本格的にバーコードを利用しようとしている人がここを参考になんて間違ってもしないでしょうけれど、非常に簡単にバーコードを作成できるライブラリ、Image_Barcodeを使ってバーコードを作成してみます。
ちなみに日本で使用されているJANコードは、EANコードと同じものです。

Code39、Code128、EAN13、INT25、PostNet、UPCAと各種バーコードに対応していますが、Code128以外はintしか扱えません。
下手にstringとかを入れるとエラーが山ほど帰ってきてしまいますので、ラッパークラスでどうにかします。
ついでにエラーになりそうなところを片端からチェックしておきます。
おかげでなにやら無駄に長くなっていますが、特にエラーのこととかを考える必要がないのであれば直接呼んだ方が早いです。

barcode.class.php 

<?php
    define('CURRENT_DIR',getcwd().'/');
    define('PEAR_DIR',$_SERVER['DOCUMENT_ROOT'].'/src/php/pear/');
    ini_set('include_path',PEAR_DIR.PATH_SEPARATOR.ini_get('include_path'));
    require_once(PEAR_DIR.'Image/Barcode.php');
   
    class pearBarcodeModel {
       
        //メンバ変数
        private $barcode='';
        private $string='';
        private $code='ean13';
        private $ext='jpg';
       
        //コンストラクタ
        public function __construct(){
            $this->barcode=new Image_Barcode();
        }
       
        //文字セット
        public function setString($str){
            $this->string=$str;
        }
        //バーコード体系セット
        public function setCode($str){
            if(stripos($str,'39')!==false){
                $this->code='Code39';
            }else if(stripos($str,'128')!==false){
                $this->code='code128';
            }else if(stripos($str,'int')!==false){
                $this->code='int25';
            }else if(stripos($str,'post')!==false){
                $this->code='postnet';
            }else if(stripos($str,'up')!==false){
                $this->code='upca';
            }else{
                $this->code='ean13';
            }
        }
       
        //拡張子セット
        public function setExt($str){
            if(stripos($str,'j')===0){
                $this->ext='jpg';
            }else if(stripos($str,'g')===0){
                $this->ext='gif';
            }else{
                $this->ext='png';
            }
        }
       
        //表示
        public function printBarcode(){
            if($this->_checkArg()==false){return false;}
            $ret=$this->barcode->draw($this->string,$this->code,$this->ext);
        }
       
        //ファイルに保存
        public function saveBarcode($filename){
            if(!$filename || ($image=$this->getBarcode())===false){return false;}
           
            switch ($this->ext) {
                case 'gif':
                    $ret=imagegif($image,$filename);
                    imagedestroy($image);
                    break;
                case 'jpg':
                    $ret=imagejpeg($image,$filename);
                    imagedestroy($image);
                    break;
                default:
                    $ret=imagepng($image,$filename);
                    imagedestroy($image);
                    break;
            }
            return $ret;
        }
       
        //GDオブジェクトとして取得
        public function getBarcode(){
            if($this->_checkArg()==false){return false;}
            return $this->barcode->draw($this->string,$this->code,$this->ext,false);
        }
   
        //引数チェック
        private function _checkArg(){
            //code128以外は数値のみ
            if($this->code!='code128' && preg_match('/^[0-9]+$/',$this->string)==0){
                return false;
            }
            //upcaは数値12桁
            if($this->code=='upca' && strlen($this->string)!=12){
                return false;
            }
            return true;
        }
       
    #↓クラスのおわり
    }

barcode.php

<?php
    require_once('barcode.class.php');
    $barcode=new pearBarcodeModel();
   
    $barcode->setString('123456789');
    $barcode->setCode('128');
    $barcode->setExt('jpg');
   
    $ret=$barcode->printBarcode();

/*
    $ret=$barcode->saveBarcode('image.jpg');
?>
    <img src="image.jpg" alt="バーコードサンプル" />
*/


printBarcodeを呼べばそのまま画像ファイルとして出力します。
saveBarcodeでファイルとして保存されます。
getBarcodeでGDオブジェクトとして取得できるので、取得したバーコードを更に変更を加える場合はこちらを使用します。

このクラス最大の問題点は、使用者がいないということでしょう。

PR


2008/09/26 17:10 | Comments(0) | TrackBack() | PHP

トラックバック

トラックバックURL:

コメント

コメントを投稿する






Vodafone絵文字 i-mode絵文字 Ezweb絵文字 (絵文字)



<<PHP1-27:QRコードを作ってみる | HOME | ひとつ気付いたんだが>>
忍者ブログ[PR]