gifts2017

Простой редактор изображений без внешних компонент или WIA-селые картинки.

Опубликовал Andrey Smirnov (dusha0020) в раздел Обработки - Универсальные обработки

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

     Исследовать WIA меня заставила потребность автоматизции получения, обработки и размещения фотографий в 1С. Работа с изображениями, конечно, лежит вне принципиальных и важных задач системы автоматизации учета, но тем не менее желание научить 1С не только загружать/сохранять картинки, но и помочь пользователю с их обработкой рано или поздно приходит к большинству разработчиков.

     Интересно то, что 1С не поддерживает даже самых простых средств обработки графических файлов, и восьмерка при всех ее новшествах отнюдь не стала графически более продвинутой по сравнению с клюшкой. Все те же загрузить - выгрузить и минимальные средства управления отображением на форме. Очевидно в эволюции от 7.7 до 8 потребность более сложной работы с графикой не являлась движущим фактором...

     Традиционный путь преодоления врожденных ограничений 1С - использование внешних компонент. До сих пор вопрос о ВК дискуссионный, то есть разброс мнений от принципиально нет любым внешним модулям, до принципиально да на любой потребный чих разработчика. Я лично с осторожностью отношусь к непроверенным ВК с закрытым кодом и тем более никогда не посоветую использовать такую компоненту клиенту. Предпочитаю стабильные, заслужившие уважение коллег ВК-шки с мощным функционалом,  ставшие уже определенным общепризнанным стандартным дополнением основной среды разработки.

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

1. Получение характеристик изображения (длина, ширина, расширение);

2. Обрезка изображения;

3. Поворот изображения;

4. Масштабирование изображения;

5. Наложение одного изображения на другое;

     Все эти средства используют стандартную Windows библиотеку Windows Image Acquisition и требуют для работы собственно наличия данной операционной системы. Изначально писал инструменты под 8-ку, но так как семерка мной все еще любима и не менее ограничена в работе с графикой сделал перевод:)

     Сами функции для обработки графики находятся во внешних обработках, которые демонстрируют примеры их работы. Обработки для 7.7 и 8.х абсолютно равнозначны по функционалу и даже типы файлов, которые можно редактировать и размещать на форме у них одинаковы (то есть 7.7 через WIA также умеет работать с png, tiff и другими форматами графических файлов).

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

Ну вот, собственно, и все! Спасибо за вниманиеWink

Скачать файлы

Наименование Файл Версия Размер
WIAeditor_v8 199
.epf 9,52Kb
02.03.13
199
.epf 9,52Kb Скачать
WIAeditor_v77 24
.ert 14,00Kb
02.03.13
24
.ert 14,00Kb Скачать

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Сергей (Che) Коцюра (CheBurator) 07.03.13 04:25
Спасибо!
а можно прикрутить к 7примеру еще примерчик двигания изображения? то есть показ в мастабе 1-1, но по частям.. и двигать видимую часть изображения в любую сторону..?
2. USER--1C USER--1C (USER--1C) 09.03.13 21:18
Спасибо.
Тоже решал задачу отображения графических файлов и их взаимное расположение в 1С.
Экспериментировал с графическими файлами в объекте Графическая схема. Спасибо сайту, взял много интересных решений, т.к. очень мало документации по Графической схеме. В результате - загрузка графических файлов, перемещение, размещение друг над другом, смена порядка слоев, отключение видимости слоя (графического объекта), сохранение на диск в формате графической схемы. И все только штатными механизмами, но в извращённом исполнении - разбор и изменение структуры Графической схемы через выгрузку-загрузку на диске.
Может 1С разработает нормальные штатные механизмы для примитивной работы с графическими файлами?
3. Andrey Smirnov (dusha0020) 11.03.13 10:53
(1) CheBurator, С двиганием изображения в 7-ке очень хлопотно. Теоретически можно резать файл под размер элемента картинки на форме и вставлять при прокрутке специальными кнопками, но скорость такой прокрутки будет просто аут:)
Здесьесть способ нужной работы с картинкой на форме, но через активекс. Думаю, что в данном случае этот вариант предпочтительнее.
4. Andrey Smirnov (dusha0020) 11.03.13 10:57
(2) USER--1C, Может и разработает:)
Вы правильно заметили, что документации по графической схеме маловато, и Ваш опыт был бы интересен. Не хотите оформить его публикацией?
5. Серж Иванов (adminfo2002) 26.04.13 11:37
К сожалению, не получилось заставить это работать в управляемом приложении на стороне сервера
6. Andrey Smirnov (dusha0020) 26.04.13 12:06
(5) adminfo2002, Ну в самих функциях нет ничего такого, чтобы не работало в УП. Проблемы могут возникнуть с отображением на форме для УП. А может отсутствует библиотека WIA на сервере?
7. Серж Иванов (adminfo2002) 26.04.13 18:43
скрипт, когда пытается сохранить файл по указанному пути, кричит, что файл не обнаружен.Причем, без разницы какой путь указывать. Это если заставлять процедуру отрабатывать на сервере.
8. Сергей (Che) Коцюра (CheBurator) 26.04.13 19:04
Двигание ладно, есть варианты.
а вот обрезку хочется сделать как-то поумнее - мышью выделил нужный прямоугольник и получил crop - можно такое выделение мышью сделать?
9. Серж Иванов (adminfo2002) 06.05.13 18:46
да, скорее всего админом на сервере запрещено выполнение таких скриптов или у пользователя, под которым запущен сервер 1с, нет прав на исполнение. Нашел другую внешнюю компоненту, которая позволяет переворачивать картинки на сервере.
10. Серж Иванов (adminfo2002) 06.05.13 18:49
(8) CheBurator, если можно в 1с получить координаты выделения, то можно такое сделать.
11. Серж Иванов (adminfo2002) 08.05.13 13:58
Интересный, кстати, вариант развития темы и иной путь решения
http://www.1cpp.ru/forum/YaBB.pl?num=1186442602
12. Сергей Щегирёв (shchegirev) 19.06.14 13:42
Требовалось повернуть изображение номенклатуры при печати этикеток. Очень выручило Ваше решение. Спасибо!
13. Сергей Харламов (zatoichi) 03.03.15 08:44
Отличнейшая вещь!!!! не совсем то, что я искал, но тем не менее дало хороший старт
14. Sergey Baryshev (Shadasp) 23.08.15 17:42
скачал обработку, так и не получилось сделать чтобы она заработала.
проблема: не может создать временный файл: "файл не обнаружен"; - папка роли не играет, так же как писал (7).

