Склейка нескольких картинок в одну средствами 1С (как вывести несколько картинок в одну ячейку на СКД)

29.09.25

Разработка - Работа с интерфейсом

Функция для склеивания нескольких картинок в одну без использования временных файлов, внешних компонент, COM-объектов и сторонних программ. Можно применить для вставки нескольких картинок в ячейку табличного документа, печати пиктограмм свойств товара на ценнике, отображения в интерфейсе нескольких картинок плиткой/лентой/колонкой, создания вспомогательных картинок для описания товара на сайте. Также в публикации рассмотрены некоторые важные и недокументированные нюансы при работе с картинками, двоичными данными, потоками, буферами и хранилищем значения.

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
Склеить картинки в одну средствами 1С
.epf 115,24Kb
3 1 850 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Введение

Поступило задание сделать отчет на СКД с выводом нескольких картинок в одну ячейку. В лоб такая задача не решается. Статей на эту тему достаточно, принцип самого простого варианта обычно такой:

  1. Программная компоновка отчета.
  2. Получение картинок из хранилищ значений.
  3. Сохранение картинок во временные файлы.
  4. Склейка картинок в одну с помощью стороннего ПО.
  5. Загрузка полученной картинки из файла в табличный документ.

Чтобы получить склеенную картинку, обычно используют команду magic montage из набора утилит ImageMagic (есть версия COM-объект). Для обеспечения быстродействия и частого использования применяют RAM-диск для работы с файлами, что также позволяет сберечь ресурс SSD.

Казалось бы, дело за малым, тем более опыт такой уже был. Но у заказчика есть особые требования: никаких сторонних программ и внешних компонент, код должен быть на 100% на 1С. Что ж, вызов принят!

 

Реализация

Идея проста: разбираем картинки (бруски) на пиксели и собираем их на одном большом холсте на низком уровне средствами 1С!

В объекте Картинка нет прямого доступа к пикселям (растру), но зато есть двоичные данные. Через них и будем работать с растром.

Для начала приведем картинки к формату BMP, так как в нем растр хранится в несжатом виде и с бубнами танцевать не придется. Глубину цвета приведем к 24 битам, чтобы формат двоичных данных растра был одинаковым. (К сожалению, 1С не поддерживает 32-битные BMP, так что про альфа-канал придется забыть. Но при острой необходимости можно определить какой-нибудь цвет как прозрачный и не переносить его на холст).

Ну а дальше — дело техники:

  1. Создаем холст (объект Картинка) нужного размера и цвета.
  2. Получаем из холста буфер двоичных данных.
  3. В цикле обрабатываем массив картинок: получаем из них поток в памяти и копируем данные пикселей в буфер холста, руководствуясь описанием формата BMP.
  4. Получаем холст (объект Картинка) из буфера двоичных данных.

 

Инструкция

Функция СоединитьКартинки

Функция склеивания расположена в модуле объекта обработки; для удобства может быть размещена в общем серверном модуле. Если нужно склеивать на тонком клиенте, то придется выпилить масштабирование, так как ОбрабатываемаяКартинка будет недоступна (Почему-то. Жалко, что ли? Логично же уменьшать избыточно большие картинки перед отправкой на сервер). Соответственно, в этом случае для нормального отображения размер исходных картинок должен быть близок к нужному и не сильно отличаться между собой.

Первый параметр — обязательный, все остальные имеют значения по умолчанию и могут быть установлены в Неопределено. Для числовых параметров неопределенными считаются значения меньше единицы.

Не передавайте много больших картинок (более 100) при большом размере бруска или без изменения размера, устанете ждать.

 

