![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
![]() Приветствую вас, форумчане!
Работаю сейчас над базой данных, содержащей графические поля. Большие изображения, это приблизительно 200 - 300 кб, и более 800 х 600 пикселей, записывать в БД нежелательно, ибо чем больше изображение, тем ощутимее сказывается подтормаживание при навигации (это не говоря даже об общем объёме модуля данных). Возникает необходимость предварительного (до записи в БД) сжатия изображения, находящееся в фале или буфере обмена (формат bmp или jpg), а именно нужно уменьшить как его геометрические размеры, так и объём (для jpg регулировать степень сжатия картинки). Существуют ли в природе компоненты, которые могли бы выполнять такие функции? Последний раз редактировалось Guaho, 07.06.2018 в 00:42. |
#2
|
|||
|
|||
![]() Ну, для jpeg есть соотв. модуль. так и называется. достаточно подключить в проект.
Код для изменения размеров картинки тоже достаточно простой, хотя иногда дает не самый лучший результат. Как и сильное сжатие jpeg'а. Но есть другой вариант. Вариант 1. Если есть файл-сервер или доступ к облачному хранилищу, то можно просто файлы картинок писать туда, а в БД сохранять только путь к картинке. Вариант 2. Тут еще зависит от БД. В некоторых базах можно выделить таблицу в отдельное пространство. В этом случае картинки не замедляют операции с осноной таблицей. А вообще, картинки надо грузить по мере необходимости, а не при выборке основного списка. |
#3
|
||||
|
||||
![]() БД работает на "движке" AbsoluteDataBase, все данные находятся в одном файле. Примерное ожидаемое число записей - несколько тысяч. Если изображения не сжимать, размер базы будет порядка нескольких Гиг, а это многовато, да и не нужно. Сверх-высокое качество и разрешение не требуется (база технической направленности). Грузить картинки по мере необходимости - не пойдёт, т.к. нужно сразу видеть изображение, связанное с выбранной записью, это обязательно. Вариант 1 не подойдёт, т.к. это фактически почти то же, что и БД, только вид сбоку (суммарный размер файлов всё равно окажется огромным); а "облако" категорически отпадает. Вариант 2 для моего "движка" не подходит. Остаётся или код, или компонент. Искал среди доступных граф. компонентов сторонних разработчиков - не нашёл ничего путного.
|
#4
|
|||
|
|||
![]() Ну, сжать можно так:
Код:
Перед сохранением установи его свойство CompressionQuality в желаемое значение (чем выше - тем выше качество, но и больше размер). Если правильно помню, то там от 1 до 100. Я бы рекомендовал где-то 60-70. ЗЫ. Код не проверял, так что могут быть очепятки. |
Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
Guaho (07.06.2018)
|
#5
|
||||
|
||||
![]() Благодарю за приведённый код, он указал мне направление. Я решил не играться с качеством jpg, а просто ужимать размеры независимо от типа изображения. Проведённые эксперименты показали, что такой подход вполне приемлем: урезание размеров уже даёт нужный результат по весу файла даже для bmp, и следовательно, для jpg, и не нужно играться со степенью его компрессии.
В качестве промежуточного хранилища "входящего" изображения я использовал компонент TDBImageEh из библиотеки EhLib (имя im0). Вот что получилось, может пригодится кому-нибудь: Код:
Последний раз редактировалось Guaho, 26.06.2018 в 19:22. |