移动端打印的实现方式参考

上一篇: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打印机 打印图片和二维码相关推荐

  1. TSC打印机打印条形码和二维码,JS实现方式

    自上一篇TSC打印条形码和二维码的文章发布以来,有不 少网友咨询相关技术, 今天全部整理一下,实现的源码和文件也全部公开. -- 2019.03.28  整理最新的js打印的实现方式 说明: 1.以下 ...

  2. uni-app H5+ 连接蓝牙打印机打印文字及二维码

    基于Native.js 实现的连接蓝牙打印机 打印效果图 核心代码 测试代码 运行设备及环境 PS: PPS: Demo 打印效果图 核心代码 /*** @Description: 蓝牙打印类 基于h ...

  3. TSC打印机打印条形码和二维码,java实现方式

    以下为java方式实现条码打印,供参考,一般可用于本地调试. 1.js和applet的实现方式见另一篇文章. 2.TSC applet和js打印测试包(包含打印机驱动.打印插件.applet和js调试 ...

  4. AD使用技巧——如何向AD里面导入图片(PCB打印图片、二维码)教程适用各个版本(17版及以前、18及以后、19、20、21版)(内附脚本文件下载)

    如何向AD里面导入图片 很多同学挑选设计了一些个人LOGO以及图片想导入到AD里面,或者想在PCB中印刷上二维码等图案.苦于缺少方法以及资源,本文详细介绍如何向AD里面导入图片,文末有导入图片所需脚本 ...

  5. TSC打印机打印条形码和二维码,applet实现方式

    applet方式实现TSC打印条码功能. applet方式打印实现复杂,最大的优点就是不用注册 dll 控件,不过现在最新的浏览器已经不支持java了,不建议使用,以下内容仅供参考. 说明: 1.ap ...

  6. Qt 打印机打印条形码,二维码

    效果演示: 二维码库用的是:qrcode 条形码使用的是:code128 可以调整部件位置,字体,标签大小,保存模板,连续打印功能,支持扫码枪操作 后期有时间会将主要功能抽取成demo进行分享

  7. android 从图片获取二维码

    之前的博客我记得讲过关于扫描二维码的内容,昨天,组长让我不仅可以扫描获取二维码,还可以通过图片获取里面的二维码.比如别人拍了一张二维码的照片,发送给你,app应该可以获取图片的二维码. 自己在网上查了 ...

  8. H5 连接蓝牙打印机,打印条码、二维码

    /*** @Description:打印初始化* @author yk* @createTime: 2021-1-16 10:37:09*/ function initPrinter() {conso ...

  9. 二维码中加图片(打印带图片的二维码)

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

最新文章

  1. 抓信插件开发遇到网页的CSS不起作用
  2. react怎么存上一页_【React】存储全局数据
  3. Python 开发者在迁移到 Go(lang) 时需要知道哪些事?
  4. C语言二叉树实验报告流程图,二叉树的建立与遍历实验报告(c语言编写,附源代码).doc...
  5. python整数类型没有取值范围限制_详解Python中6种数据类型
  6. 为什么你设计的网页不够惊艳?
  7. C++_一维数组案例_五只小猪称体重_案例元素逆置(调换)_案例冒泡排序---C++语言工作笔记020
  8. 怎样彻底删除系统服务项
  9. 安装mysql程序运行出错_如何解决mysql安装后.net程序运行出错的问题
  10. 【c语言】推断一个数是不是2的n次方
  11. java2wsdl_Java2WSDL之java实现
  12. POS收单地区代码表(2015年3月版)
  13. C语言 猴子吃桃的问题 猴子第一天摘下若干个桃子,当即吃了一半,又多吃了一个。 第二天早上将剩下的桃子吃一半,又多吃一个。以后每天早上都吃了前一天剩下的一半零一个。 到第N天早上想再吃时只剩下一个桃子
  14. JAVA之理解面向对象的内涵
  15. [Machine Check机制]X86服务器Linux系统对于MCE的Log解析
  16. Bounding box regression RCNN系列网络中矩形框的计算
  17. IoT黑板报:英特尔公布LTE通讯模组XMM 7560
  18. 我爱你,与你无关 【没有我的可怜人儿】
  19. 用C#读取二进制文件
  20. KPW3 MEMORY ERROR维修直播

热门文章

  1. [附源码]Node.js计算机毕业设计高校运动会管理系统 Express
  2. 一键分享到新浪微博、腾讯微博、搜狐微博、人人网、开心网、百度收藏等js代码大全...
  3. react native ScrollView实现滑动锚定,滑动到指定位置
  4. 记一次作为主讲人的培训经历
  5. Linux minerd木马清除(续)
  6. 【性能测试】构造性能测试的数据
  7. java基于ssm的校园教学评价系统设计与实现 aspnet python springboot
  8. XML详细入门教程[PDF]
  9. 高等数学学习笔记——第四讲——初等函数(2. 初等函数)
  10. SQL*Loader总结sqlldr