Параметр Тип Описание
Картинки Массив из Картинка Коллекция картинок для склеивания. Если размеры картинки меньше размеров бруска (картинки на холсте), то картинка центрируется относительно него.
ИзменитьРазмер Булево, Неопределено Признак использования масштабирования. По умолчанию Истина. Если Ложь, то параметры Ширина и Высота игнорируются, и будут использованы максимальные размеры картинок из коллекции.
Ширина Число, Неопределено Ширина бруска в пикселях. По умолчанию 0. *
Высота Число, Неопределено Высота бруска в пикселях. По умолчанию 0. *
Плитка Число, Неопределено Количество брусков в строке по горизонтали. По умолчанию 0 — все бруски в одну строку. Если 1 — все бруски в одну колонку.
Бордюр Число, Неопределено Ширина бордюра вокруг брусков в пикселях. По умолчанию 0.
ЦветБордюра Цвет, Неопределено Цвет бордюра. По умолчанию Неопределено  — прозрачный.
Фон Цвет, Картинка, Неопределено Фон для новой картинки. По умолчанию Неопределено — белый. **
Формат ФорматКартинки, Неопределено Формат возвращаемой картинки. По умолчанию Неопределено — ФорматКартинки.PNG ***

 

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

** Фон используется для создания холста и будет виден при прозрачном бордюре, в пустых брусках и местах, где картинка меньше бруска. Если передать картинку, то она будет масштабирована без сохранения пропорций. Если в параметр Картинки передан пустой массив, то картинка фона отобразится в своем истинном размере и пропорциях.

*** Внутри функции вся обработка происходит в формате BMP, если указать его, конвертирования результата не будет, но следует учесть что такая картинка занимает в разы больше места по сравнению с другими форматами. Глубина цвета всегда 24 бита. Предпочитаемый формат PNG, так как имеет хорошее сжатие и не теряет качество.

Возвращаемое значение:  Картинка — размер зависит от размера и количества брусков.

 

Служебные функции

Функция ПолучитьКартинкиИзХранилищ(МассивХранилищ)

Подготавливает массив картинок для склеивания. Возвращает массив с картинками на основе массива с типом ХранилищеЗначения, содержащими тип Картинка. Если элемент массива Неопределено или ХранилищеЗначения пустое, в результат попадет картинка 1х1 пиксель серого цвета.

Функция Получить1пикс(Цвет = Неопределено)

Возвращает картинку 1х1 пиксель заданного цвета. По умолчанию (для всех значений, отличных от типа Цвет) — белый. Поддерживается любой тип цвета 1С, но ЦветаWindows могут воспроизводиться некорректно. Эту функцию можно использовать для различных целей, например, для раскраски ячейки таблицы значений УФ без использования условного оформления.

 

Самое интересное

