UniAPP Android 蓝牙 ESCPOS打印机 打印图片和二维码
移动端打印的实现方式参考
上一篇:DCloud UniAPP Android 蓝牙连接ESCPOS打印机
本片来实现 上一篇中 打印图片中 的 img (图片点阵灰度数据)
var img=XXXXX //图片点阵灰度数据
printer.printImg(img);
对应的实现方式使用C#实现,draw2PxPoint方法将指定图片转成ESCPOS打印机可以识别的图片打印指令
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;namespace CommonPrint.ImageUtil
{public class ImageHelper{public static Image UrlToImage(string url){WebClient mywebclient = new WebClient();byte[] Bytes = mywebclient.DownloadData(url);using (MemoryStream ms = new MemoryStream(Bytes)){Image outputImg = Image.FromStream(ms);return outputImg;}}public static int[] draw2PxPoint(Bitmap bmp){//第一步调整图片高宽 到目标大小 商米设备最大支持124~125个点位的图片打印int newWidth = 120;int newHeight = 120;bmp = ZoomImage(bmp, newWidth, newHeight);List<int> data = new List<int>();//设置行距为0的指令data.Add(0x1B);data.Add(0x33);data.Add(0x00);int temp = 0;int turn = 0;// 逐行打印for (int j = 0; j < bmp.Height / 12f; j++){//打印图片的指令data.Add(0x1B);data.Add(0x2A);data.Add(32);//单精度data.Add((byte)(bmp.Width % 256)); //nL 因为一个Byte最大255 表示大于255的数据需要用2位来处理( nL+nH×256)data.Add((byte)(bmp.Width / 256)); //nH//对于每一行,逐列打印for (int i = 0; i < bmp.Width; i++){每一列24个像素点,分为3个字节存储for (int m = 0; m < 3; m++){StringBuilder sb = new StringBuilder();//一次性读4个点 单精度 需要放大Y轴方向的数据 所以取一个点占2位for (int n = 0; n < 4; n++){var p = px2Byte(i, j * 12 + m * 4 + n, bmp);//每个点Y轴方向重复一次 占2位sb.Append(p);sb.Append(p);}//Java上 byte 是-128 ~ 127 255=-1int res = Convert.ToInt32(sb.ToString().Substring(1, 7), 2);if (res > 127) {res = res - 256;}data.Add((byte)res);}}data.Add(10);//换行}bmp.Dispose();return data.ToArray();}public static byte px2Byte(int x, int y, Bitmap bmp){if (x < bmp.Width && y < bmp.Height){byte b;Color color = bmp.GetPixel(x, y);int gray = (int)(0.29900 * color.R + 0.58700 * color.G + 0.11400 * color.B);if (gray > 128){b = 0;}else{b = 1;}return b;}return 0;}/// <summary>/// 等比例缩放图片/// </summary>/// <param name="bitmap">图片</param>/// <param name="destHeight">高度</param>/// <param name="destWidth">宽度</param>/// <returns></returns>private static Bitmap ZoomImage(Bitmap bitmap, int destHeight, int destWidth){try{System.Drawing.Image sourImage = bitmap;int width = 0, height = 0;//按比例缩放int sourWidth = sourImage.Width;int sourHeight = sourImage.Height;if (sourHeight > destHeight || sourWidth > destWidth){if ((sourWidth * destHeight) > (sourHeight * destWidth)){width = destWidth;height = (destWidth * sourHeight) / sourWidth;}else{height = destHeight;width = (sourWidth * destHeight) / sourHeight;}}else{width = sourWidth;height = sourHeight;}Bitmap destBitmap = new Bitmap(destWidth, destHeight);Graphics g = Graphics.FromImage(destBitmap);g.Clear(Color.Transparent);//设置画布的描绘质量g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;g.DrawImage(sourImage, new Rectangle((destWidth - width) / 2, (destHeight - height) / 2, width, height), 0, 0, sourImage.Width, sourImage.Height, GraphicsUnit.Pixel);g.Dispose();//设置压缩质量System.Drawing.Imaging.EncoderParameters encoderParams = new System.Drawing.Imaging.EncoderParameters();long[] quality = new long[1];quality[0] = 100;System.Drawing.Imaging.EncoderParameter encoderParam = new System.Drawing.Imaging.EncoderParameter(System.Drawing.Imaging.Encoder.Quality, quality);encoderParams.Param[0] = encoderParam;sourImage.Dispose();return destBitmap;}catch{return bitmap;}}}
}
UniAPP Android 蓝牙 ESCPOS打印机 打印图片和二维码相关推荐
- TSC打印机打印条形码和二维码,JS实现方式
自上一篇TSC打印条形码和二维码的文章发布以来,有不 少网友咨询相关技术, 今天全部整理一下,实现的源码和文件也全部公开. -- 2019.03.28 整理最新的js打印的实现方式 说明: 1.以下 ...
- uni-app H5+ 连接蓝牙打印机打印文字及二维码
基于Native.js 实现的连接蓝牙打印机 打印效果图 核心代码 测试代码 运行设备及环境 PS: PPS: Demo 打印效果图 核心代码 /*** @Description: 蓝牙打印类 基于h ...
- TSC打印机打印条形码和二维码,java实现方式
以下为java方式实现条码打印,供参考,一般可用于本地调试. 1.js和applet的实现方式见另一篇文章. 2.TSC applet和js打印测试包(包含打印机驱动.打印插件.applet和js调试 ...
- AD使用技巧——如何向AD里面导入图片(PCB打印图片、二维码)教程适用各个版本(17版及以前、18及以后、19、20、21版)(内附脚本文件下载)
如何向AD里面导入图片 很多同学挑选设计了一些个人LOGO以及图片想导入到AD里面,或者想在PCB中印刷上二维码等图案.苦于缺少方法以及资源,本文详细介绍如何向AD里面导入图片,文末有导入图片所需脚本 ...
- TSC打印机打印条形码和二维码,applet实现方式
applet方式实现TSC打印条码功能. applet方式打印实现复杂,最大的优点就是不用注册 dll 控件,不过现在最新的浏览器已经不支持java了,不建议使用,以下内容仅供参考. 说明: 1.ap ...
- Qt 打印机打印条形码,二维码
效果演示: 二维码库用的是:qrcode 条形码使用的是:code128 可以调整部件位置,字体,标签大小,保存模板,连续打印功能,支持扫码枪操作 后期有时间会将主要功能抽取成demo进行分享
- android 从图片获取二维码
之前的博客我记得讲过关于扫描二维码的内容,昨天,组长让我不仅可以扫描获取二维码,还可以通过图片获取里面的二维码.比如别人拍了一张二维码的照片,发送给你,app应该可以获取图片的二维码. 自己在网上查了 ...
- H5 连接蓝牙打印机,打印条码、二维码
/*** @Description:打印初始化* @author yk* @createTime: 2021-1-16 10:37:09*/ function initPrinter() {conso ...
- 二维码中加图片(打印带图片的二维码)
在二维码中,放入图片,遮挡一部分是被允许的. 二维码在少许损伤的情况下还可以读取出来,图片可以放置的位置如图的黄色区域.(具体可以放多大要看二维码生成时的纠错能力) 二维码的纠错级别: 纠错级别越高, ...
最新文章
- 抓信插件开发遇到网页的CSS不起作用
- react怎么存上一页_【React】存储全局数据
- Python 开发者在迁移到 Go(lang) 时需要知道哪些事?
- C语言二叉树实验报告流程图,二叉树的建立与遍历实验报告(c语言编写,附源代码).doc...
- python整数类型没有取值范围限制_详解Python中6种数据类型
- 为什么你设计的网页不够惊艳?
- C++_一维数组案例_五只小猪称体重_案例元素逆置(调换)_案例冒泡排序---C++语言工作笔记020
- 怎样彻底删除系统服务项
- 安装mysql程序运行出错_如何解决mysql安装后.net程序运行出错的问题
- 【c语言】推断一个数是不是2的n次方
- java2wsdl_Java2WSDL之java实现
- POS收单地区代码表(2015年3月版)
- C语言 猴子吃桃的问题 猴子第一天摘下若干个桃子,当即吃了一半,又多吃了一个。 第二天早上将剩下的桃子吃一半,又多吃一个。以后每天早上都吃了前一天剩下的一半零一个。 到第N天早上想再吃时只剩下一个桃子
- JAVA之理解面向对象的内涵
- [Machine Check机制]X86服务器Linux系统对于MCE的Log解析
- Bounding box regression RCNN系列网络中矩形框的计算
- IoT黑板报:英特尔公布LTE通讯模组XMM 7560
- 我爱你,与你无关 【没有我的可怜人儿】
- 用C#读取二进制文件
- KPW3 MEMORY ERROR维修直播
热门文章
- [附源码]Node.js计算机毕业设计高校运动会管理系统 Express
- 一键分享到新浪微博、腾讯微博、搜狐微博、人人网、开心网、百度收藏等js代码大全...
- react native ScrollView实现滑动锚定,滑动到指定位置
- 记一次作为主讲人的培训经历
- Linux minerd木马清除(续)
- 【性能测试】构造性能测试的数据
- java基于ssm的校园教学评价系统设计与实现 aspnet python springboot
- XML详细入门教程[PDF]
- 高等数学学习笔记——第四讲——初等函数(2. 初等函数)
- SQL*Loader总结sqlldr