二维码生成,加文字处理,在非docker环境下运行正常,docker下报错。
FontMetrics类依赖了系统组件,只需安装依赖即可解决。

Docker版本 openjdk:8-jdk-alpine  Alpine没有自带默认字体造成的NullPointerException异常处理

    at sun.awt.FontConfiguration.getVersion(FontConfiguration.java:1264)at sun.awt.FontConfiguration.readFontConfigFile(FontConfiguration.java:219)at sun.awt.FontConfiguration.init(FontConfiguration.java:107)at sun.awt.X11FontManager.createFontConfiguration(X11FontManager.java:774)at sun.font.SunFontManager$2.run(SunFontManager.java:431)at java.security.AccessController.doPrivileged(Native Method)at sun.font.SunFontManager.<init>(SunFontManager.java:376)at sun.awt.FcFontManager.<init>(FcFontManager.java:35)at sun.awt.X11FontManager.<init>(X11FontManager.java:57)at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)at java.lang.reflect.Constructor.newInstance(Constructor.java:423)at java.lang.Class.newInstance(Class.java:442)

代码如下:

/*** 生成中间加文字的二维码* params:content:二维码内容* pressText:二维码中间的文字*/public static BufferedImage toTextQrcode(String pressText, String content) {Map<EncodeHintType,Object> hints = new HashMap<EncodeHintType, Object>();hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);BitMatrix matrix = null;try {matrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, 200, 200,hints);} catch (WriterException e) {e.printStackTrace();return null;}int width = matrix.getWidth();int height = matrix.getHeight();BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);try {pressText = new String(pressText.getBytes(), "utf-8");} catch (UnsupportedEncodingException e) {e.printStackTrace();}Graphics g = image.createGraphics();g.setColor(Color.BLACK);Font font = new Font(Font.SERIF, Font.BOLD, 24);g.setFont(font);FontMetrics metrics = null;try {metrics = g.getFontMetrics(font);} catch ( Exception e){e.printStackTrace();}int textWidth = metrics.stringWidth(pressText);int textHeight = matrix.getHeight();// 文字在图片中的坐标 这里设置在中间int startX = (WIDTH - metrics.stringWidth(pressText)) / 2;int startY = (HEIGHT - 40)/2;for (int x = 0; x < width; x++) {for (int y = 0; y < height; y++) {if (x>startX && x<(startX+textWidth)&& y>startY && y<(startY+26)){image.setRGB(x, y,WHITE);} else {image.setRGB(x, y, matrix.get(x, y) == true ? BLACK : WHITE);}}}g.drawString(pressText, startX, startY+21);g.dispose();return image;}  

报错位置

metrics = g.getFontMetrics(font);     

Alpine Linux是一个面向安全应用的轻量级Linux发行版。它采用了musl libc和busybox以减小系统的体积和运行时资源消耗,同时还提供了自己的包管理工具apk。

apk update
update:从远程镜像源中更新本地镜像源索引。
update命令会从各个镜像源列表下载APKINDEX.tar.gz并存储到本地缓存,一般在/var/cache/apk/(Alpine在该目录下)、/var/lib/apk/ 、/etc/apk/cache/下。

初次使用