А теперь расскажу, как во время отладки столкнулся с различными проблемами реализации и особенностями платформы, которые повлекли за собой критические проблемы с быстродействием при тестах на больших картинках в количестве более 20. Информация, на мой взгляд, ценная, особенно для любителей покритиковать 1С. Впрочем, возможно, это особенности моей платформы — 8.3.27.1508 для Linux, база файловая, внешняя обработка.


  1. Позиция в потоке. При создании ПотокВПамяти на основании буфера позиция в новом потоке установлена в 0. Почти всегда, в 99% случаев. В документации этот момент не отражен. Так что перед работой с таким потоком не надейтесь на позицию 0 и на всякий случай установите ее явно. С потоками, созданными на основании длины, такого не заметил, но кто знает...

  2. Получение ДвоичныеДанные из БуферДвоичных. Казалось бы, что проще? Даже есть специальная функция, но делает она это через, простите, временный файл! Исправляем:

    //Возврат ПолучитьДвоичныеДанныеИзБуфераДвоичныхДанных(Буфер);
    Поток = Новый ПотокВПамяти(Буфер);
    Возврат Поток.ЗакрытьИПолучитьДвоичныеДанные();
  3. ОбрабатываемаяКартинка не работает в тонком клиенте. Об этом уже говорил. Но тогда зачем при получении из нее картинки создается временный файл? В ее защиту: делает она это не всегда и в зависимости от размера картинки, возможно чегото еще. Как это исправить? Как ни странно, вот так: 

    //Картинка = ОбрабатываемаяКартинка.ПолучитьКартинку(); // - здесь создается врем файл
    //Буфер = ПолучитьБуферДвоичныхДанныхИзДвоичныхДанных(Картинка.ПолучитьДвоичныеДанные());
    Буфер = ПолучитьБуферДвоичныхДанныхИзДвоичныхДанных(ОбрабатываемаяКартинка.ПолучитьКартинку().ПолучитьДвоичныеДанные());

    Следуя этой логике, чтобы получить картинку, нужно создать новую картинку из двоичных данных от картинки, полученной от другой картинки, и тогда временный файл не нужен. Ну, это в теории; на практике такой спецэффект только с буфером. Короче как получить ДД из буфера "напрямую" вы уже знаете, а там и картинка рядом.

  4. Чтение картинки из файла. Казалось бы, даже джун знает, как получить Картинка из файла. И что вы думаете? Для чтения файла нужен... Вы правильно догадались — временный файл! И да, при получении ДвоичныеДанные — та же история. Исправляем:

    //Возврат Новый Картинка(Файл.ПолноеИмя);         // Картинка
    ////Возврат Новый ДвоичныеДанные(Файл.ПолноеИмя); // ДД
    ФайловыйПоток = Новый ФайловыйПоток(Файл.ПолноеИмя, РежимОткрытияФайла.Открыть);
    Обещание = ФайловыйПоток.РазмерАсинх(); Размер = Ждать Обещание;
    Поток = Новый ПотокВПамяти(Размер);
    Обещание = ФайловыйПоток.КопироватьВАсинх(Поток, Размер); Ждать Обещание;
    Обещание = ФайловыйПоток.ЗакрытьАсинх(); Ждать Обещание;
    Возврат Новый Картинка(Поток.ЗакрытьИПолучитьДвоичныеДанные()); // Картинка
    //Возврат Поток.ЗакрытьИПолучитьДвоичныеДанные();               // ДД

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

  5. Проблемы с прозрачностью. Если преобразуете картинку с прозрачным фоном в BMP, то он станет черным. Что бы этого избежать, не делайте так. Или храните картинки без прозрачных цветов. (Ну если очень хочется и там и тут, замените прозрачный цвет на нужный вам, но с минимальной альфой). При загрузке картинки BMP из файла или ДД установка свойства ПрозрачныйФон не срабатывает. Но если вы загрузили JPEG без использования прозрачного фона... Вроде все нормально, картинка с "монолитным" фоном. Везде, кроме демонического списка при работе по навссылке. Там она ведет себя так, будто у нее прозрачный фон, взятый по цвету правого нижнего пикселя, как говорит СП. Учитывая чистоту цвета после компрессии JPEG, картинка обрастает красивыми артефактами, особенно заметными при выделении строки.

  6. ВременноеХранилище и Временные файлы. При помещении больших картинок во временное хранилище (при достижении сумарного объема ~10 Мб) начинается активная работа с временными файлами. При отправке на сервер больших картинок — тоже, причем неважно, ВременноеХранилище или Картинка.

  7. Функция ПоказатьЗначение. открывает красивый диалог просмотра картинки с масштабом, предварительно сохранив ее во временный файл и считав оттуда.

 

Вот, живите теперь с этим. Очень правы те, кто выносит каталог временных файлов на RAM-диск. И на клиентах тоже.

Не, ну что это? Может так работает "Тонкий клиент (файловый вариант)"? Т.е. они это буквально? Знатоки, пишите.

 

ЗЫ

Отлаживаю обработку, сижу такой думаю: "Может как-нибудь взять исходники ImageMagic и собрать нормальную ВК для работы с графикой, с возможностью работы через потоки..." и при получении ОбрабатываемаяКартинка из какой-то очередной картинки получаю: "Ошибка при выполнении операции ImageMagick: 1cv8c: NoDecodeDelegateForThisImageFormat `TMP' @ error/constitute.c/ReadImage/746".

Т.е. 1С ВСЁ ЭТО ВРЕМЯ ПРЯТАЛИ ImageMagick под капотом?!

Всё, я умываю руки.

Проверено на следующих конфигурациях и релизах:

  • 1С:Деньги, релизы 2.0.44.40

Вступайте в нашу телеграмм-группу Инфостарт

обработка разработка картинки

См. также

Инструментарий разработчика Роли и права Запросы СКД Программист Руководитель проекта 1С v8.3 Управляемые формы Запросы Система компоновки данных Платные (руб)

