Загрузка прайс-листа. Как изменить размер изо...
-

Загрузка прайс-листа. Как изменить размер изображения в 1С?

1
10587
01.10.2019 Роман Барабанов

Содержание:

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(АдресДоПапки + Папка + АдресКартинки);

//Загружаем в базу данных картинки.

Иначе

//Загружаем исходное изображение.

КонецЕсли;

Эти библиотеки изображений очень удобные для работы. Естественно, можно усложнить данный код, можно качать изображения из интернета и сразу переделывать их в необходимый размер.


                        Специалист компании ООО «Кодерлайн» 

Роман Барабанов.

Задать вопрос автору статьи
Тема вопроса*
Ваше имя*
E-mail или телефон*
Ваш вопрос*
 

0
Александр
Добрый день. Спасибо за подсказку по использованию этих библиотек. У вас небольшая ошибка:
Вместо фильтра
ImageProcess.Filters.Add(ImageProcess.FilterInfos("Resize".FilterID) ;      
надо использовать
ImageProcess.Filters.Add(ImageProcess.FilterInfos("Scale".FilterID) ;
ну и еще небольшие опечатки в конце функции.      
Имя Цитировать 0
Добавить комментарий
Текст сообщения*
Защита от автоматических сообщений
 
Услуги программиста 1С
Получите специалиста
для решения всех задач
в области 1С
Программы 1С
Цены и подробное описание программ 1С:Предприятие 8.