RUN echo -e "https://mirror.tuna.tsinghua.edu.cn/alpine/v3.4/main\n\
https://mirror.tuna.tsinghua.edu.cn/alpine/v3.4/community" > /etc/apk/repositories
RUN apk --update add curl bash ttf-dejavu
RUN rm -rf /var/cache/apk/*

下载超级慢,并且中断报错。      
因为文字只处理数字,无中文所以设置环境为英文,少下载些字体

ENV LANG en_US.UTF-8
RUN apk add --update ttf-dejavu fontconfig

docker打包-》运行-》测试-》通过。

非docker环境字体安装
1、Centos 系统处理:

yum install fontconfig
fc-cache --force

2、Alpine 系统处理:

apk add fontconfig
apk add --update ttf-dejavu
fc-cache --force

docker-Alpine添加字体支持功能相关推荐

  1. 富文本中添加字体选项功能_扑中的字体功能

    富文本中添加字体选项功能 A little extra help for styling your text 样式设置方面的一些额外帮助 I recently learned about a litt ...

  2. 为Gridea主题添加思源宋体字体支持

    Added Noto Serif SC font support for Gridea theme 文章同时上传于本人独立博客 wherelse.cc,欢迎访问 思源宋体作为一款比较适合阅读的开源衬线 ...

  3. 如何使用vs将asp.net core项目添加容器支持并发布docker镜像到私有dockerhub和添加k8s/helm管理...

    这篇文章介绍一下,如何使用VS2017给asp.net core添加容器支持,并发布镜像到私有docker hub,然后用chart管理容器镜像的操作流程. 话不多说,just do it. 新建项目 ...

  4. docker脚本安装 阿里云_让运行在 Docker 中的 Ghost 支持阿里云 OSS

    本文使用「署名 4.0 国际 (CC BY 4.0)」许可协议,欢迎转载.或重新修改使用,但需要注明来源. 署名 4.0 国际 (CC BY 4.0) 本文作者: 苏洋 创建时间: 2020年03月1 ...

  5. 使用prismjs为网站添加代码高亮功能

    prismjs 是一款轻量.可扩展的代码语法高亮库,使用现代化的 Web 标准构建,使用 Prismjs 可以快速为网站添加代码高亮功能,支持超过113中编程语言,还支持多种插件,是简洁.高效的代码高 ...

  6. wordpress主题ajax,为自制WordPress主题/插件的后台设置页面添加ajax支持

    本文目录 [隐藏] 1PHP部分 1.1安全第一 1.2定义一些用得上的常量 1.3I18n=国际化支持 1.4添加菜单项 1.5美化下菜单项前面的icon 1.6设置页面/后台的HTML结构 1.7 ...

  7. tailwindcss 官网(五)核心概念:添加新的功能类、函数与指令(@tailwind、@apply、!important、@layer、@variants、 theme())、px、em、rem

    tailwindcss 官网(五)核心概念:添加新的功能类.函数与指令(@tailwind.@apply.!important.@layer.@variants.@responsive. theme( ...

  8. Docker 1.13版本新增功能说明

    前言 Docker 1.13 在 2017 年 1 月 18 日发布了.从 2016 年 7 月 29 日发布 1.12 发布以来,已经过去 5 个多月了,对于活跃的 Docker 社区来说,已经很久 ...

  9. 在Docker里使用(支持镜像继承的)supervisor管理进程(转)

    这篇文章是受 dockboard 之托帮忙翻译的与 docker 有关的技术文章.译自 Using Supervisor with Docker to manage processes (suppor ...

最新文章

  1. Ubantu安装maven
  2. 鄙人为啥要在博客上记录学到的技术细节?
  3. Zookeeper分布式一致性原理(二):一致性协议
  4. 理解spark闭包以及broadcast(转载)
  5. TCP三次握手、四次挥手、socket,tcp,http三者之间的区别和原理
  6. interface关键字
  7. 都灵JVM编程语言:使用ANTLR构建高级词法分析器
  8. Spring Data Solr教程:向所有存储库添加自定义方法
  9. showdoc如何创建文件夹_showDoc生成文档
  10. etcd和redis的比较和日常使用场景
  11. 英文标点符号翻译大全
  12. 基于visual Studio2013解决C语言竞赛题之1012连接字符串
  13. 程序员怒斥:虎牙HR真奇葩,通知我面试,又何必当面羞辱我一番?
  14. IDEA连接PostgreSQL数据库
  15. 两种MBR分区表恢复方法
  16. 在线免费OCR文字识别工具,强烈推荐,这是目前用过最良心的
  17. Maven 部署私服依赖
  18. Git-远程仓库【转】
  19. POJ - 3713 (Transferring Sylla)
  20. 民生银行京东三位大咖,手把手教你构建用户画像

热门文章

  1. 力扣—— 19. 删除链表的倒数第 N 个结点(java)、剑指 Offer 22. 链表中倒数第k个节点(java)
  2. Linux上传GitHub【超详细】
  3. 新版曝光骗子公示PHP系统源码+云黑系统
  4. 浏览器输入一个URL地址后发生的事情
  5. 面试时如何回答面试官的问题
  6. 国内镜像大全(部分)
  7. 第05章 Go语言函数(Go语言func)
  8. 屏幕分辨率:聊一聊像素
  9. (七)继续对话库检索的闲聊系统
  10. bitwarden_rs数据备份迁移到个人window电脑上