精华内容
下载资源
问答
  • 网上转了一圈发现都识别二维码保存到本地,比较少直接打印在终端上,看了下qrcode-terminal虽然可以,但是发现它也使用qrcode这个库,而qrcode已经有了输出到终端的方法了,所以就不用多下载qrcode-terminal了. ...

    网上转了一圈发现都是识别二维码保存到本地,比较少直接打印在终端上,看了下qrcode-terminal虽然可以,但是发现它也是使用qrcode这个库,而qrcode已经有了输出到终端的方法了,所以就不用多下载qrcode-terminal了.

    安装环境

    pip install Pillow
    pip install pyzbar
    pip install qrcode
    
    • pyzbar依赖的zbar可能会安装失败,不过网上都有很多资料了,具体错误具体查吧.

    首先还是需要pyzbar识别出二维码的URL,再通过qrcode生成一个二维码,然后QRCode自带方法输出到终端.

    from pyzbar.pyzbar import decode
    from PIL import Image
    import qrcode
    
    barcode_url = ''
    barcodes = decode(Image.open('./qrcode.png'))
    for barcode in barcodes:
        barcode_url = barcode.data.decode("utf-8")
    print(barcode_url)
    
    qr = qrcode.QRCode()
    qr.add_data(barcode_url)
    #invert=True白底黑块,有些app不识别黑底白块.
    qr.print_ascii(invert=True)
    

    参考链接:
    https://www.programcreek.com/python/example/105640/pyqrcode.QRCode

    展开全文
  • 二维码中,放入图片,遮挡一部分被允许的。 二维码在少许损伤的情况下还可以读取出来,图片可以放置的位置如图的黄色区域。(具体可以放多大要看二维码生成时的纠错能力)二维码的纠错级别:纠错级别越高,生成...

    在二维码中,放入图片,遮挡一部分是被允许的。
    二维码在少许损伤的情况下还可以读取出来,图片可以放置的位置如图的黄色区域。(具体可以放多大要看二维码生成时的纠错能力)
    二维码的纠错级别:
    纠错级别越高,生成图片会越大。
    L 水平 7%的字码可被修正
    M 水平 15%的字码可被修正
    Q 水平 25%的字码可被修正
    H 水平 30%的字码可被修正
    具体可以测试一下,究竟能不能被扫描出来。

    该博文首发于新浪博客dqx-低权限。

    上面试验的几个二维码图片是Photoshop做的,用PS做非常简单,直接两个图层,把图片图层放到二维码图层上面,调整上面图片的大小即可。
    如何用在Lodop生成的二维码中添加图片呢?
    Lodop本身没有图片+二维码的组合类型,但是可以通过二维码和图片的叠加实现。
    打印项叠加,参考本博客的另一篇博文:
    Lodop调整打印项输出顺序 覆盖与层级(首发于dqx-低权限,目前在该博文中也有)
    上面这个链接里的博文里有图片和图片叠加,图片和文字叠加等,简单来说,叠加顺序就是打印项的顺序,后输出的在上面,想要实现里面带图片的二维码。
    先输出二维码,然后输出相应的图片,打印二维码带图片。
    LODOP.ADD_PRINT_BARCODE语句在图片LODOP.ADD_PRINT_IMAGE之前即可。

    转载于:https://www.cnblogs.com/huaxie/p/10469020.html

    展开全文
  • 热敏打印机打印二维码图片

    千次阅读 2017-04-19 13:11:09
    最近研究热敏打印机打印二维码,用到了北洋OPOS二次开发包DLL,借鉴该代码:http://www.cnblogs.com/datacool/archive/2012/11/27/2014666.html ,下面扩展的一个打印图片的方法 /// /// 打印图片 /// /// ...
    最近研究热敏打印机打印二维码,用到了北洋OPOS二次开发包DLL,借鉴该代码:http://www.cnblogs.com/datacool/archive/2012/11/27/2014666.html ,下面是扩展的一个打印图片的方法
    
    /// <summary>
     /// 打印图片
     /// </summary>
     /// <param name="bmp"></param>
     public void PrintBmp(Bitmap bmp)
    {
    
     byte[] data = new byte[] { 0x1B, 0x33, 0x00 };
     POS_WriteFile(POS_IntPtr, data, (uint)data.Length);
    
     data[0] = (byte)'x00';
     data[1] = (byte)'x00';
     data[2] = (byte)'x00'; // Clear to Zero.
    
     Color pixelColor;
    
     //ESC * m nL nH d1…dk 选择位图模式
     // ESC * m nL nH
     byte[] escBmp = new byte[] { 0x1B, 0x2A, 0x00, 0x00, 0x00 };
    
     escBmp[2] = (byte)'x21';
    
     //nL, nH
     escBmp[3] = (byte)(bmp.Width % 256);
     escBmp[4] = (byte)(bmp.Width / 256);
    
    //循环图片像素打印图片
    //循环高
     for (int i = 0; i < (bmp.Height / 24 + 1); i++)
    {
    //设置模式为位图模式
     POS_WriteFile(POS_IntPtr, escBmp, (uint)escBmp.Length);
    //循环宽
     for (int j = 0; j < bmp.Width; j++)
    {
     for (int k = 0; k < 24; k++)
    {
     if (((i * 24) + k) < bmp.Height) // if within the BMP size
    {
     pixelColor = bmp.GetPixel(j, (i * 24) + k);
     if (pixelColor.R == 0)
    {
     data[k / 8] += (byte)(128 >> (k % 8));
    }
    }
    }
    //一次写入一个data,24个像素
     POS_WriteFile(POS_IntPtr, data, (uint)data.Length);
    
     data[0] = (byte)'x00';
     data[1] = (byte)'x00';
     data[2] = (byte)'x00'; // Clear to Zero.
    }
    //换行,打印第二行
     byte[] data2 = { 0xA };
     POS_WriteFile(POS_IntPtr, data2, (uint)data2.Length);
     } // data
     byte[] data3 = { 0xA, 0xA };
     POS_WriteFile(POS_IntPtr, data3, (uint)data3.Length);
    展开全文
  • zxing生成1D和2D条形或二维码的工具类库,java图形库Graphics2D进行图片的合成。 依赖: <dependency> <groupId>com.google.zxing</groupId> <artifactId>core</artifactId> ...

    zxing是生成1D和2D条形或二维码的工具类库,java图形库Graphics2D进行图片的合成。

    依赖:

    <dependency>
        <groupId>com.google.zxing</groupId>
        <artifactId>core</artifactId>
        <version>3.3.3</version>
    </dependency>

    代码:
    以下为合成图片和二维码,合成2张图片参看第一个方法注释掉的代码
     

    /*
     * overlapImage
     * @description:合成二维码和图片为文件
     * @author 李阳
     * @date 2018/12/13
     * @params [backPicPath, code]
     * @return void
     */
    public static final void combineCodeAndPicToFile(String backPicPath, BufferedImage code/*String fillPicPath*/) {
        try {
            BufferedImage big = ImageIO.read(new File(backPicPath));
            BufferedImage small = code;
            /*//合成两个文件时使用
            BufferedImage small = ImageIO.read(new File(fillPicPath));*/
            Graphics2D g = big.createGraphics();
    
            //二维码或小图在大图的左上角坐标
            int x = (big.getWidth() - small.getWidth()) / 2;
            // int y = (big.getHeight() - small.getHeight()) / 2;
            int y = (big.getHeight() - small.getHeight() - 100);
            g.drawImage(small, x, y, small.getWidth(), small.getHeight(), null);
            g.dispose();
            //为了保证大图背景不变色,formatName必须为"png"
            ImageIO.write(big, "png", new File("C:/Users/kevin/Desktop/combinePic.jpg"));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    /* 
     * combineCodeAndPicToInputstream
     * @description:合成二维码和图片为输出流,可用于下载或直接展示
     * @author 李阳
     * @date 2018/12/13
     * @params [backPicPath, code]
     * @return java.io.InputStream
     */
    public static final void combineCodeAndPicToInputstream(String backPicPath, BufferedImage code, HttpServletResponse resp) {
        try {
            BufferedImage big = ImageIO.read(new File(backPicPath));
            // BufferedImage small = ImageIO.read(new File(fillPicPath));
            BufferedImage small = code;
            Graphics2D g = big.createGraphics();
    
            //二维码或小图在大图的左上角坐标
            int x = (big.getWidth() - small.getWidth()) / 2;
            int y = (big.getHeight() - small.getHeight() - 100);   //二维码距大图下边距100
            g.drawImage(small, x, y, small.getWidth(), small.getHeight(), null);
            g.dispose();
            resp.addHeader("Content-Disposition", "attachment;filename="+ URLEncoder.encode("lia阿里.png","UTF-8") );//去掉这行设置header的代码,前端访问可以直接展示
            //为了保证大图背景不变色,formatName必须为"png"
            ImageIO.write(big, "png", resp.getOutputStream());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    /* 
     * combineCodeAndPicToBase64 
     * @description:合成二维码和图片为Base64,同样可用于直接展示
     * @author 李阳
     * @date 2018/12/14
     * @params [backPicPath, code]
     * @return java.lang.String
     */
    public static final String combineCodeAndPicToBase64(String backPicPath, BufferedImage code) {
        ImageOutputStream imOut = null;
        try {
            BufferedImage big = ImageIO.read(new File(backPicPath));
            // BufferedImage small = ImageIO.read(new File(fillPicPath));
            BufferedImage small = code;
            Graphics2D g = big.createGraphics();
    
            //二维码或小图在大图的左上角坐标
            int x = (big.getWidth() - small.getWidth()) / 2;
            int y = (big.getHeight() - small.getHeight() - 100);
            g.drawImage(small, x, y, small.getWidth(), small.getHeight(), null);
            g.dispose();
            //为了保证大图背景不变色,formatName必须为"png"
    
            ByteArrayOutputStream bs = new ByteArrayOutputStream();
            imOut = ImageIO.createImageOutputStream(bs);
            ImageIO.write(big, "png", imOut);
            InputStream in = new ByteArrayInputStream(bs.toByteArray());
    
            byte[] bytes = new byte[in.available()];
            in.read(bytes);
            String base64 = Base64.getEncoder().encodeToString(bytes);
            System.out.println(base64);
    
            return "data:image/jpeg;base64," + base64;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
    
    /* 
     * createImage 
     * @description:生成二维码
     * @author 李阳
     * @date 2018/12/13
     * @params [content 二维码内容, logoImgPath 中间logo, needCompress 是否压缩]
     * @return java.awt.image.BufferedImage
     */
    private static BufferedImage createImage(String content, String logoImgPath, boolean needCompress) throws IOException, WriterException {
        Hashtable<EncodeHintType, Object> hints = new Hashtable<EncodeHintType, Object>();
        hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
        hints.put(EncodeHintType.CHARACTER_SET, CHARSET);
        hints.put(EncodeHintType.MARGIN, 1);
        //200是定义的二维码或小图片的大小
        BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, 200, 200, hints);
        int width = bitMatrix.getWidth();
        int height = bitMatrix.getHeight();
        BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
        //循环遍历每一个像素点
        for (int x = 0; x < width; x++) {
            for (int y = 0; y < height; y++) {
                image.setRGB(x, y, bitMatrix.get(x, y) ? 0xFF000000 : 0xFFFFFFFF);
            }
        }
        // 没有logo
        if (logoImgPath == null || "".equals(logoImgPath)) {
            return image;
        }
    
        // 插入logo
        insertImage(image, logoImgPath, needCompress);
        return image;
    }
    
    /* 
     * insertImage 
     * @description:二维码插入logo
     * @author 李阳
     * @date 2018/12/13
     * @params [source, logoImgPath, needCompress]
     * @return void
     */
    private static void insertImage(BufferedImage source, String logoImgPath, boolean needCompress) throws IOException {
        File file = new File(logoImgPath);
        if (!file.exists()) {
            return;
        }
    
        Image src = ImageIO.read(new File(logoImgPath));
        int width = src.getWidth(null);
        int height = src.getHeight(null);
        //处理logo
        if (needCompress) {
            if (width > WIDTH) {
                width = WIDTH;
            }
    
            if (height > HEIGHT) {
                height = HEIGHT;
            }
    
            Image image = src.getScaledInstance(width, height, Image.SCALE_SMOOTH);
            BufferedImage tag = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
            Graphics gMaker = tag.getGraphics();
            gMaker.drawImage(image, 0, 0, null); // 绘制缩小后的图
            gMaker.dispose();
            src = image;
        }
    
        // 在中心位置插入logo
        Graphics2D graph = source.createGraphics();
        int x = (200 - width) / 2;
        int y = (200 - height) / 2;
        graph.drawImage(src, x, y, width, height, null);
        Shape shape = new RoundRectangle2D.Float(x, y, width, width, 6, 6);
        graph.setStroke(new BasicStroke(3f));
        graph.draw(shape);
        graph.dispose();
    }
    
    public static final void main(String[] args) throws IOException, WriterException {
        BufferedImage code = createImage("https://my.oschina.net/kevin2kelly", null, false);
        combineCodeAndPicToFile("C:/Users/kevin/Desktop/无标题.png", code);
        combineCodeAndPicToBase64("C:/Users/kevin/Desktop/无标题.png", code);
    }
    展开全文
  • 最近公司给商户做的App 允许App把卖出的商品信息通过打印机 打印... 二维码 1.连接打印机 连接打印机可以通过 网线 USB 蓝牙 或者WiFi . 我们用App肯定通过WiFi或者蓝牙连接 至于蓝牙怎么连接 可以 看看前面...
  • js单独打印二维码图片和批量打印二维码图片,大纲: 1. 打印机设置 (以使用的热敏打印机为例) 2. js实现打印功能 3. 遇坑记录
  • 最近公司然做手机蓝牙打印机打印小票,这个是开始时的测试demo,蓝牙扫描连接和打印文字内容都比较简单,难点是打印图片,demo中提供了两种打印图片的方式,其实本质都是一样,有兴趣的可以研究下,欢迎互相交流学习Q:...
  • 二维码生成与打印

    千次阅读 2016-12-07 14:11:31
    最近有个需求,做二维码的生成和打印。生成二维码二维码存储了主键,图片存储到特定文件夹中。打印时,如果已存在图片,则直接打印,不存在则生成后打印。 1.材料:热敏打印机:我用的牌子佳博GP-2120TF的...
  • 现在生活中几乎随处都可以见到二维码,制作二维码二维码软件也比较多的,那么如何在二维码中间添加图片,而且还不影响扫描识别呢?中琅条码打印软件就可以很好的解决这个问题,下面我们就详细看一下在二维码中间...
  • 按产品编号、规格、等级等信息生成一个二维码、把二维码图片放在一个panel内、panel内还有其描述产品的字段、实现对panel的打印预览和打印功能(按指定的打印格式打印、标签打印机的格式)
  • 笔者此次的二维码是通过调用第三方接口生成的,具体流程如下: 根据规范要求调用第三方接口,返回二维码下载地址及二维码图片的属性值(图片大小等) 根据返回的值获取二维码下载地址,根据地址下载二维码图片,...
  • 实现了蓝牙打印,正在进一步完善,欢迎留言交流 :) Github链接
  • 首先生成二维码图片:(这里我用的zxing框架) /** * 生成二维码 要转换的地址或字符串,可以中文 * * @param url * @param width * @param height * @return */ public Bitmap createQRImage(String ...
  • 2 网页打印(将图片独立成一个页面调用打印即可)。这种方式尝试了多次,最终找到想要答案。。先看效果图 图a 网页制作效果 图B 其实功能很简单, 主要2个细节点。 1 需要在打印机设置打印本身的尺寸。我的这...
  • 利用vba批量打印Excel模板,模板里面的二维码不能更新,不知道有没有解决的办法?具体点情况如下:将测试数据转换到Excel模板里面,打印...保存的Excel数据文件现实二维码图片是OK的,就是连续打印的时候不能更新打印
  • Android 热敏打印机打印二维码

    千次阅读 2015-10-21 10:01:30
    最近项目需要研究下Android通过usbhost和蓝牙... 昨天晚上说抽时间来写一篇关于Android 热敏打印机打印二维码图片的文章,所幸在下班之前把它给写了,和大家分享吧。我的Android机器有内置热敏打印机的,我把a
  • 一个打印输出页面想在尾部添加一张图片二维码,不知如何实现,无法直接在模板页插入图片,该用何种方法插入 $content .= "送货地点:" . $res['address'] . $style; $content .= "联系电话:" . $res['tel'] ....
  • 最近在做小票打印这块,项目需求是蓝牙和WiFi两种都要实现,开始做的时候也是一脸懵,然后网上找了一些代码,看了好多博主的文章...先来看看WiFi打印(旁边的色块是打印纸自带的,我也很无奈) 首先在你的activity...
  • 一维码只能由数字和字母组成,而二维码不仅能存储数字和字母,还能储存汉字、文字和图片等信息,它的字符集包括所有128个字符,最大数据含量1850个字符,这要比一维码的数据容量多的多,因此二维码的应用领域要...
  • 打印机打印出来的二维码是一张图,所以要得到img文件的图片流,不是文本流,下面将流进行了转换; code: package org.fdcch.iotserver.persenter; import android.graphics.Bitmap; import android.graphics....
  • 这个shell脚本我在工作中开发的,适合在旧有系统,无源码但又希望实现二维码打印功能的系统
  •  昨天晚上说抽时间来写一篇关于Android 热敏打印机打印二维码图片的文章,所幸在下班之前把它给写了,和大家分享吧。我的Android机器有内置热敏打印机的,我把apk跑在我的Android机器上的,操作程序打印的。 ...
  • 问题这样,最近在用热敏打印机做东西,其中一向可能要涉及到热敏打印机打印二维码的问题: 并口打印(USB映射为并口): 当次打印二维码的的时候图片总有很多白线。 热敏打印机不放纸张的时候选择打印二维码...
  • 但问题是打印出来的二维码图片不是完整的, 红色框为打印出来的效果。 ![图片说明](https://img-ask.csdn.net/upload/201801/31/1517385381_162917.jpg) 是否需要调整图片的宽度高度? 有没有高手能给个实际代码...

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 181
精华内容 72
关键字:

二维码打印是打印图片