GraphicsNET (GraphicsVK) — внешняя компонента для работы с графическими изображениями

1С: GraphicsЕжедневно приходится грузить большое количество картинок в базу данных. Чтобы автоматизировать процесс изменения размеров написал внешнюю компоненту для работы с изображениями. Хотя функционал не ограничивается одним только ресайзингом.

Переписал с нуля на другом языке (C#). Добавил полную поддержку emf и tif

Для работы компоненты потребуется установленный Microsoft .NET Framework 4, взять его можно отсюда.

Регистрация компоненты в Windows — запустить reg.bat
Удаление информации о компоненте — запустить unreg.bat

Общие сведения

GraphicsNET – внешняя компонента для работы с графическими изображениями. Может использоваться для конвертации из одного формата в другой, получения изображения из буфера обмена, изменения размера изображения, поворота (отражения), обрезки, получения размеров и добавления водяного знака.

Поддерживается работа со следующими форматами:
В режиме открытия:

  • bmp
  • jpg
  • png
  • gif
  • emf (wmf)
  • tif

В режиме сохранения:

  • bmp
  • jpg
  • png

Форматы «водяного знака»:

  • bmp
  • jpg
  • png
  • gif
  • emf (wmf)
  • tif

Описание свойств и методов

Свойства:

  • РазмерИзображения/ ImageSize – размер текущего изображения в формате «Ширина»x»Высота»(например, 300×550). Тип: Строка
  • Ширина/Width – ширина текущего изображения. Тип: Строка
  • Высота/Height – высота текущего изображения. Тип: Строка
  • ДвоичныеДанные/ BinaryData – файл в формате jpg без сжатия представленный в виде строки base64. Тип: Строка

Методы:

1) ПолучитьИзображение/GetImage – получает изображение для обработки (конвертации) из файла или буфера обмена.

Параметры:

  • ИмяФайла — имя открываемого для редактирования файла. Если имя файла пустое, то изображение берется из буфера обмена. Тип: Строка

2) ОбрезатьИзображение/CropImage – обрезает изображение на указанную величину.
Параметры:

  • Лево — количество пикселей (процентов), обрезаемых слева. Тип: Число
  • Право — количество пикселей (процентов), обрезаемых справа. Тип: Число
  • Верх — количество пикселей (процентов), обрезаемых сверху. Тип: Число
  • Низ — количество пикселей (процентов), обрезаемых снизу. Тип: Число
  • ВПроцентах – признак того, что все величины указаны в процентах. Тип: Булево

3) ПовернутьИзображение/RotateImage – поворачивает (отражает) текущее изображение.

Параметры:

  • ОтразитьПоГоризонтали – признак того, что изображение необходимо отразить по горизонтали. Тип: Булево
  • ОтразитьПоВертикали — признак того, что изображение необходимо отразить по вертикали. Тип: Булево
  • Поворот – поворот изображения (-1 – на 90 градусов против часовой, 1 – на 90 градусов по часовой). Тип: Число

4) ИзменитьРазмерИзображения/ResizeImage – изменяет размер изображения.

Параметры:

  • Ширина – новая ширина для изображения. Тип: Число
  • Высота – новая высота для изображения. Тип: Число
  • Процент – процент на который изменяется размер (если число отрицательное – уменьшение изображения, если положительное — увеличение). Тип: Число
  • СохранятьПропорции – признак того, что при изменении размера необходимо сохранить пропорции ихображения Если указано, что необходимо сохранить пропорции, то методу передается только один из параметров (либо шинира, либо высота), а второй параметр принимает нулевое значение. Тип: Булево.

5) ДобавитьВодянойЗнак/ AddWatermark – добавляет на текущее изображение «водяной знак».
Параметры:

  • ИмяФайла – файл, который будет использоваться в качестве водяного знака. Тип: Строка
  • Позиция – позиция на текущем изображении, где необходимо разместить водяной знак. Тип: Число

Принимает следующие значения:

0 – сверху слева
1 – сверху центр
2 – сверху справа
3 – по центру
4 – снизу слева
5 – снизу центр
6 – снизу справа

  • Прозрачность – процент прозрачности накладываемого изображения. Изменяется от 0 до 100. При 100 – изображение непрозрачно. Тип: Число