Инструменты для разработчиков 1С 8.3: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

15500 руб.

02.09.2020    220216    1205    413    

1061

Работа с интерфейсом Анализ учета Мониторинг 1С v8.3 8.3.14 1C:Бухгалтерия 1С:Бухгалтерия 3.0 1С:Библиотека стандартных подсистем 1С:ERP Управление предприятием 2 1С:Управление холдингом 1С:Зарплата и Управление Персоналом 3.x 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Управление торговлей 11 Платные (руб)

Создайте свой функциональный интерфейс в любой конфигурации 1С с помощью расширения Infostart Dashboard. Настраивайте панели виджетов с метриками, индикаторами и показателями на начальном экране. Узнайте возможность внедрения подсистемы у себя в конфигурации с помощью бесплатной обработки "Анализ внедрения подсистемы 1С Infostart Dashboard"!

28800 руб.

27.03.2025    45314    26    22    

39

Работа с интерфейсом Рабочее место 1С v8.3 Управляемые формы 1C:Бухгалтерия Платные (руб)

Универсальный редактор картинок 1С предназначен для обработки изображений в режиме «Предприятие», с возможностью рисовать на них. Поддерживается работа как в обычных формах (толстый клиент) так и на управляемых формах (тонкий клиент). Обработка позволяет редактировать как картинки, хранимые в базе, так и графические файлы с диска на файловой системе. Помимо базовых функций (изменение размеров, преобразование формата, обрезание картинки, повороты и т.п.) – редактор имеет богатый набор инструментов для рисования. Доступна функция вставки изображения из буфера обмена. Объект может быть использован: на стороне клиента, на стороне сервера, из внешнего соединения. Обработка будет особенно полезна тем, кто вносит картинки в базу (изображения номенклатуры, фотографии физических лиц и т.п.). Функционал реализуется с использованием JavaScript и бесплатного ПО ImageMagick (без использования внешних компонент).

6000 руб.

16.01.2015    66753    45    60    

84

Работа с интерфейсом Программист 1С v8.3 1C:Бухгалтерия 1С:ERP Управление предприятием 2 Платные (руб)

Обработка предназначена для создания и управления дашбордами (виджетами) в 1С.

5160 руб.

29.06.2020    22300    32    6    

50

Работа с интерфейсом Программист 1С v8.3 Управляемые формы 1C:Бухгалтерия Россия Платные (руб)

Редактор графов в 1С - внешний отчет, который формирует графы на основе таблицы значений, используя рисунки табличного документа. Есть возможность добавления, редактирования объектов графа и выгрузки результата в таблицу значений.

5040 руб.

06.10.2020    12343    8    8    

14

Работа с интерфейсом Программист 1С v8.3 1C:Бухгалтерия Абонемент ($m)

"MVC плохо применима в 1С" - познакомьтесь с моделью состояния и, возможно, ваше мнение поменяется! Представленное решение является эволюционным развитием идеи реализации MVC для 1С. В новой версии добавлены DSL для описания модели состояния, а также параметризация свойств параметров и элементов формы.

1 стартмани

05.07.2022    13140    kalyaka    8    

35

WEB-интеграция Работа с интерфейсом Пользователь 1С v8.3 1С:Розница 2 Платные (руб)

Связка из веб-приложения и расширения для конфигурации 1С:Розница 2.3.

3600 руб.

29.04.2022    15633    2    10    

13
Отзывы
38. gruk 55 15.10.25 19:08 Сейчас в теме
(36) и тут в чате адепты питона упоминали дипсики всякие. а у меня как раз была филосовская беседа с дипсиком на тему этики ИИ закончена, а место еше есть в беседе и я загнал комменты все туда и покрутил. есть. получилось интересно, познавательно и с юмором в конце
https://chat.deepseek.com/share/99o231wi6idf6nfilm
KOTzilla; hasp_x; +2 Ответить
Остальные комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. bulpi 217 29.09.25 16:04 Сейчас в теме
"Но у заказчика есть особые требования: никаких сторонних программ и внешних компонент, код должен быть на 100% на 1С"
А какое его дело, как оно сделано ? Я бы с таким не работал.
starik-2005; +1 1 Ответить
6. gruk 55 30.09.25 07:11 Сейчас в теме
(1) Это ваше личное дело. А следуя такой логике тогда еще можно не работать с теми заказчиками, которые требуют соответствие стандартам 1С, или у которых линукс без СОМ технологии, или лицо директора не нравится. И пофиг что заказчик корпоративный, других найдем.
А если заказчику впринципе нет дела кто и как пишет код, то высока вероятность превращения конфы в склад говнокода и костылей, который временами ведет себя непредсказуемо. Я видел такие.
Ну и если я заказываю какую-то услугу, того же сантехника, я с ним обсуждаю каким образом будет сделана работа и что для этого нужно, если он говорит не парься все сделаю путем как надо или начинает настаивать на каком-то технически необоснованом решении - я найду другого, компетентного, а не того что хочет мне как-то что-то там сделать а как - видите-ли дело не моё.
hasp_x; ixijixi; +2 Ответить
8. starik-2005 3198 30.09.25 11:20 Сейчас в теме
(6)
Это ваше личное дело.
Странно вообще. Заказчик хочет картинки в одну? А зачем? А почему его ломает тот же код на питоне? Или на JS? Достаточно сгенерить грид на HTML с помощью 1С - остальное все само нарисуется в поле HTML-документа.

В общем, нужно начинать именно с "зачем". Это самый важный вопрос.
10. gruk 55 30.09.25 15:28 Сейчас в теме
(8)
А почему его ломает тот же код на питоне? Или на JS?
Потому что для доработки такого кода нужен укротитель питона или джаваскриптер.

(8)
Достаточно сгенерить грид на HTML с помощью 1С - остальное все само нарисуется в поле HTML-документа.
Отличное решение для интерфейса, делал как-то подобное, большие картинки немного тормозили загрузку страницы, т.к. хотел обойтись без файлов и вставлял их в HTML в Base64.

(8)
В общем, нужно начинать именно с "зачем". Это самый важный вопрос.
Согласен, по этому и написал в первом абзаце. Вы знаете другое решение этой проблемы?
12. gruk 55 30.09.25 15:49 Сейчас в теме
(8)
А почему его ломает тот же код на питоне
Ну и еще минус питону что нужна среда исполнения. Да и как его с 1С срастить? Через временные файлы? ХТТП сервис?
13. starik-2005 3198 30.09.25 17:09 Сейчас в теме
(12)
нужна среда исполнения
Питон отлично компилится в EXE-шник.
15. gruk 55 30.09.25 17:35 Сейчас в теме
(13)
отлично
на 4, если бесплатно. ИМХО.

Ну и вопросы интеграции открыты. И админы ЕХЕ файл не всегда захотят устанавливать в систему.

То что питон приобрел достойные компиляторы - это несомненно большой шаг. Ждем шаблон ВК на питоне)))
18. starik-2005 3198 30.09.25 17:57 Сейчас в теме
(15)
ЕХЕ файл не всегда захотят устанавливать в систему
А что такое "устанавливать"? Просто открываешь его двойным кликом. Дипсик тебе и интерфейс нарисует - вообще не проблема.

компиляторы
В гугле хоть напиши интереса заради "как скомпилить питон".

По поводу шаблона ВК, то это определенным образом организованная библиотека (dll/so). В ней есть некоторые системные области, описывающие функции и сами функции, имеющие определенный механизм работы с передаваемыми аргументами. Может быть на питоне, если сильно извратиться, и можно создать такую ВК, но зачем? Проще организовать сервис, к которому 1С будет обращаться через HTTP-соединение (или даже через WS).
20. gruk 55 30.09.25 18:06 Сейчас в теме
(18)
В гугле хоть напиши интереса заради "как скомпилить питон".
Делал это давно, когда их еще небыло, следил за этим вопросом ))). Я тоже на нем могу, крутой язык, только отступы бесят.

