Вход | Регистрация
 

Как сделать превьюшку картинки?

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

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

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

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

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

    Картинка = Новый Картинка(ДанныеКартинки, Истина);
    Размер = ДанныеКартинки.Размер();
    МаксимальныйРазмер = 1024*300;  //Превью делаем, только если размер исходной картинки больше 300Кб

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

        Ширина = Картинка.Ширина();
        МаксимальнаяШирина = 150;
        Если Ширина > МаксимальнаяШирина Тогда
            ОбрабатываемаяКартинка.УстановитьРазмер(МаксимальнаяШирина,Окр(Картинка.Высота()/Ширина*МаксимальнаяШирина));
        КонецЕсли; 
        Картинка = ОбрабатываемаяКартинка.ПолучитьКартинку();
    КонецЕсли; 
    
    Возврат Картинка.ПолучитьДвоичныеДанные();

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

За основу взял алгоритм от nsirotkin@mail.ru, за что ему большая благодарность.

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.