Имя: Пароль:
1C
 
ХранилищеЗначения
0 Struk
 
03.01.09
17:34
Люди добрые, как в реквизите справочника физлица сжать картинку.
Пробовал так не получается. Задача уменьшить объем базы, а то она из-за фотографий превыщает 5 Гб
ФизЛицо=Справочники.ФизическиеЛица;
РП=ФЛ.ПолучитьОбъект();
ФотоБыло=РП.ОсновноеИзображение;

НовФото=Новый ХранилищеЗначения(ФотоБыло,Новый СжатиеДанных(1));

Рп.ОсновноеИзображение=НовФото;

РП.Записать();
1 ТелепатБот
 
гуру
03.01.09
17:34
2 Struk
 
03.01.09
17:35
БРРР

ФизЛицо=Справочники.ФизическиеЛица;
РП=ФЛ.ПолучитьОбъект();
ФотоБыло=РП.ОсновноеИзображение;
НовФото=Новый ХранилищеЗначения(ФотоБыло,Новый СжатиеДанных(1));
Рп.ОсновноеИзображение=НовФото;
РП.Записать();
3 Оллрайт
 
03.01.09
21:50
Можно развить тему?
А если размер фотки УЖЕ мал, тогда ее можно сделать совсем непригодной к употреблению?

Наверное надо этот момент контролировать?
4 IamAlexy
 
03.01.09
22:19
хм. а может нужно перед помещением в хранилище ограничивать размер картинки  и вес в килобайтах?
5 IamAlexy
 
03.01.09
22:19
+ а разве уровень сжатия не 9 лучше выставить?
6 IamAlexy
 
03.01.09
22:25
у себя в конфе нашел такое:

   Режим = РежимДиалогаВыбораФайла.Открытие;
   ТекстЗаголовка = "Выберите файл превью макета";
   
   ДиалогОткрытия = Новый ДиалогВыбораФайла(Режим);
   ДиалогОткрытия.Каталог = "";
   ДиалогОткрытия.МножественныйВыбор = Ложь;
   ДиалогОткрытия.Заголовок = ТекстЗаголовка;
   ДиалогОткрытия.Фильтр="Файлы картинок (*.bmp;*.tif;*.gif;*.jpg)|*.bmp;*.tif;*.gif;*.jpg";
   ДиалогОткрытия.ИндексФильтра=1;
   Если ДиалогОткрытия.Выбрать() Тогда
       ПутьФайла = ДиалогОткрытия.ПолноеИмяФайла;
       ТекФайл = Новый Файл(ПутьФайла);
       РазмерФайла = ТекФайл.Размер();
       
       Если РазмерФайла<= Константы.МаксимальныйРазмерПревью.Получить()*1024 Тогда
           ЗаполнитьПревью(ДиалогОткрытия.ПолноеИмяФайла);
       Иначе
           Предупреждение("Размер файла превью превышает "+Константы.МаксимальныйРазмерПревью.Получить()+" кб.",60);
       КонецЕсли;
       
   КонецЕсли;

соответственно процедурка заполнитьпревью создает элемент справочника где уже болтается хранилище

в хранилище естественно

СпрПревью.Хранилище = Новый ХранилищеЗначения(ПревьюКартинка, Новый СжатиеДанных(9));

кстати про сжатие прав был:

Новый СжатиеДанных(<Степень сжатия>)
Параметры:
<Степень сжатия> (необязательный)
Тип: Число. Степень сжатия алгоритма Deflation. Целое число в диапазоне -1...9. -1 - степень сжатия по умолчанию. 0 - никакого сжатия, 9 - максимальная степень сжатия.
Значение по умолчанию: -1
7 IamAlexy
 
03.01.09
22:26
соответственно в константе размер превью в килобайтах...
8 Планета Обезьян
 
04.01.09
00:04
(2) +1
9 Kuzen
 
04.01.09
00:16
а я думал что сжатие это типа архивация и ее плотность. А не то что в (3) типа сжатие за счет уухудшения качества изображения. Ведь в хранилище может быть не только картинка.
10 IamAlexy
 
04.01.09
00:26
(9)так типа архивация и есть.
они картинку сжимают сами прежде чем поместить ее в базу внешними прогами.
сжатие хранилища это типа архивации типа зип (вроде чото типа такого на курсах говорили)
11 Оллрайт
 
04.01.09
18:45
(10) тогда этот метод - не решение задачи (0).  Не пробовали архивировать фотки? То-то.. Хоть СжатиеДанных(1) используй, хоть СжатиеДанных(9).  Такое мое мнение
12 IamAlexy
 
04.01.09
18:48
(11) дык понятное дело что хоть фотки хоть видео хоть мп3 сжимай - пофиг.
но если ты туда тифф воткнешь несжатый :)
13 Chai Nic
 
04.01.09
18:56
Так в чем проблема? Можно написать обработку, которая вытащит большие картинки из базы, пережмет их с потерей качества (и/или разрешения), и запишет обратно.
14 Оллрайт
 
04.01.09
18:57
(13) если есть ссылка на готовую (или подобную) - поделись, плиз.
15 Chai Nic
 
04.01.09
18:59
Тут на 10 строчек кода обработка будет - перебор по справочнику и вызов утилиты convert.exe из пакета imagemagic. Напиши сам, это приятно и полезно. :)
16 Оллрайт
 
04.01.09
22:52
Сенкс что указал на утилиту... разберусь конечно.