(18)
А что такое "устанавливать"? Просто открываешь его двойным кликом.
Вы ни разу не сталкивались с требованиями безопасности когда левый софт нельзя запустить или даже закопировать на сервер?
22. starik-2005 3198 30.09.25 18:09 Сейчас в теме
(20)
левый софт нельзя запустить или даже закопировать на сервер?
Ну если ты никто и зовут никак - да, тебе веры нет и вообще гнать тебя поганой метлой. Но если ты уже доказал свою пользу, то к тебе прислушиваются.
24. gruk 55 30.09.25 18:13 Сейчас в теме
(22) И кем ты должен быть чтобы запустить экзэшник на сервере корпоративного заказчика который заботится о безопасности? Наверное Грефом если например в Сбере запускать ))))))) Хотя не факт что у него есть такие полномочия
28. starik-2005 3198 30.09.25 18:26 Сейчас в теме
(24)
если например в Сбере запускать
Сбер бывает разный, я в разном сбере много что запускал. В самом банке - нет, не был, не привлекался )))
25. gruk 55 30.09.25 18:18 Сейчас в теме
(22)
то к тебе прислушиваются

Анекдот:
- Для склейки картинок вам нужно пересмотреть политику безопасности, а так как код вы хотите видеть - установить питон и RAM-диск.
- !!!!!!!!!!!
29. starik-2005 3198 30.09.25 18:26 Сейчас в теме
23. gruk 55 30.09.25 18:11 Сейчас в теме
(18)
создать такую ВК, но зачем
Да я стебусь
(18)
Проще организовать сервис
Проще ВК на крестах, особенно если важно быстродействие и планируется большая нагрузка.
30. starik-2005 3198 30.09.25 18:27 Сейчас в теме
(23)
если важно быстродействие и планируется большая нагрузка
С картинками не быстрее будет, т.к. питон юзает собранные либы. А есть еще PyPy - отдельная штукуевина.
PyPy — интерпретатор языка программирования Python. PyPy в начале своего существования был интерпретатором Python, написанным на Python. Текущие версии PyPy транслируются из RPython в Си и компилируются. В PyPy встроен трассирующий[англ.] JIT-компилятор, который может превращать код на Python в машинный код во время выполнения программы.
33. gruk 55 30.09.25 18:34 Сейчас в теме
Если вопрос со сборкой картинки быстро - я на ASM вставках сделаю )))))))))))

Вижу вы очень любите питон. У вас есть решение насчет какого-нибудь пайпа 1С-питон кроме файлов и ХТТП? Очень интересуюсь вопросом.
35. starik-2005 3198 01.10.25 13:28 Сейчас в теме
(33)
У вас есть решение насчет какого-нибудь пайпа 1С-питон кроме файлов и ХТТП?
Вебсокет?
"Пайп" "1С <-> что угодно" достаточно хорошо работает через ХТТП|ВС[С]. Не знаю, какой еще вариант нужен? Для скорости? Ну тогда я бы из этого "пайпа" вообще бы 1С исключил, т.к. 1С - это про CRUD, но это не про скорость. Более того, чтобы что-то сохранить, база данных так-то не нужна. Например, если что-то писать в файл, то это будет куда быстрее, чем сохранение в БД. И ведь в файл тоже можно писать, закрывая его после каждой записи и открывая "аппендом" перед следующей. Тут, конечно, появляется проблема одновременной записи, но, как показывает практика, она решается открытием своего уникального файла в каждом сеансе. И раз в энцать моментов времени можно запускать какой-нить воркер, который это все будет собирать в один файл, если это вообще нужно.

Вообще, стоит рассмотреть какой-то пример, а не просто рассуждать о сферическом коне в вакууме, как самом просто описываемом объекте без сопротивления воздуха.
2. Созинов 29.09.25 19:27 Сейчас в теме
Спасибо за статью, будет интересно поиграться с кодом.

Т.е. 1С ВСЁ ЭТО ВРЕМЯ ПРЯТАЛИ ImageMagick под капотом?!

