使用Python从数据库存储和检索图像

3 投票
3 回答
21268 浏览
提问于 2025-04-15 20:36

我想把每个人的头像图片存储在数据库里,然后在需要的时候把它们取出来,保存为.jpg格式的文件,并展示给用户。

我该怎么把存储在数据库里的图片数据转换成图片,并保存在本地呢?

3 个回答

1

为什么不直接把图片存放在文件系统里,只在数据库中存储它们的链接呢?这样做更简洁,而且不会占用太多数据库的空间。

而且,你也不需要用什么复杂的二进制函数去从数据库里读取这些图片,这样可以节省内存和加载时间。

你有没有特别的理由想把图片存储在数据库里呢?

谢谢!

2

标准的做法是,当图片上传时,只把它转换成JPG格式一次。然后把这个JPG文件保存到系统的文件夹里。数据库只用来存储这个图片的相对路径。

当你想要显示这个图片时,只需要用HTML代码:

<img src="/images/relative/path/to/my/image.jpg" />

然后设置你的网页服务器(比如nginx、lighttpd等),让它能够提供你保存图片的那个文件夹,路径设置为虚拟目录 /images

9

这个StackOverflow的问题是一个很好的起点,帮助你判断是把图片存储在数据库里还是存储在文件系统中。

在数据库中存储图片 - 是还是不是?

我在我的博客上也写过相关的问题。

http://www.atalasoft.com/cs/blogs/loufranco/archive/2007/12/03/images-in-databases-part-i-what-to-store.aspx

http://www.atalasoft.com/cs/blogs/loufranco/archive/2007/12/04/images-in-databases-part-ii-web-images-are-random-access.aspx

http://www.atalasoft.com/cs/blogs/loufranco/archive/2009/04/28/document-storage-database-blobs-or-the-filesystem.aspx

简单来说:如果图片比较小,而且数量不多,把它们存储在数据库里的“blob”是可以的(这样备份、控制访问、事务处理等都比较简单)。但是,和文件系统相比,性能会差一些——这就是一个权衡。大多数实际应用(尤其是大型网站)会选择使用文件系统,但在某些情况下使用blob也是合理的。

这个blob(或者说文件)其实就是编码后的数据(比如JPG格式)——它们是完全相同的一串字节。在网页应用中,你会用到标签;如果你在做桌面应用程序,就要看看它提供了哪些组件来显示图片。

如果你使用blob,并且需要在网页应用中显示,那么标签的src属性会指向一个脚本或视图等,这个脚本会返回一个内容类型,设置为图片的mime类型(比如image/jpeg)以及blob的内容。

撰写回答