首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >生成ean13条形码并将其保存到png

生成ean13条形码并将其保存到png
EN

Stack Overflow用户
提问于 2016-02-10 14:04:06
回答 1查看 5.3K关注 0票数 1

我使用Kody kreskowe - EAN-13由Jacek Kowalski (http://jacekk.info)生成EAN13条形码,并将其保存到图像文件中。在Prestashop的订购过程中,我希望动态生成条形码。将该图像保存在服务器上,并将其放入new_order.html电子邮件模板中。

有完整的代码:https://jacekk.info/skrypty/ean13.phps

我轻轻地修改了它,将$_GET['kod']改为$kod_in,并将$kod_in = 1234567891011放在文件的开头,imagepng($i, $new_filename);放在文件的末尾。

当我直接进入文件ean13.php或运行该代码时(我看到生成的条形码和脚本、创建新的图像文件并将其保存在服务器上)或运行该代码(直接在web浏览器中),一切都运行良好:

代码语言:javascript
运行
复制
$kod_in = 1234567891011;
include (dirname(__FILE__)."/ean13.php");

但是,当我尝试将上面的代码包含到有序处理中时,确切地说是在mailalerts.php中,它不显示条形码并生成空白(白色)图像文件。我认为这与以下事实有关:生成的条形码没有显示在屏幕上,然后保存。

请帮助修改代码以生成图像,即使它们没有显示在屏幕上。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-10 16:23:50

在脚本的末尾,替换如下:

代码语言:javascript
运行
复制
header('Content-type: image/gif');
imagegif($i);

在这方面:

代码语言:javascript
运行
复制
$imageLocation = "where/you/want/to/save/your/file";
imagegif($i, $imageLocation);

这是 Documentation

您可以这样使用这个库作为一个类:

代码语言:javascript
运行
复制
<?php
/***************************************************
 *             Kody kreskowe - EAN-13              *
 ***************************************************
 * Ostatnia modyfikacja: 01.11.2012                *
 * Autor: Jacek Kowalski (http://jacekk.info)      *
 *                                                 *
 * Strona WWW: http://jacekk.info/scripts/barcodes *
 *                                                 *
 * Utwór rozprowadzany na licencji                 *
 * http://creativecommons.org/licenses/by-nc/2.5/  *
 ***************************************************/

/* Kodowanie znaków UTF-8 */

class BarCode {

    public $kol = array(
        '0' => array('A', 'A', 'A', 'A', 'A', 'A'),
        '1' => array('A', 'A', 'B', 'A', 'B', 'B'),
        '2' => array('A', 'A', 'B', 'B', 'A', 'B'),
        '3' => array('A', 'A', 'B', 'B', 'B', 'A'),
        '4' => array('A', 'B', 'A', 'A', 'B', 'B'),
        '5' => array('A', 'B', 'B', 'A', 'A', 'B'),
        '6' => array('A', 'B', 'B', 'B', 'A', 'A'),
        '7' => array('A', 'B', 'A', 'B', 'A', 'B'),
        '8' => array('A', 'B', 'A', 'B', 'B', 'A'),
        '9' => array('A', 'B', 'B', 'A', 'B', 'A')
    );

    public $code = array(
        'start' => '101',
        'lewa' => array(
            'A' => array(
                '0' => '0001101',
                '1' => '0011001',
                '2' => '0010011',
                '3' => '0111101',
                '4' => '0100011',
                '5' => '0110001',
                '6' => '0101111',
                '7' => '0111011',
                '8' => '0110111',
                '9' => '0001011'
            ),
            'B' => array(
                '0' => '0100111',
                '1' => '0110011',
                '2' => '0011011',
                '3' => '0100001',
                '4' => '0011101',
                '5' => '0111001',
                '6' => '0000101',
                '7' => '0010001',
                '8' => '0001001',
                '9' => '0010111'
            )
        ),
        'srodek' => '01010',
        'prawa' => array(
            '0' => '1110010',
            '1' => '1100110',
            '2' => '1101100',
            '3' => '1000010',
            '4' => '1011100',
            '5' => '1001110',
            '6' => '1010000',
            '7' => '1000100',
            '8' => '1001000',
            '9' => '1110100'
        ),
        'stop' => '101'
    );

    public $b;

    public function __construct($barcode) {

        $len = strlen($barcode);
        if(trim($barcode, '0123456789')!='' OR ($len!=12 AND $len!=13)) {
            echo 'Znaki inne niż cyfry lub błędna długość ('.$len.')';
            die();
        }

        $kod = str_split(substr($barcode, 0, 12));
        $now = 1;
        $sum = 0;
        foreach($kod as $val) {
            if($now==1) {
                $sum += $val;
                $now = 3;
            }
            else
            {
                $sum += $val*3;
                $now = 1;
            }
        }
        $sum = 10-($sum%10);
        if($sum==10) $sum = 0;

        if($len==12) {
            $barcode .= $sum;
        }
        elseif(substr($barcode, -1)!=$sum) {
            echo 'Błędna suma kontrolna '.$sum;
            die();
        }

        unset($len, $kod, $now, $sum);

        $sys = substr($barcode, 0, 1);
        $lewa = substr($barcode, 1, 6);
        $prawa = substr($barcode, 7);

        $i = imagecreate(95, 40);
        $w = imagecolorallocate($i, 255, 255, 255);
        $this->b = imagecolorallocate($i, 0, 0, 0);

        $this->print_code($this->code['start'].$this->gen_binary($lewa, 0, $sys).$this->code['srodek'].$this->gen_binary($prawa, 1, $sys).$this->code['stop'], $i);

        imagegif($i, 'test.gif');
    }


    public function gen_binary($kod, $strona, $sys) {
        $kod = str_split($kod);
        $ret = '';
        if($strona==0) {
            foreach($kod as $key => $val) {
                $ret .= $this->code['lewa'][$this->kol[$sys][$key]][$val];
            }
        }
        else
        {
            foreach($kod as $val) {
                $ret .= $this->code['prawa'][$val];
            }
        }
        return $ret;
    }

    public function print_code($kod, $img) {
        $now = 0;
        $kod = str_split($kod);
        foreach($kod as $val) {
            if($val==1) {
                imageline($img, $now, 0, $now, 40, $this->b);
                $now++;
            }
            elseif($val==0) {
                $now++;
            }
        }
    }
}

您需要在类声明之前将其包含在文件的顶部一次:

代码语言:javascript
运行
复制
 include_once('path/to/BarCode.php');

现在,您必须创建一个新的BarCode对象,而不是包含生成图像的脚本。

代码语言:javascript
运行
复制
 new BarCode('9780486425573');

测试和工作,我的预施舍1.6。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35317331

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档