docker-Alpine添加字体支持功能
二维码生成,加文字处理,在非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添加字体支持功能相关推荐
- 富文本中添加字体选项功能_扑中的字体功能
富文本中添加字体选项功能 A little extra help for styling your text 样式设置方面的一些额外帮助 I recently learned about a litt ...
- 为Gridea主题添加思源宋体字体支持
Added Noto Serif SC font support for Gridea theme 文章同时上传于本人独立博客 wherelse.cc,欢迎访问 思源宋体作为一款比较适合阅读的开源衬线 ...
- 如何使用vs将asp.net core项目添加容器支持并发布docker镜像到私有dockerhub和添加k8s/helm管理...
这篇文章介绍一下,如何使用VS2017给asp.net core添加容器支持,并发布镜像到私有docker hub,然后用chart管理容器镜像的操作流程. 话不多说,just do it. 新建项目 ...
- docker脚本安装 阿里云_让运行在 Docker 中的 Ghost 支持阿里云 OSS
本文使用「署名 4.0 国际 (CC BY 4.0)」许可协议,欢迎转载.或重新修改使用,但需要注明来源. 署名 4.0 国际 (CC BY 4.0) 本文作者: 苏洋 创建时间: 2020年03月1 ...
- 使用prismjs为网站添加代码高亮功能
prismjs 是一款轻量.可扩展的代码语法高亮库,使用现代化的 Web 标准构建,使用 Prismjs 可以快速为网站添加代码高亮功能,支持超过113中编程语言,还支持多种插件,是简洁.高效的代码高 ...
- wordpress主题ajax,为自制WordPress主题/插件的后台设置页面添加ajax支持
本文目录 [隐藏] 1PHP部分 1.1安全第一 1.2定义一些用得上的常量 1.3I18n=国际化支持 1.4添加菜单项 1.5美化下菜单项前面的icon 1.6设置页面/后台的HTML结构 1.7 ...
- tailwindcss 官网(五)核心概念:添加新的功能类、函数与指令(@tailwind、@apply、!important、@layer、@variants、 theme())、px、em、rem
tailwindcss 官网(五)核心概念:添加新的功能类.函数与指令(@tailwind.@apply.!important.@layer.@variants.@responsive. theme( ...
- Docker 1.13版本新增功能说明
前言 Docker 1.13 在 2017 年 1 月 18 日发布了.从 2016 年 7 月 29 日发布 1.12 发布以来,已经过去 5 个多月了,对于活跃的 Docker 社区来说,已经很久 ...
- 在Docker里使用(支持镜像继承的)supervisor管理进程(转)
这篇文章是受 dockboard 之托帮忙翻译的与 docker 有关的技术文章.译自 Using Supervisor with Docker to manage processes (suppor ...
最新文章
- Ubantu安装maven
- 鄙人为啥要在博客上记录学到的技术细节?
- Zookeeper分布式一致性原理(二):一致性协议
- 理解spark闭包以及broadcast(转载)
- TCP三次握手、四次挥手、socket,tcp,http三者之间的区别和原理
- interface关键字
- 都灵JVM编程语言:使用ANTLR构建高级词法分析器
- Spring Data Solr教程:向所有存储库添加自定义方法
- showdoc如何创建文件夹_showDoc生成文档
- etcd和redis的比较和日常使用场景
- 英文标点符号翻译大全
- 基于visual Studio2013解决C语言竞赛题之1012连接字符串
- 程序员怒斥:虎牙HR真奇葩,通知我面试,又何必当面羞辱我一番?
- IDEA连接PostgreSQL数据库
- 两种MBR分区表恢复方法
- 在线免费OCR文字识别工具,强烈推荐,这是目前用过最良心的
- Maven 部署私服依赖
- Git-远程仓库【转】
- POJ - 3713 (Transferring Sylla)
- 民生银行京东三位大咖,手把手教你构建用户画像