начал смотреть на службу WIA - пока мысли, хоть служба и стандартная, попробуй ее запусти в работу.
15. Andrey Smirnov (dusha0020) 25.08.15 09:36
(14) Shadasp, Посмотрите лучше в сторону прав. На запускающей машине у пользователя должны быть права администратора. Используйте толстый клиент на обычных формах, а на управляемых - нужно много переписывать, но мне сейчас и лень и некогда:)
16. Sergey Baryshev (Shadasp) 25.08.15 14:07
(15) права администратора, так же пробывал запускать принудительно от администратора.
Проверил службу, запушена, работает под локальным сервисом.

Переназначал права на папки, куда сохраняется файл, менял папки, что еще можете посоветовать сделать ?
Пока даже не пойму, где посмотреть ошибку, которая получается, чтобы от нее уже оттолкнуться.
17. Andrey Smirnov (dusha0020) 26.08.15 13:02
(16) Shadasp, И все-таки я грешу на админские дела. Я уже не помню кода скриптов, но советую Вам выковырять скрипт из обработки и убрать OnError и запускать его хотя бы локально. Без команд обработки ошибок скрипт должен выдавать ошибки исполнения. Вот их и нужно анализировать с администратором.
18. Сергей Поликарпов (Serega-artem) 06.12.15 16:08
Автор огромный молодец! Многочасовые поиски привели сюда и радости нет придела! Просто, изящно и красиво! СПАСИБО!!!
19. Xer shi (Xershi) 06.04.16 10:22
Приветствую! Прочитал описание вашей разработки и появился вопрос!
На днях я написал обработку по QR-кодам. И мне задали вопрос по размещению в баркоде отдельной картинки(логотипа). Я ознакомился со спецификацией баркодов и степенью коррекции ошибок алгоритма шифрования. И важным нюансом оказалось работа с изображением, т.е. получить картинку баркода и наложить на нее картинку-логотип. На сколько ваша разработка может помочь в решении такой задачи? В частности речь идет о том, чтобы картинка логотип занимала не более 30% пикселей самого баркода!
20. Andrey Smirnov (dusha0020) 07.04.16 09:17
(19) Xershi, Добрый день. Не совсем понял проблему. Если картинку лого нужно зашифровать в QR-код, то это не к данной обработке. Если картинку с лого нужно наложить в нужной точке нужным размером на картинку с кодом - то без проблем, берите обработку. Но опять же будет ли после этого читаем QR код вопрос опять не ко мне и этой обработке:)
21. Xer shi (Xershi) 07.04.16 09:51
(20) dusha0020, да все верно. Вопрос будет только стоять как с 100% вероятностью не повредить изображение кода. Но это уже другая задача.
Спасибо за ответ, компонента уже установлена у нас на сервере аж в 4 местах, только не зарегистрирована почему то. Буду с админом разговаривать.
22. Константин Куликов (Светлый ум) 13.09.16 18:00
Не хватает кнопки сохранить (отредактированное), нате:


Процедура СохранитьНажатие(Элемент)
		
	ЗаписываемаяКартинка = ЭлементыФормы.ПолеКартинки1.Картинка;//ЭлементыФормы.ПолеИзображения.Картинка;
	Если ЗаписываемаяКартинка.Вид <> ВидКартинки.Пустая Тогда
		
		ДиалогЗаписиФайла                             = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
		ДиалогЗаписиФайла.Заголовок                   = "Укажите имя файла";
		ДиалогЗаписиФайла.ПолноеИмяФайла              = "";
		ДиалогЗаписиФайла.Фильтр                      = ЗаписываемаяКартинка.ФильтрИменФайлов(); // картинки
		ДиалогЗаписиФайла.ПроверятьСуществованиеФайла = Истина;
		
		Если Не ДиалогЗаписиФайла.Выбрать() Тогда
			Возврат;
		КонецЕсли;
		
		Попытка
			ЗаписываемаяКартинка.Записать(ДиалогЗаписиФайла.ПолноеИмяФайла);
		Исключение
			Предупреждение("Ошибка при записи файла: " + ДиалогЗаписиФайла.ПолноеИмяФайла + Символы.ПС
			+ ОписаниеОшибки() + Символы.ПС + "Файл не записан.");
		КонецПопытки;
		
	КонецЕсли;	
	
КонецПроцедуры
...Показать Скрыть
23. Andrey Smirnov (dusha0020) 14.09.16 11:29
(22) Светлый ум, Спасибо:) Может как-нибудь и приделаю.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа