写了一个图像服务 Image Server

2019/06/18 | 1分钟阅读 | 更新于 2019/06/18

写了一个图像服务 Image Server

六分之一个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 有着巨大的体积优势。

© 2026 香蕉引擎故障报告

🌱 Powered by Hugo with theme Dream.

关于

要怎么介绍自己呢,🤔。

很早以前是作为 Web 前端在学习的,但是工作第一年就成为了全干工程师。喜欢尝试各种东西,什么都会一点。

一直很喜欢 Ebiten 游戏引擎 ,特别简洁,用它做过一些小东西,可以查看这个分类 。另外特别推荐这个木鱼 ,是一个相对完整的小玩意儿,包含手搓的一个简单的 UI 框架;支持鼠标和键盘操作;有多语言和主题切换功能;同时支持 Web 端和客户端。它的源代码在 bin16/wooden-fish

主题

网站基于 Hugo,当前使用的是 hugo-theme-dream 主题的修改版 ,根据我的需要,做了一些对 PaperMod 的兼容。

我自己也写过主题 ,但是没有别人写的好看。

正在从我的笔记中往外搬运内容

等待更新:

  • 从《锈湖》中学了些什么东西
  • 我拿 React 写解谜游戏的经过
  • 基于 Pocketbase 的 Pocket Memos
  • 数独!