6) СохранитьИзображения/SaveImage – сохраняет изображение в файл на диске.

Параметры:

  • ИмяФайла – имя файла для сохранения на диске. Тип: Строка
  • ТипФайла – формат сохраняемого файла. Тип: Число

Принимает следующие значения:

0 – bmp

1 – jpg

2 – png

  • Сжатие – степень сжатия для файлов формата jpg. Тип: Число
  • УдалятьОригинал – признак того, что необходимо удалить оригинальный файл. Требуется, например, при конвертации из одного формата в другой. Тип: Булево.

7) Закрыть/Close – высвобождает память занятую текущим изображением.

Недостатки

1) Не поддерживается работа с очень большими изображениями (> ~5000×5000)

Прилагается небольшой пример работы с GraphicsNET.dll (8.2)

 

[stextbox id=»download» caption=»Файлы»]

GraphicsNET.zip

Старая версия компоненты (GraphicsVK)

[/stextbox]

[stextbox id=»grey» caption=»Скриншоты»]

 

 

[/stextbox]

 

Один комментарий к записи «GraphicsNET (GraphicsVK) — внешняя компонента для работы с графическими изображениями»

  1. Не пойму что не работает
    выгружаю номенклатуру в магазин на движке PrestoShop, в цикле необходимо насоздавать несколько картинок с разными именами и разными размерами и выгрузить их на ФТП

    Для Каждого СтрРазмер из ТабРазмеровИзображений Цикл
    НовоеИмяКартинки = ИмяКартинки+»-«+СтрРазмер.name;

    Попытка
    GraphicsVK.ПолучитьИзображение(КаталогМодуля+»foto_upload»+ИмяКартинки+».»+РасширениеКартинки);
    GraphicsVK.ИзменитьРазмерИзображения(Число(СтрРазмер.width), 0, 0, Истина);
    GraphicsVK.СохранитьИзображение(КаталогМодуля+»foto_upload»+НовоеИмяКартинки+».jpg», 1, 80, Истина);

    Соединение.Записать(КаталогМодуля+»foto_upload»+НовоеИмяКартинки+».jpg», FTPПуть+НовоеИмяКартинки+».jpg»);

    Исключение
    КонецПопытки;

    КонецЦикла;

    Но Ваша компонента возвращает ошибку о том, что неизвестный формат файла (пробовал на GIF, PNG и JPEG)

      • gif, png, jpeg

        Это картинки из демки
        «Управление торговлей», редакция 10.3 (10.3.12.3)
        Copyright (С) ЗАО «1C», 2003-2009. Все права защищены
        1С:Предприятие 8.1 (8.1.15.14)

        я на этой конфе тренируюсь с синхронизацией с PrestoShop

  2. Александр, есть предложение по сотрудничеству (разработка других компонент по работе с графикой под 1С 8). Если заинтересовало, отпишитесь, пожалуйста, на почту.

  3. На сервере2003х64 обрабатываю картинку и сохраняю в трех разных форматах, после трех сотен катастрофически падает скорость. Пишу на 7.7 Объект.Закрыть();; делаю, в чем может быть проблема?

      • Объект = СоздатьОбъект(«AddIn.GraphicsNet»);
        Объект.GetImage(КартинкаСтарая);//Загружаем нашу картинку типа «С:картинка.jpg»
        Объект.ResizeImage(464,0,0,1); // уменьшили ширину до 464 высота пропорционально уменьшилась
        СтрокаРазмеров= Объект.ImageSize;

        Если Число(Прав(СтрокаРазмеров,СтрДлина(СтрокаРазмеров)-Найти(СокрЛП(СтрокаРазмеров),»x»)))>294 Тогда //Проверим высоту

        Объект.ResizeImage(0,294,0,1); // уменьшили до 294
        КонецЕсли;
        Объект.SaveImage(ФормИмяКаталог+»LRG»+Картинка,1,80,0);
        Объект.Закрыть();; // высвобождает память занятую текущим изображением

        Объект.GetImage(КартинкаСтарая);//Загружаем нашу картинку типа «С:картинка.jpg»
        СтрокаРазмеров= Объект.ImageSize;

        Объект.ResizeImage(240,0,0,1); // уменьшили ширину до 240 высота пропорционально уменьшилась
        СтрокаРазмеров= Объект.ImageSize;
        Если Число(Прав(СтрокаРазмеров,СтрДлина(СтрокаРазмеров)-Найти(СокрЛП(СтрокаРазмеров),»x»)))>152 Тогда //Проверим высоту

        Объект.ResizeImage(0,152,0,1); // уменьшили до 152

        КонецЕсли;
        Объект.SaveImage(ФормИмяКаталог+»MED»+Картинка,1,80,0);
        Объект.Закрыть();; // высвобождает память занятую текущим изображением

        Объект.GetImage(КартинкаСтарая);//Загружаем нашу картинку типа «С:картинка.jpg»

        Объект.ResizeImage(120,0,0,1); // уменьшили ширину до 120 высота пропорционально уменьшилась
        СтрокаРазмеров= Объект.ImageSize;
        Если Число(Прав(СтрокаРазмеров,СтрДлина(СтрокаРазмеров)-Найти(СокрЛП(СтрокаРазмеров),»x»)))>76 Тогда //Проверим высоту

        Объект.ResizeImage(0,76,0,1); // уменьшили до 76

        КонецЕсли;
        Объект.SaveImage(ФормИмяКаталог+»FULL»+Картинка,1,80,0);
        Объект.Закрыть();; // высвобождает память занятую текущим изображением

  4. Александр, добрый день. Есть ли рекомендации по работе с компонентой?

    • Проверьте почту. Отправил письмо 16.05, сегодня еще раз продублировал

  5. Доброе время суток! по примеру ЗУП пробовал библиотеку dll сакинуть в макет обработки примера, но вызов происходит с ошибкой. Помогите разобраться, вот код обработки:

    Процедура ПриОткрытии()

    Попытка
    //ПодключитьВнешнююКомпоненту(«AddIn.GraphicsNET»);
    ПодключитьВнешнююКомпоненту(«Макет.БиблиотекаVK», «GraphicsNET», ТипВнешнейКомпоненты.Native);
    Исключение
    Предупреждение(ОписаниеОшибки());
    КонецПопытки;

    Попытка
    GraphicsVK = Новый(«AddIn.GraphicsNET»); //здесь ошибка тип не определен
    Исключение
    Предупреждение(ОписаниеОшибки());
    КонецПопытки;

    КонецПроцедуры

    • 1) Компонента не является нативной т.е. не может подключаться из макета.
      2) Компонента перед использованием должна быть зарегистрирована в системе при помощи reg.bat из архива
      3) Регистрация компоненты должна производится пользователем с административными правами
      4) Если пункт 2 и 3 выполнен, то в 1С подключение происходит так ПодключитьВнешнююКомпоненту("AddIn.GraphicsNET");

  6. Не получается подключить на сервере 1С, пишет Тип не определен. Хотя в режиме толстого клиента работает нормально. Сервер находится на этом же компьютере , где запускался толстый клиент. т.е. компонента на сервере зарегистрирована.

    • На сервере данная версия компоненты работать не будет. Работающий вариант есть, скоро постараюсь выложить его

  7. Прежде всего, спасибо вам за этот продукт.
    Столкнулся со следующим багом: при попытке конвертировать tif файл в jpg выдает ошибку «GraphicsComp: Parameter is not valid.» http://i.imgur.com/4IjLdyp.png. bmp же конвертирует без проблем. Исходный tif файл: http://yadi.sk/d/VizXz4yk3QbgG

  8. Здравствуйте

    «На сервере данная версия компоненты работать не будет. Работающий вариант есть, скоро постараюсь выложить его»
    Подскажите пожалуйста, на сегодня есть решение по выгрузке изображений в серверном варианте в фоновом режиме?

  9. Добрый день, Александр! Премного благодарен Вам за Ваш проект, который серьёзно помогает мне встать на ноги в роли программиста на предприятии. Отдельное спасибо за версию 2.4.9.0! И вообще позвольте от лица всех (а таких большинство, я думаю), кто двигает 1С, поблагодарить Вас за ваш колоссальный труд! Спасибо за терпение и желание не бросать развитие проекта и не делать его платным! Поделюсь своим пожеланием: мне лично не хватает теперь только возможности подставлять ключи на запуск 1C. Тогда Ваш стартер был бы воистину фантастическим и не имеющим себе равных! Спасибо.

    • Спасибо за теплый отзыв! Рад стараться и развивать проект, хоть времени на него практически и нет. Ключи запуска 1С, если вы имеете ввиду запуск базы, когда доступ к ней ограничен, давно есть. В самом низу настройки БД есть поле «Код доступа».

  10. Добрый день.
    Работает ли компонента по Вин 7 64?
    Компонента не регистрируется ни RegASM ни кодом 1С

    • Приветствую! Специально под x64 не проверял, но должна работать.
      Для регистрации используйте RegAsm.exe от соответствующей версии.
      Взять можно по по адресу c:\Windows\Microsoft.NET\Framework64\v2.x.xxx\ или c:\Windows\Microsoft.NET\Framework64\v4.x.xxx\

  11. Здравствуйте, на сервере исправлены ошибки?
    На файле все работало нормально. Недавно перешли на сервер — выскакивает ошибка
    AddIn.GraphicsNET тип не определен

    • Здравствуйте!
      Попробуйте создавать объект вот так
      ПодключитьВнешнююКомпоненту("AddIn.GraphicsNET");
      Новый("AddIn.GraphicsNET");

      вместо
      Новый COMОбъект("AddIn.GraphicsNET");

  12. Здравствуйте, пользуюсь Вашей компонентой GraphicsNET. Благодарю за такую полезную разработку =)

    А как убрать сообщение «В буфере изображение»? Я использую компоненту чтобы получать изображение из буфера, может у Вас есть какая-нибудь нативная компонента для этого?

    Заранее благодарю =)

    • У вас, вероятно, старая версия библиотеки. Скачайте еще раз её и все будет хорошо.

      • Благодарю, за быстрый ответ. Ещё раз прикрепила длл все равно пишет «В буфере изображение» а потом вставляет изображение.
        Параметры Windows server 2008 x64, разархивировала файлы, регила с помощью командного файлика reg.

          • Благодарю. Реестр почистила (руками вытащила все остатки). Попробовала тоже самое.
            Может я что-то не так в коде делаю?

            &НаКлиенте
            Процедура Команда1(Команда)
            Отказ = Ложь;
            Попытка
            ПодключитьВнешнююКомпоненту(«AddIn.GraphicsNET»);
            Исключение
            Отказ = Истина;
            Сообщить(ОписаниеОшибки());
            КонецПопытки;

            Если Не Отказ Тогда
            Попытка
            GraphicsVK = Новый(«AddIn.GraphicsNET»);
            Исключение
            Сообщить(ОписаниеОшибки());
            КонецПопытки;
            КонецЕсли;

            // Загружаем изображение в обект
            СодержимоеБуфера = GraphicsVK.ПолучитьИзображение(«»);
            СтрокаBase64 = GraphicsVK.ДвоичныеДанные;
            ДвоичныеДанные = Base64Значение(СтрокаBase64);
            Объект.ФотоТорта = ЗаписатьНаСервере(ДвоичныеДанные, «Картинка» + Объект.Ссылка, Объект.Ссылка);
            Картинка1 = НавигационнаяСсылкаКартинки(Объект.ФотоТорта, ЭтаФорма.УникальныйИдентификатор) ;
            // Высвобождаем память
            GraphicsVK.Закрыть();
            Модифицированность = Истина;
            КонецПроцедуры

            &НаСервере
            Функция НавигационнаяСсылкаКартинки(ФайлКартинки, ИдентификаторФормы)
            АдресКартинки = ПоместитьВоВременноеХранилище(ФайлКартинки.ФайлХранилище.Получить(), ИдентификаторФормы);
            Возврат АдресКартинки;

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

  13. Тут дело не в вашем коде, такое окно раньше выдавала сама библиотека, теперь этого не должно происходить, если используется новая версия. Возможно вы регистрировали компоненту, когда она лежала в другом месте на диске (и до сих пор так лежит). У меня была похожая ситуация. Можно сделать так:
    1) Запустите 1С и выполните какой-нибудь код, использующий библиотеку
    2) Найдите все GraphicsNET.dll на диске
    3) Не закрывая 1С удаляйте их.
    Удалить используемую dll вы не сможете. После этого положите рядом файлы unreg и regasm и выполните unreg . После этого уже регистрируйте новую компоненту.

  14. Премного благодарен! Очень помогло в области агентств по продаже недвижимости. Требовалось при добавлении фотографии объекта недвижимости, приводить к размеру и добавлять водяной знак компании.

    • Спасибо! Всегда приятно, когда разработка помогает кому-то еще в решении задач.

      • Александр, а можно ли картинку, у которой высота больше ширины, привести к пропорции, где ширина больше высоты без обрезания по вертикали — дополнить края нейтральным фоном. А потом пропорционально уменьшать до размера, например, 640*480 (это работает).

  15. Александр, добрый день.
    Очень полезная компонента, но пока нам никак не удается запустить ее на сервере. Windows Server 2012 Std, 32-х разрядная 1C 8.2.18.102 При выполнении кода:
    ПодключитьВнешнююКомпоненту(«AddIn.GraphicsNET»);
    Новый(«AddIn.GraphicsNET»);
    Получаем ошибку вида:
    Тип не определен (AddIn.GraphicsNET)
    Пробовали:
    1) Помещать dll в папку bin.
    2) Регистрировать RegAsm’ами разных версий — 64-х разрядной и 32-х разрядной от Framework второй и четвертой версий. Каждый раз с сообщением об успешном определении типов.
    3) Использовать старый код для создания COM-объекта. Для очистки совести.
    При этом, если запускать на клиенте, то все прекрасно работает. Не подскажете, в чем может быть проблема?
    Спасибо.

    • Здравствуйте, Сергей!
      У вас клиент-серверный вариант работы? Сервер 1С-Предприятия x86 или x64 (именно сервер 1С, а не операционная система)?

      • Да, клиент-серверный вариант работы, сервер 1С х86. Если запустить клиент на серверной машине, то в нем компонента тоже работает.

        • Сталкивался с такой проблемой на связке Windows Server 2008 x64 и сервер 1С x64. Решить её до сих пор возможности нет. Начал делать нативную компоненту, но на x64 сервере она просто выбивает процесс с ошибкой. В общем пока в тупике.
          На x86 у меня работало все без проблем и &НаСервере и &НаКлиенте. Могу только посоветовать попробовать настроить через DCOM. В интернете много примеров, один из последних тут

          • В приведенной инструкции описывается регистрация Excel. Не подскажете, для вашей обработки какие нужно указывать AppID и путь в реестре?

          • AppID: 8A603F7F-1DCB-4F2F-B929-27B9AD6E9BFA
            Путь: HKEY_CLASSES_ROOT\AddIn.GraphicsNET

          • Добавил запись в реестре, приложение появилось в списке «Настройка DCOM», однако настройки не сохраняются, и отсутствует какая-либо статистическая информация типа имени или кода приложения. Такое ощущение, что нужно где-то путь к dll вписать.

          • Я постараюсь воспроизвести ситуацию и отпишусь вам тогда.

          • Добрый день. Есть какие-нибудь новости?

          • Здравствуйте!
            К сожалению решения пока нет. Перепробывал все возможные варианты, результат всегда один.

  16. Добрый день обновлялись — обновлялись. Платформа 8.3.6.2299.
    Раньше работало все.
    Теперь при запуске обработки 1С тупо вылетает. Откатить назад платформу не можем. И графикс нет работать не хочет. Может встречали подобную ошибку. Cервер 1c (постгрес) — пробовал из файловой запустить — тоже самое. Операционка — семерка. Специально ввиду всяких различных проблем после обновлений — снятая давным давно с поддержки. Пробовал на ИКС ПИ запустить — тоже савмое…вылетает ошибка «Прекращена работа «1cv8″»

    • Здравствуйте, Михаил!
      Какой вариант базы используете, файловый или клиент-серверный? Если последний то какая версия сервера x86 или x64? Такую проблему я встречал только на x64 сервере, но решить в текущей версии ёё так и не смог. Сейчас у меня есть новая версия, правда она платная, но есть демо-версия. Писалась она для 8.3 и тонкого клиента, выполнена по технологии NativeAPI. Попробуйте её в работе, возможно поможет.

  17. Добрый день.

    Компонента отличная, работает на ура. Претензий нет) Молодцы.

    Единственное, что было замечено (работа с компонентой из 1с), компонента не работает, если в конфигурации отключен режим совместимости. 1с зависает напрочь в момент обращения к свойствам картинки (например, получить ширину картинки)

  18. Спасибо вам за компоненту, очень выручила при загрузки картинок.

  19. Здравствуйте. Подскажите пожалуйста, как в 1с 7.7 с помощью вашей библиотеки сохранить картинку из ячейки экселя на диск. Интересует только кусок кода, который собственно вытаскивает картинку из ячейки и сохраняет на диск.
    Пытался использовать метод GetImage(«»), который судя по описанию должен читать данные из буфера обмена, но не понятно, как в буфер попадёт картинка.

    • Здравствуйте! Смотрите в сторону метода excel Sheet.Shapes.Copy(). У меня есть пример, правда с самой первой версией обработки. Метод компоненты вы используете правильный.

  20. Доброго времени суток, к сожалению возникает какая-то беда с регистрацией, при открытии батника он моргает и пропадает ничего не говоря.
    Помогите разобраться, буду премного благодарна.

  21. Есть печатная форма в которым используются ваша разработка. На удаленным сервере работаем.
    Пользователи с админскими правами из 1с печатную форму печатают и картинки видны. а вот если у удаленного пользователя проста права user и remote desktop тогда не формируются.

    получаем такую ошибку
    {ОбщийМодуль.Печать.Модуль(92)}: Значение не является значением объектного типа (ПолучитьИзображение)
    GraphicsVK.ПолучитьИзображение(tempImageFileName);

    • Никогда с таким не сталкивался. Попробуйте выполнить reg.bat под удаленным пользователем. Интерфейс у вас тонкий или толстый?

  22. Добрый день. Для меня конечно очень странно, но я не могу зарегистрировать dll.

    Запускаю reg.bat под админскими правами и получаю ошибку: «This application could not be started».

    Windows 10

    • И да, пришёл к этому от ошибки: » AddIn.GraphicsNET тип не определен».

      Запускал ПодключитьВнешнююКомпоненту(«AddIn.GraphicsNET»);
      Новый(«AddIn.GraphicsNET»);

    • Здравствуйте! Microsoft .NET Framework 4 установлен? Вероятно, ошибка от того, что нет regasm.exe

  23. При регистрации в win10 действительно есть проблемы, Microsoft .NET Framework установлен 4.5. все шаманский действия не помогают, при этом в win 7 х64 устанавливаю спокойно.

  24. Похоже разработка заглохла, ответов на животрепещущие вопросы по регистрации в win10 нет.

  25. Добрый день, обновили платформу перестала работать компонента. Компонента в общем макете. GraphicsVK.ПолучитьИзображение(ИмяИсходногоФайла) — ошибка здесь
    платформа (8.3.18.1741)

  26. Terrific work! That is the type of information that are meant to
    be shared across the internet. Shame on Google for now not positioning this post upper!
    Come on over and consult with my website . Thank you =)

  27. GreatWin is an internet-based casino site known for its wide range of game options and user-friendly interface. With AwesomeWin, players can experience a smooth gaming experience from the convenience of their houses. The AwesomeWin.am goodwin casino code and GreatWin gambling establishment provide a diverse selection of popular casino game options, including slot machines, card games, and live dealer games. AwesomeWin’s commitment to fair play and player safety ensures that gamblers can experience their favorite games with peace of mind. Whether you prefer the thrill of slot machines or the tactical challenge of poker, GoodWin Casino has something for everyone.

  28. Torsemide buy, discount! without prescription.
    Ketorolac buy, discount! without prescription.
    Simvastatin buy, discount! without prescription.
    Ibuprofen buy, discount! without prescription.

    Keflex buy, discount! without prescription.
    Malegra DXT Plus buy, discount! without prescription.
    Precose buy, discount! without prescription.
    Viagra Extra Dosage buy, discount! without prescription.

    ou acheter cialis sur internet acheter cialis generique en suisse
    acheter cialis en europe ou acheter cialis original
    discount!

    https://cutt.ly/qwufYAl9

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *