Как создавать миниатюры в PostgreSQL - PullRequest
2 голосов
/ 28 апреля 2011

Я хочу хранить изображения и другие документы в таблице PostgreSQL вместе с миниатюрой каждого изображения. Исходный документ и эскиз будут двумя отдельными байтовыми полями. PostgreSQL работает в Linux.

Поскольку данные изображения могут поступать из нескольких разных приложений, я хотел бы иметь код обработки изображений (для создания эскиза) в PostgreSQL как функцию, а не каждое отдельное приложение, создающее эскиз. Есть ли способ для PostgreSQL создать миниатюру изображения?

Ответы [ 5 ]

4 голосов
/ 21 марта 2016

PostPic звучит как расширение Postgres, которое вы ищете.

Как описано в их вики , вы сможете легко изменять размеры и создавать эскизы:

ФУНКЦИЯ thumbnail (i image, размер INT) ВОЗВРАЩАЕТ image

FUNCTION resize (i image, w INT, h INT) ВОЗВРАЩАЕТ image

2 голосов
/ 28 апреля 2011

Могу ли я предложить вместо этого, чтобы все ваши приложения вместо этого использовали общий интерфейс или API?

Для моей платформы для фотографий у меня есть API загрузки, через который все проходит, хотя на самом деле существует около 4 различных способоввыполнить загрузку (браузер, рабочий стол, телефон и программный плагин).Затем API загрузки имеет функцию для управления изображениями с помощью некоторых мощных и производительных библиотек (я использую Python, поэтому PIL), а затем сохраняю их в базу данных (на самом деле, я сохраняю в файловую систему и ссылаюсь на них вБД, но идея та же).

Альтернативой является то, что служба генератора миниатюр может находиться за пределами вашей базы данных, а затем периодически перебирать все строки, в которых еще не создано миниатюра,сгенерируйте его, а затем сохраните его обратно в Postgres.

Вы просите о снижении производительности, если в конечном итоге вы будете выполнять манипуляции с изображениями внутри Postgres, особенно на стороне памяти.

0 голосов
/ 08 мая 2011

Я когда-либо взламывал лишь несколько тривиальных функций в perl, но есть вероятность, что при установке pl / perlu есть множество подходящих библиотек.

Если pl / perl2 не является опцией, настройте pl /Perl соответственно:

plperl.use_strict = true
plperl.on_init = 'use stuff1; use stuff2;'
0 голосов
/ 28 апреля 2011

Есть ли способ для PostgreSQL быть возможность создать эскиз изображение

Нет. PostgreSQL - это движок базы данных, он просто позволяет хранить и извлекать данные и в некоторой степени манипулировать ими. Но выполнение некоторой обработки изображений внутри было бы слишком далеко. Изменение размера изображения должно выполняться вне базы данных.

И, как говорит другой комментатор, рассмотрите также возможность не хранить данные изображения в базе данных - только какой-нибудь путь или локатор. Это необязательно, но часто это более практично. Прочитайте некоторые связанные вопросы: Хранение изображений в БД - да или нет? , Хранение небольшого количества изображений: blob или fs?

0 голосов
/ 28 апреля 2011

Самый простой ответ: не хранить изображения в базе данных. Это медленно, неэффективно, не масштабируется, резервное копирование занимает больше времени.

А когда вы сохраните их в файловой системе - просто добавьте промежуточное программное обеспечение для изменения их размера или простой демон, который изменит размер всех новых изображений.

...