Справка - О программе - Лицензии используемых компонент
...
ImageMagick
...
solinik; gruk; +2 Ответить
3. SerVer1C 992 29.09.25 19:33 Сейчас в теме
Да уж... Попиксельно побайтово перебирать картинки через 1С - это ещё то извращение с унылой производительностью.
Ща глянул код на питоне, которым осуществлял склейку для некоего своего проекта - там всего 15 строк и работает за секунду.

Т.е. 1С ВСЁ ЭТО ВРЕМЯ ПРЯТАЛИ <ПО> под капотом?!
Вы не поверите, но если заглянуть в меню "Справка" - "О программе" и нажать гиперссыль "Лицензии используемых компонентов" - то вы там увидите ни один десяток СПО (Свободного Программного Обеспечения), на котором построена коммерческая платформа 1С.

Если правильно распарсил, то вот этот
список
stupak; solinik; starik-2005; gruk; VyacheslavShilov; +5 Ответить
4. gruk 55 30.09.25 06:39 Сейчас в теме
(3) Никогда туда не заглядывал))) А возмущаюсь что вроде IM и есть в 1С и недоступен разработчику. Ну неужели так сложно было интерфейс сделать.
5. gruk 55 30.09.25 06:48 Сейчас в теме
(3) А насчет унылой производительности это вы зря. Конечно, смотря с чем сравнивать. Любая функция на питоне, луа или тем паче на крестах несомненно будет быстрее, но питона в 1С нет.
Если сравнить это решение на небольших картинках менее 300 пикс с "классическим" методом, то получим выигрыш по скорости за счет отсутствия работы в файлами. В целом можно сказать что скорость соизмерима.
А на счет извращения - это да, но пути 1С-ника неисповедимы.
7. gruk 55 30.09.25 07:31 Сейчас в теме
(3)
там всего 15 строк
Уверен, за ними кроется куда больше строк кода в используемых библиотеках, а число 15 говорит о хорошем интерфейсе для реализации такой задачи на питоне. Для всех "нормальных" языков программирования есть мощные и быстрые библиотеки для работы с графикой и канвой. К сожалению, на 1С мы можем это компенсировать только с помощью внешник компонент.
9. starik-2005 3198 30.09.25 11:24 Сейчас в теме
(7)X
Уверен, за ними кроется куда больше строк кода в используемых библиотеках, а число 15 говорит о хорошем интерфейсе для реализации такой задачи на питоне.
Фактически, либа одна - pillow:
from PIL import Image
import os
import sys

