You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

esc_pos包中API图片字符串在80mm WiFi打印机打印异常问题

80mm WiFi打印机图片打印异常问题

打印时的图片效果(示例图)

我需要在80mm WiFi打印机上打印从API获取的Base64格式图片,目前遇到部分图片打印正常、部分打印异常的问题。

我的代码如下:

void testReceipt(NetworkPrinter printer, String img) async {
  Uint8List unit8List = base64Decode(img);
  Image? a = decodeImage(unit8List);
  print(decodeImage(unit8List));
  printer.image(a!, align: PosAlign.center);
  printer.cut();
}

可能的原因及解决办法

  • 图片尺寸适配问题:80mm打印机的标准打印宽度对应像素约为384px(不同型号略有浮动),若图片宽度超出这个范围,部分打印机无法自动适配会导致打印异常。可以添加图片缩放逻辑:
    Image? resizeImageForPrinter(Image image) {
      const printerMaxWidth = 384;
      if (image.width <= printerMaxWidth) return image;
      return copyResize(image, width: printerMaxWidth);
    }
    
    修改原代码调用缩放方法:
    void testReceipt(NetworkPrinter printer, String img) async {
      Uint8List unit8List = base64Decode(img);
      Image? originalImage = decodeImage(unit8List);
      if (originalImage == null) {
        print("图片解码失败");
        return;
      }
      Image resizedImage = resizeImageForPrinter(originalImage)!;
      printer.image(resizedImage, align: PosAlign.center);
      printer.cut();
    }
    
  • 图片格式兼容性:部分图片带透明通道或采用打印机不支持的格式(如WebP),建议转换为灰度图或纯RGB格式:
    Image convertToPrinterCompatibleFormat(Image image) {
      return copyResize(image, format: Format.luminance);
    }
    
  • Base64字符串不纯净:API返回的Base64可能带有data:image/png;base64,这类前缀,需先清理再解码:
    String cleanBase64String(String img) {
      return img.startsWith('data:image/') ? img.split(',').last : img;
    }
    
    解码前先调用清理方法:Uint8List unit8List = base64Decode(cleanBase64String(img));
  • 打印指令差异:不同品牌打印机对图片指令支持不同,可尝试用printer.rasterImage()替代printer.image(),部分打印库中该方法兼容性更强。

内容的提问来源于stack exchange,提问作者بهاء الزيادي

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 09:50:24