はじめに
golang からPDFの表紙サムネを高速に作成する方法を紹介します。
よくある選択肢としてはImageMagickがあると思いますが、今回はより軽量なlibvipsを利用します。
やってみよう
必用なもの
- golang
- libvips (
apt insall libvips
on Utuntu 20.04)
やりかた?
libvips を golang から使えるようにしてくれるありがたいパッケージ bimg (https://github.com/h2non/bimg) を使います。
main.go
package main
import (
"log"
"github.com/h2non/bimg"
)
func main() {
buffer, err := bimg.Read("input.pdf")
if err != nil {
log.Fatal(err)
}
jpg, err := bimg.NewImage(buffer).Convert(bimg.PNG)
if err != nil {
log.Fatal(err)
}
thumb, err := bimg.NewImage(jpg).Resize(256, 256)
if err != nil {
log.Fatal(err)
}
bimg.Write("thumb.png", thumb)
}
input.pdf を用意して上記のコードを実行すると、PDFの1ページ目のサムネが thumb.png に保存されます。
非常に高速で大きなサイズのPDFでも高速でした。
ファイラーやDrive系サービス用のサムネ生成などにはいいかもしれません。