def create_image_grid(input_dir, output_path, grid_size):
    images = []
    for filename in sorted(os.listdir(input_dir)):
        if filename.lower().endswith(('.png', '.jpg', '.jpeg')):
            img_path = os.path.join(input_dir, filename)
            images.append(Image.open(img_path))
    
    if not images:
        print("No images found!")
        return
    
    cols, rows = grid_size
    img_width = images[0].width
    img_height = images[0].height
    
    result = Image.new('RGB', (cols * img_width, rows * img_height))
    
    for i, img in enumerate(images[:cols*rows]):
        x = (i % cols) * img_width
        y = (i // cols) * img_height
        result.paste(img, (x, y))
    
    result.save(output_path)
    print(f"Grid saved to {output_path}")

if __name__ == "__main__":
    if len(sys.argv) != 5:
        print("Usage: python grid.py input_dir output_path cols rows")
        sys.exit(1)
    
    input_dir = sys.argv[1]
    output_path = sys.argv[2]
    cols = int(sys.argv[3])
    rows = int(sys.argv[4])
    
    create_image_grid(input_dir, output_path, (cols, rows))
Показать
11. gruk 55 30.09.25 15:43 Сейчас в теме
(9)
Фактически, либа одна - pillow:
Ну жаль что в 1С такой нет ). Я имел ввиду что на питоне пишется все красиво потому, что уже все написано, нужно лишь подключить. Посмотрите код того же from PIL import Image - 4200 строк.
14. starik-2005 3198 30.09.25 17:10 Сейчас в теме
(11)
4200 строк
По сравнению с кодом имиджмэйджика, который в 1С, ваще ниачом.
16. gruk 55 30.09.25 17:44 Сейчас в теме
(14) Дак и это только Image из PIL. Не пойму куда вы клоните, что надо из 1С на питон переходить? ))) и при чем здесь недоделаный IM который в 1С?
17. starik-2005 3198 30.09.25 17:53 Сейчас в теме
(16)
что надо из 1С на питон переходить?
Все к этому идет. Я тут гонял в регион, там старые друзяшки вот захотели с почты файло в папочку класть. И зачем тут 1С? И у них 90% задач такие. то файлы с почты дернуть, то их в онлайн-систему покласть, то выгрузить в ПДФ отдельные страницы. На питоне это делается с помощью дипсиков и прочих ИИ за минуты.
19. gruk 55 30.09.25 18:02 Сейчас в теме
(17) Согласен. Для простых задач - простые решения. Зачем вам питон чтоб на почту ходить и в папку класть? Shell уже не в моде?))
Я же не 1С использую для склейки картинок, а реализую склейку на 1С, т.к. она это не умеет и условия задачи имеют ограничения.
21. starik-2005 3198 30.09.25 18:07 Сейчас в теме
(19)
Shell уже не в моде?
Так питон - это уже почти "шелл". В мелкомячгкой венде это ставится прям с их маркета, не говоря уже о том, что в любом линухе оно искоропки, ибо на них все эти автоматизации сборки и прочего понаписаны.
26. gruk 55 30.09.25 18:22 Сейчас в теме
(21) Писал телеграм-бота для ВиФи роутере на порезаном линуксе без питона. На шеле. Как 2 пальца и без Дипсиков.
Питону - питоновское, 1С - шляпа )))
27. starik-2005 3198 30.09.25 18:24 Сейчас в теме
(26)
Как 2 пальца и без Дипсиков.
Так мог бы и на С++ написать с дипсиками. А то на шелле все пальцы сломал наверное )))
31. gruk 55 30.09.25 18:29 Сейчас в теме
(27)
А то на шелле все пальцы сломал наверное )))
По началу было сложно))))

Было влом виртуалку с линукс-экзотикой поднимать или дебагер к роутеру припаивать для отладки, а шел он и в африке шел, на компе все отладилось и в роутере взлетело, к тому же у меня небыло доступа к железке, я просто отправил проект.
Еще меня шел на IP-камере выручил.
32. starik-2005 3198 30.09.25 18:30 Сейчас в теме
(31) Я на райспбери пиай отлаживал код прям через удаленный отладчик из вскод. Не думаю, что роутер был хуже в этом плане - отладчик там ставиться должен элементарно.
34. gruk 55 30.09.25 18:36 Сейчас в теме
(32)
там ставиться должен элементарно.
Угу, и висит хрен пойми в какой деревне на столбе куда мастер едет только если он завис. вот так бывает. Мне проще было на компе отладить. Все взлетело с 1 раза.
36. hasp_x 156 13.10.25 09:56 Сейчас в теме
Мне нравятся обработки с нестандартным использованием 1С. Спасибо автору
37. gruk 55 15.10.25 18:19 Сейчас в теме
(36) Я только такое и выкладываю, что в практике редко встречается, но решений нет, т.к. за лайками не гонюсь ))) Спасибо за понимание и поддержку!!!
38. gruk 55 15.10.25 19:08 Сейчас в теме
(36) и тут в чате адепты питона упоминали дипсики всякие. а у меня как раз была филосовская беседа с дипсиком на тему этики ИИ закончена, а место еше есть в беседе и я загнал комменты все туда и покрутил. есть. получилось интересно, познавательно и с юмором в конце
https://chat.deepseek.com/share/99o231wi6idf6nfilm
KOTzilla; hasp_x; +2 Ответить
40. KOTzilla 24 21.10.25 09:42 Сейчас в теме
(38) Пункт с прожаркой прям улыбнул=) gruk - "Священник культа «Стабильность любой ценой». Построил карьеру на оправдании говнокода мантрой «Так работает 1С»"
39. hasp_x 156 16.10.25 13:48 Сейчас в теме
(38) спасибо, улыбнуло, Пайтон-революционеры - особенно понравилось
Для отправки сообщения требуется регистрация/авторизация