C#/.Net · 2019年11月1日 0

Linux下使用.NetCore绘制图片遇到的坑

需求

绘制一张带有二维码的图片,并绘制一些文字等。

环境使用了debian docker的镜像。然而正常操作后图片上文字全是乱码,排查后发现需要以下改动:

绘图库

首先Dockerfile需要包含Linux下绘图的类库:

RUN apt-get update && apt-get install -y apt-utils libgdiplus libc6-dev

字符集

修改字符集为【zh_CN.UTF-8】。

Dockerfile中加入:

RUN apt-get install -y locales locales-all
RUN locale-gen zh_CN
RUN locale-gen zh_CN.utf8
RUN update-locale LANG=zh_CN.UTF-8 LC_ALL=zh_CN.UTF-8 LANGUAGE=zh_CN.UTF-8
ENV LANG zh_CN.UTF-8
ENV LANGUAGE zh_CN.UTF-8
ENV LC_ALL zh_CN.UTF-8

使用locale命令可以查看当前字符集。
使用locale -a命令可以查看已经下载的字符集。

字体

如果以上加入后图片中的中文还是乱码,那可能系统中没有默认的中文字体,还需要加入中文字体。

比如:将字体文件放在宿主机public/static/font/,然后复制到容器内/usr/share/fonts/myfonts/,并执行mkfontscalemkfontdirfc-cache

字体文件可以从window中C:\Windows\Fonts直接复制。

Dockerfile中加入:

RUN apt-get -y install fontconfig xfonts-utils
WORKDIR /usr/share/fonts/myfonts/
COPY public/static/font/ /usr/share/fonts/myfonts
RUN mkfontscale /usr/share/fonts/myfonts/
RUN mkfontdir /usr/share/fonts/myfonts/
RUN fc-cache





>>转载请注明原文链接地址:Linux下使用.NetCore绘制图片遇到的坑