Имя: Пароль:
1C
 
Как сделать превьюшку картинки?
,
0 WED
 
22.04.20
13:15
по ТЗ требуется хранить к номенклатуре и ряду документов несколько картинок.
Поскольку картинки будут в хорошем разрешении (фото объекта,например), то и размер у каждого файла соответствующий - 10-12 Мб.

Часть клиентов работают через интернет по слабому каналу (3G), поэтому требуется им сперва показать превьюшки, а полноразмерный файл качать на клиента только по необходимости.

Есть ли способ в 1С сформировать превьюшку?
1 WED
 
22.04.20
13:16
PS: Поиск вывел только на обработку на инфостарте, значит некий алгоритм возможен.
2 Вафель
 
22.04.20
13:20
Это называется resize
3 Cyberhawk
 
22.04.20
13:26
Храни сразу две картинки
4 Cyberhawk
 
22.04.20
13:27
Ну или генерируй маленькую на лету и ее передавай уже
5 WED
 
22.04.20
13:28
(2) ЗДравствуйте, Кэп. :)
(3,4) Вопрос как получить маленьку. Как хранить я в курсе :)
6 WED
 
22.04.20
16:33
Ну, в общем, сам разобрался. Вот решение:

ДанныеКартинки - Двоичные данные исходной картинки.

Функция ПолучитьПревьюКартинки(ДанныеКартинки) Экспорт

    Картинка = Новый Картинка(ДанныеКартинки, Истина);
    Размер = ДанныеКартинки.Размер();
    МаксимальныйРазмер = 1024*300;  //Превью делаем, только если размер исходной картинки больше 300Кб
    Если Размер > МаксимальныйРазмер Тогда
        ОбрабатываемаяКартинка = Новый ОбрабатываемаяКартинка(Картинка);
        Попытка
            Если Картинка.ПлотностьПоВертикали() >= 150 Тогда
                ОбрабатываемаяКартинка.УстановитьПлотность(72, 72);
            КонецЕсли;
        Исключение
            
        КонецПопытки;
        //ОбрабатываемаяКартинка.Масштабировать(Макс(10,Окр(100*МаксимальныйРазмер/Размер)));
        Ширина = Картинка.Ширина();
        МаксимальнаяШирина = 150;
        Если Ширина > МаксимальнаяШирина Тогда
            ОбрабатываемаяКартинка.УстановитьРазмер(МаксимальнаяШирина,Окр(Картинка.Высота()/Ширина*МаксимальнаяШирина));
        КонецЕсли;
        Картинка = ОбрабатываемаяКартинка.ПолучитьКартинку();
    КонецЕсли;
    
    Возврат Картинка.ПолучитьДвоичныеДанные();

КонецФункции

За основу взял алгоритм от [email protected], за что ему большая благодарность.
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн