Добрый день. Есть база 1С (УПП) и мобильное приложение Агент+, необходимо выгружать картинки из базы 1С на Агент+, выгрузку сделал, но файл с выгрузкой получается примерно 30 Мб, что есть не очень удобно, учитывая что 29 Мб из них весят картинки. Возник вопрос: можно ли как-то при выгрузке картинок изменять их размер. Большинство картинок весят немного (примерно 30 Кб) но есть и побольше (до 1 Мб) - вот их и хочу уменьшить при выгрузке. Готовые обработки по ресайзу картинок приветствуются
Конкретно по теме не подскажу (как сжать картинку средствами 1С). Но может имеет смысл подумать над тем, чтобы уменьшить размер исходной картинки: сжать какой-то программой, конвертировать в какой-то другой формат и т.п.
Да, такой вариант тоже рассматриваю, просто хотелось бы 1 раз сделать и забыть, ведь пользователь не будет заморачиваться такой ерундой - он загрузит картинку и все. А я как существо ленивое не хочу постоянно следить за размером выгружаемого архива Думал может можно при выгрузке определять размер файла и если он, например, больше 100 Кб - пропорционально уменьшать размеры картинки.
Это каждый раз при выгрузке проверять размер картинки и пережимать ее? И делать это, скорее всего, сторонней прогой.
Может, имеет смысл хранить копию картинки для мобильного приложения?
Картинки добавляют обычные пользователи - как я писал выше, они проверять размер не будут, поэтому хранить копии не вижу смысла поскольку пользователь все равно добавит здоровенную картинку, которую нужно уменьшить, что возвращает меня к изначальному вопросу - "Как можно уменьшить картинку программно?". Ну и плюс база так разрастется (номенклатуры много - примерно 5000) - все таки граф. информация жрет конкретно.
Ещё один "не прямой" путь: ограничить размер картинки на уровне 1С, т.е. в момент загрузки в картинки в 1С проверять, чтоб картинка не превышала определенный размер.
Bernet, я и не предлагал пользователей заставлять сохранять две копии (хотя тоже имеет право на жизнь такой подход).
При добавлении картинки добавить дополнительный обработчик с проверкой размера фото, и сохранением миниатюры для мобильного приложения.
Думаю есть консольные утилиты, которые помогут это сделать программно.
Самый простой способ: http://pro1c.org.ua/redirect.php?http://www.forum.mista.ru/topic.php?id=662933
И еще консольный метод: http://pro1c.org.ua/redirect.php?http://www.interface.ru/home.asp?artId=32789
спасибо, попробую
Из личного опыта (фрагмент кода):
Маска = "*.jpg";
МассивФайлов = Новый Массив;
МассивФайлов = НайтиФайлы(ПапкаИсточник, Маска);
// Создаем объект
ФайлКартинка = Новый COMОбъект("WIA.ImageFile");
Для Каждого Картинка Из МассивФайлов Цикл
ФайлКартинка.LoadFile(Картинка.ПолноеИмя);
Состояние("Картинка: " + Картинка.Имя);
//Сообщить("Картинка: " + Картинка.Имя);
//Сообщить(" Расширение файла: " + ФайлКартинка.FileExtension);
//Сообщить(" Ширина: " + ФайлКартинка.Width);
//Сообщить(" Высота: " + ФайлКартинка.Height);
//Сообщить(" Размер: " + Окр(ФайлКартинка.FileData.Count / 1024, 2) + " Кб");
ФайлПрогресс = Новый COMОбъект("WIA.ImageProcess");
ФайлПрогресс.Filters.Add(ФайлПрогресс.FilterInfos("Scale").FilterID);
Если ФайлКартинка.Width > ФайлКартинка.Height Тогда
Если ШиринаРис > ВысотаРис Тогда
ФайлПрогресс.Filters(1).Properties("MaximumWidth").Value = ШиринаРис;
ФайлПрогресс.Filters(1).Properties("MaximumHeight").Value = ВысотаРис;
Иначе
ФайлПрогресс.Filters(1).Properties("MaximumWidth").Value = ВысотаРис;
ФайлПрогресс.Filters(1).Properties("MaximumHeight").Value = ШиринаРис;
КонецЕсли;
ИначеЕсли ФайлКартинка.Width < ФайлКартинка.Height Тогда
Если ШиринаРис > ВысотаРис Тогда
ФайлПрогресс.Filters(1).Properties("MaximumWidth").Value = ВысотаРис;
ФайлПрогресс.Filters(1).Properties("MaximumHeight").Value = ШиринаРис;
Иначе
ФайлПрогресс.Filters(1).Properties("MaximumWidth").Value = ШиринаРис;
ФайлПрогресс.Filters(1).Properties("MaximumHeight").Value = ВысотаРис;
КонецЕсли;
Иначе
ФайлПрогресс.Filters(1).Properties("MaximumWidth").Value = ШиринаРис;
ФайлПрогресс.Filters(1).Properties("MaximumHeight").Value = ШиринаРис;
КонецЕсли;
//ФайлПрогресс.Filters(1).Properties("MaximumWidth").Value = ШиринаРис;
//ФайлПрогресс.Filters(1).Properties("MaximumHeight").Value = ВысотаРис;
ФайлПрогресс.Filters(1).Properties("PreserveAspectRatio").Value = Ложь;
ФайлКартинка = ФайлПрогресс.Apply(ФайлКартинка);
ВыбКартинка = Новый Файл(ПапкаПриемник + "\" + Картинка.Имя);
Если ВыбКартинка.Существует() Тогда
УдалитьФайлы(ПапкаПриемник + "\" + Картинка.Имя);
КонецЕсли;
ФайлКартинка.SaveFile(ПапкаПриемник + "\" + Картинка.Имя);
КонецЦикла;
i | Выделяем код |
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua