大家好,我是皇子
实操 "github.com/davidbyttow/govips/v2/vips" 库将 pdf 转成图片的过程
官方文档:https://github.com/davidbyttow/govips
关于libvips:https://github.com/libvips/libvips
该包通过将所有图像操作公开在 Go 中的第一类类型上,包装了 libvips 图像处理库的核心功能。Libvips 通常比其他图形处理器(如 GraphicsMagick 和 ImageMagick)快 4-8 倍。检查基准测试:速度和内存使用。
这样做的目的是使开发人员能够在 Go 中构建速度极快的图像处理器,这非常适合并发请求。
解决所有问题后打包好的镜像:
docker pull leeprince/golang1_19:govips_v2
一、完整 Dockerfile
后来才发现官方有基于ubuntu构建的环境(https://github.com/davidbyttow/govips/tree/master/build),发现原来
libvips可以直接通过apt-get install -y libvips-dev,并包含其他依赖,如:imagemagick、libmagickwand,但是同样也遇到一些问题,在下面给出了解决办法
FROM golang:1.19
# Ignore APT warnings about not having a TTY
ENV DEBIAN_FRONTEND noninteractive
# install build essentials
RUN apt-get update && \
apt-get install -y wget build-essential pkg-config --no-install-recommends
# Install ImageMagick deps
RUN apt-get -q -y install libvips-dev libglib2.0-dev libexpat1-dev \
libtiff5-dev libgsf-1-dev \
libjpeg-dev libpng-dev libtiff-dev \
libgif-dev libx11-dev ghostscript --no-install-recommends
ENV LIBVIPS_VERSION=8.15.1
ENV LIBVIPS_DIR_PREFIX=/etc/vips
RUN wget https://github.com/libvips/libvips/archive/refs/tags/v${LIBVIPS_VERSION}.tar.gz
RUN apt-get -q -y install meson
RUN tar -xvzf v${LIBVIPS_VERSION}.tar.gz && \
cd libvips* && \
meson setup build-dir --prefix=${LIBVIPS_DIR_PREFIX} && \
cd build-dir && \
ninja && \
ninja test && \
ninja install
WORKDIR /www
VOLUME ["/www"]
EXPOSE 80
CMD tail -f /dev/null
二、问题
1)libjpeg-turbo8-dev
Package libjpeg-turbo8-dev is not available, but is referred to by another package.
解决:
libjpeg-dev 代替 libjpeg-turbo8-dev
2)meson
安装 libvips 时需要使用 meson, 所以需要提前安装
apt-get install -y meson
3)error: cannot find builtin CJK font
error: cannot find builtin CJK font
warning: unrecoverable error; ignoring rest of page
效果:pdf 文件转图片时,除了签章,中文部分都没有显示在图片上
解决:
apt-get install -y fonts-noto-cjk
fonts-noto-cjk 包含 cjk 语言包,但是安装后不报错了,但是问题并没有解决,只是不报错了!
继续解决:
apt-get install -y fonts-arphic-ukai
fonts-arphic-ukai 与 fonts-noto-cjk 一样的情况
最终解决:
apt-get install -y fonts-arphic-uming
建议:一次性把这些语言包都装上
apt-get -q -y install fonts-arphic-uming fonts-arphic-ukai fonts-noto-cjk --no-install-recommends
语言包
fonts-noto-cjk: Noto 字体系列,包括中文、日文、韩文等各种语言的字体。 fonts-arphic-ukai: AR PL UKai 中文字体。 fonts-arphic-uming: AR PL UMing 中文字体。
三、测试代码
官方示例,有些方法(2023-12-19)已经废弃,手动替换即可
package main
import (
"fmt"
"os"
"github.com/davidbyttow/govips/v2/vips"
)
func checkError(err error) {
if err != nil {
fmt.Println("error:", err)
os.Exit(1)
}
}
func main() {
vips.Startup(nil)
defer vips.Shutdown()
image1, err := vips.NewImageFromFile("0001.png")
checkError(err)
// Rotate the picture upright and reset EXIF orientation tag
err = image1.AutoRotate()
checkError(err)
// 导出图像
// 替换前
/*ep := vips.NewDefaultJPEGExportParams()
image1bytes, _, err := image1.Export(ep)*/
// 替换后
image1bytes, _, err := image1.ExportNative()
checkError(err)
// 写入本地文件
dirPath := "."
fileName := fmt.Sprintf("resize_%d.jpg", time.Now().Unix())
filePath := filepath.Join(dirPath, fileName)
ok, err := WriteFile(dirPath, filePath, image1bytes, false)
if !ok {
fmt.Println("fileutil.WriteFile !ok")
return
}
checkError(err)
fmt.Println("successful, filepath:", filePath)
}
四、基于镜像构建并运行
cd 通过上面的<测试代码>构建的项目中 构建镜像。目前已经测试成功,并上传到 docker hub,无需再构建镜像,仅需直接拉取: docker pull leeprince/golang1_19:govips_v2。感兴趣可以重新在本地构建
docker build -t leeprince/golang1_19:govips_v2
基于镜像构建 govips_v2 的运行环境的容器
docker run -d -v .:/www -p 8083:80 --name govips_v2_1 leeprince/golang1_19:govips_v2
进入容器
docker exec -it govips_v2_1 bash
运行代码:运行成功后,则可以将 pdf 转为图片
go run main.go
“关注我,一起成长”
记得点击转发和在看