&НаКлиенте
Процедура КонвертироватьИзображениеИОткрыть(Команда)
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
Диалог.Заголовок = "Выберите файл";
Диалог.ПолноеИмяФайла = "";
Диалог.Фильтр = "webp (*.webp)|*.webp";
Диалог.МножественныйВыбор = Ложь;
Диалог.Показать(Новый ОписаниеОповещения("ЗагрузитьФайлЗавершение", ЭтаФорма, Новый Структура("Диалог", Диалог)));
КонецПроцедуры
&НаКлиенте
Процедура ЗагрузитьФайлЗавершение(ВыбранныеФайлы, ДополнительныеПараметры) Экспорт
Диалог = ДополнительныеПараметры.Диалог;
Если (ВыбранныеФайлы <> Неопределено) Тогда
АдресВХранилище = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(Диалог.ПолноеИмяФайла));
КонвертироватьФайл(АдресВХранилище);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура КонвертироватьФайл(АдресВХранилище)
// Копируем dll из макета в каталог временных файлов
КаталогВремФайлов = КаталогВременныхФайлов();
ИмяФайлаКонвертации = КаталогВремФайлов + "\addin_image_converter.dll";
ФайлDLLКонвертации = Новый Файл(ИмяФайлаКонвертации);
Если НЕ ФайлDLLКонвертации.Существует() Тогда
ДвоичныеДанныеDLLКонвертации = РеквизитФормыВЗначение("Объект").ПолучитьМакет("addin_image_converter");
ДвоичныеДанныеDLLКонвертации.Записать(ИмяФайлаКонвертации);
КонецЕсли;
// Получаем адреса временных файлов, достаем файл из хранилища
ДвоичныеДанныеWEBP = ПолучитьИзВременногоХранилища(АдресВХранилище);
ВремИмяФайлаWEBP = ПолучитьИмяВременногоФайла("WEBP");
ВремИмяФайлаJPG = ПолучитьИмяВременногоФайла("JPG");
ДвоичныеДанныеWEBP.Записать(ВремИмяФайлаWEBP);
Если Не ПодключитьВнешнююКомпоненту(ИмяФайлаКонвертации, "MedIgor", ТипВнешнейКомпоненты.Native,
ТипПодключенияВнешнейКомпоненты.НеИзолированно) Тогда
ВызватьИсключение "Не удалось подключить внешнюю компоненту";
КонецЕсли;
Converter = Новый ("Addin.MedIgor.ImageConverter");
// Конвертация файла
Попытка
Converter.ConvertFile(ВремИмяФайлаWEBP, ВремИмяФайлаJPG);
Исключение
ВызватьИсключение Converter.LastError;
КонецПопытки;
// Конвертация двоичных данных
КартинкаWebp = Новый ДвоичныеДанные(ВремИмяФайлаWEBP);
Попытка
КартинкаPNG = Converter.ConvertBuffer(КартинкаWebp, "webp", "jpg");
Исключение
ВызватьИсключение Converter.LastError;
КонецПопытки;
КартинкаPNG.Записать(ВремИмяФайлаJPG);
ЗапуститьПриложение(ВремИмяФайлаJPG);
КонецПроцедуры