2011-04-28 96 views
2

我想將圖像和其他文檔存儲在PostgreSQL表中,以及每個圖像的縮略圖。原始文檔和縮略圖將是兩個獨立的bytea字段。 PostgreSQL在Linux上運行。如何在PostgreSQL中創建縮略圖

因爲圖像數據可能來自多個不同的應用程序,所以我希望PostgreSQL中的圖像處理代碼(用於創建縮略圖)作爲函數,而不是每個應用程序都必須創建縮略圖。 PostgreSQL有什麼方法可以創建圖像的縮略圖嗎?

+0

您在中層使用什麼平臺? – Jordan 2011-04-29 15:26:41

+0

@Jordan我們沒有中間層。業務邏輯位於數據庫 – 2011-05-10 00:43:35

回答

4

PostPic聽起來像你正在尋找的Postgres的擴展。

在他們的wiki描述你將能夠調整和輕鬆創建縮略圖:

功能縮略圖(我的圖像,大小int column)返回圖像

功能調整大小(我的圖像,W INT ,h INT)退貨圖片

2

我可以改爲建議所有應用程序使用通用接口或API嗎?

對於我的攝影平臺,我有一個上傳API,一切進展順利,雖然有大約4種不同的方式來實際執行上傳(瀏覽器,桌面,手機和軟件插件)。 Upload API然後具有用一些功能強大且性能良好的庫(我使用Python,PIL)操縱圖像的功能,然後將它們保存到數據庫(實際上,我保存到文件系統並引用它們數據庫,但這個想法是一樣的)。

另一種方法是縮略圖生成器服務可以駐留在數據庫之外,然後偶爾遍歷所有尚未生成縮略圖的行,生成一個,然後將其存儲回Postgres。

你要求的性能受到傷害的世界,如果你最終做的Postgres的內部圖像處理,特別是在內存方面。

0

最簡單的答案:不要將圖像存儲在數據庫中。速度緩慢,效率低下,不能擴展,使備份時間更長。

而當你將它們存儲在文件系統 - 只需添加中間件調整它們的大小,或者一個簡單的守護進程將調整所有新圖像。

+2

我們在Postgres的經驗是,它不是很慢,它非常有效,它具有擴展性,並且使備份更容易。它保持文件數據和元數據的參照完整性。 – 2011-04-29 09:22:03

+1

+1給Rob的回覆。快速,有效的擴展,使備份更容易,並保持文件的參照完整性。只是...不在元數據的同一個表中的bytea字段中。 :-) – 2011-05-08 15:00:48

0

有沒有辦法對PostgreSQL是 能夠創建 圖像的縮略圖?

不。PostgreSQL是一個數據庫引擎,它只是允許存儲和檢索數據,並在一定程度上處理它。但是在它內部做一些圖像處理可能會太過分。 圖片大小調整應該在數據庫之外完成。

而且,正如其他評論者所說,還應考慮不將圖像數據存儲在數據庫內的選項 - 只有一些路徑或定位器。這是可選的,但通常更實用。 看了一些相關的問題: Storing Images in DB - Yea or Nay?Storing a small number of images: blob or fs?

+1

當然,PostgreSQL是一個數據庫引擎,但是你可以使用各種語言編寫函數來完成任何事情。我們考慮過使用文件系統 - 實際上這就是我們現在正在做的 - 但是這對於複製和維護參照完整性有很多不同的挑戰。 – 2011-04-29 09:18:39

0

我永遠只能在Perl黑客幾個微不足道的功能,但機會是有很多相應的庫,如果你安裝PL/perlu。

如果PL/perl2是不是一種選擇,配置PL/perl的相應:

plperl.use_strict = true 
plperl.on_init = 'use stuff1; use stuff2;'