六分之一个2019年没发东西了。
想做个图像资源服务器,拿来放图。并且希望像 Cloudinary 那样自动返回合适的格式和质量。本来想用 golang 的 image 库来解决,但是没有合适的 webp encoder。想到还有很强的 imagemagick 能用,把图像转成什么格式,然后顺手缩放一下,然后就用 imagemagick 了。
不同格式或者尺寸的图片,在文件名里加不同的后缀。比如 thumbnail 最大 256x256,统统 jpeg,质量50。
# 刚刚意识到忘记改图像质量了
convert image.png -resize 256x256> output.jpeg
用 SQLite 简单存一下 uuid 和原始文件的关系,MIME Type, SHA256 之类的信息。上传的时候跳过已经存在的文件。请求其它格式时,已经有的直接返回,没有的现场创建。
因为只有一个人用,所以有些细节忽略了,比如拖拽上传时的文件类型判断…其实什么文件都能上传,得益于 Gin 的工作,也能拿到正确的 MIME Type 等等。随手试了一下丢个 MP4, 除了没办法转图像类型,别的都好。
Video 没办法用现有的接口做 thumbnail 了,不怕,还可以上 ffmpeg。
ffmpeg -ss 00:00:01 -i video.mp4 -vframes 1 screenshot.jpeg
这篇文章的封面是放在服务器上的,不过是 image/png,因为这种颜色数量较少的图像,用 png 有着巨大的体积优势。