Содержание:
1. Внедрение системы унификации
2. Библиотека изображений в 1С
1. Внедрение системы унификации
Загрузка прайс-листов или загрузка каталогов – это извечная проблема для программиста. Каждый такой прайс – это что-то новое. Огромное количество позиций или сложный состав. А как быть, если картинки лежат на хостинге? А что делать, если картинки лежат в папке рядом с экселькой, а дальнейшая загрузка прайса должна будет перекочевать на сайт, где заказчик старательно выбирал шаблон изображений с определенным соотношением сторон для изображений? На самом деле нас больше всего интересует момент, чтобы наши изображения не растягивали фрейм для отображения, да и вес имели не запредельный.
Предположим, что загрузка из 1СXLS у нас уже написана. Нужно внедрить систему унификации в наш код. Благо 1С умеет работать с 1С COM-объектами, а Windows предусмотрительно поставляет со своей системой библиотеку для работы с изображениями.
2. Библиотека изображений в 1С
Библиотека называется ImageFile и ImageProcess, поставляется вместе с окнами начиная с Vista.
Предположим, нам необходимо иметь максимальную высоту фото – 480.
Для начала подключим наш 1С COM-объект вне цикла:
ImageFile = НовыйCOMОбъект("WIA.ImageFile"); //ImageFile
ImageProcess = НовыйCOMОбъект("WIA.ImageProcess"); //ImageProcess
//Создаем новый адрес папки, где будут храниться правильные картинки.
Папка = “/resize”;
Допустим, мы находимся на строке с локальным айпи-адресом к изображению, уже перенесли его в переменную «АдресКартинки», где «АдресКартинки» = “/img/1.jpg”.
ImageFile.LoadFile(АдресДоПапки + АдресКартинки);//АдресДоПапки = C://НаЗагрузку1С
Дальше будем считать и сравнивать:
//Все картинки больше 480 px в ширину мы будем уменьшать.
Если ImageFile.Height>480 Тогда
//Узнаем разность, на которую нужно уменьшить ширину.
РатиоРазмеров = ImageFile.Height/480;
//узнаем ширину
КонечнаяШирина = ImageFile.Width /РатиоРазмеров;
//создаем фильтр для картинки.
ImageProcess.Filters.Add(ImageProcess.FilterInfos("Resize").FilterID) ;
ImageProcess.Filters(1).Properties("MaximumWidth").Value = КонечнаяШирина;
ImageProcess.Filters(1).Properties("MaximumHeight").Value = 480;
//Применяем фильтр.
ImageFile = objImageProcess.Apply(ImageFile);
objImageFile.SaveFile(АдресДоПапки + Папка + АдресКартинки);
//Загружаем в базу данных картинки.
…
Иначе
//Загружаем исходное изображение.
…
КонецЕсли;
Эти библиотеки изображений очень удобные для работы. Естественно, можно усложнить данный код, можно качать изображения из интернета и сразу переделывать их в необходимый размер.
Специалист компании ООО «Кодерлайн»
Роман Барабанов.