Предназначен для преобразования картинок. Изменяющие методы (например, ВыделитьЗначимуюЧасть, Масштабировать, Повернуть) изменяют внутреннее состояние объекта и не возвращают картинку. Для получения результата обработки используются: ПолучитьКартинку - возвращает одно изображение; ПолучитьКартинки - возвращает массив изображений, если результат содержит несколько кадров или фрагментов.
Полное описание, параметры и ограничения
ОбрабатываемаяКартинка (ProcessingPicture)
ОбрабатываемаяКартинка (ProcessingPicture)
Доступен, начиная с версии 8.3.14.
Методы:
ВыделитьЗначимуюЧасть (SelectKeyArea)
ВыделитьОбласть (SelectArea)
Масштабировать (Scale)
Повернуть (Rotate)
ПолучитьКартинки (GetPictures)
ПолучитьКартинку (GetPicture)
ПреобразоватьВОттенкиСерого (ConvertToGrayScale)
УстановитьГлубинуЦвета (SetColorDepth)
УстановитьПлотность (SetDensity)
УстановитьРазмер (SetSize)
УстановитьФормат (SetFormat)
Конструкторы:
На основании массива картинок и формата
По умолчанию
Описание:
Предназначен для преобразования картинок.
Изменяющие методы (например, ВыделитьЗначимуюЧасть, Масштабировать, Повернуть) изменяют внутреннее состояние объекта и не возвращают картинку.
Для получения результата обработки используются:
ПолучитьКартинку - возвращает одно изображение;
ПолучитьКартинки - возвращает массив изображений, если результат содержит несколько кадров или фрагментов.
Доступность:
Сервер, толстый клиент, внешнее соединение, мобильное приложение (сервер), мобильный автономный сервер.
Использование в версии:
Доступен, начиная с версии 8.3.14.
Методическая информация
Практические примеры
Обрезать свой прямоугольник, уменьшить вдвое и повернуть на 90 градусов
ВыделитьОбласть, Масштабировать и Повернуть не возвращают картинку. Отдельные результаты получаются после каждого шага через ПолучитьКартинку.
Где и как запускать
Полный серверный общий модуль своей учебной конфигурации. Картинки только в памяти.
Подготовка
В отдельной своей конфигурации УчебнаяКонфигурацияСинтаксиса создайте серверный общий модуль УчебныеКартинки с флагом Сервер. Вставьте весь код одного урока и вызовите УчебныеКартинки.ВыполнитьПример() из серверной команды своей обработки.
Встроенный собственный PNG имеет 80×40 пикселей: белое поле, синий прямоугольник 40×20 с красной рамкой, начинающийся в точке 20,10. Фотографии, подписи, печати и документы пользователей не используются.
Картинки создаются из Base64 в памяти. Методы изменения меняют ОбрабатываемаяКартинка, а не исходный Картинка. ПолучитьКартинку создаёт отдельный результат; результаты не записываются на диск или в базу.
Основные уроки выполняйте на настольном сервере 1С 8.5.1.1343, не на мобильной платформе. Там другие ограничения форматов, метаданных цвета и плотности.
Последний урок — отдельный клиентский обработчик команды своей управляемой формы: он нужен для ФильтрИменФайлов и чтения устаревшего API, не для серверной обработки.
Процедура ВыполнитьПример() Экспорт
Исходная = Новый Картинка(Base64Значение("iVBORw0KGgoAAAANSUhEUgAAAFAAAAAoCAIAAADmAupWAAAAX0lEQVR4nO3YURGAMAxEwYhAROUgu66KCIZmuO6bE5D9Ta3DqnVYwOkBpwecHnB6r8BzjJZ1gq97bh4wMDAwMDAwMDAwMDAwMDDw1+CzXjx/DDg94PSA0wNOr7oP2N0DKcWmInx+weoAAAAASUVORK5CYII="));
Если Исходная.Ширина() <> 80 ИЛИ Исходная.Высота() <> 40 Тогда
ВызватьИсключение "Собственный PNG должен быть 80 на 40 пикселей";
КонецЕсли;
Обработка = Новый ОбрабатываемаяКартинка(Исходная);
Обработка.ВыделитьОбласть(20, 10, 40, 20);
Обрезанная = Обработка.ПолучитьКартинку();
Сообщить(Обрезанная.Ширина() = 40 И Обрезанная.Высота() = 20);
Обработка.Масштабировать(50);
Уменьшенная = Обработка.ПолучитьКартинку();
Сообщить(Уменьшенная.Ширина() = 20 И Уменьшенная.Высота() = 10);
Обработка.Повернуть(90);
Повернутая = Обработка.ПолучитьКартинку();
Сообщить(Повернутая.Ширина() = 10 И Повернутая.Высота() = 20);
Сообщить(Обрезанная.Ширина() = 40 И Уменьшенная.Ширина() = 20);
Сообщить(Исходная.Ширина() = 80 И Исходная.Высота() = 40);
Сообщить(Исходная.Формат() = ФорматКартинки.PNG);
Сообщить(Не Исходная.НаборВариантов);
Сообщить("Вид исходной картинки: " + Строка(Исходная.Вид));
КонецПроцедурыРазбор по шагам
Начало координат области — левый верхний угол, смещения и размеры заданы в пикселях.
Сначала вырезать центральный прямоугольник 40×20. Затем масштабировать его на 50 процентов, не на коэффициент 0,5.
Повернуть текущие 20×10 на 90 градусов: ширина и высота меняются местами.
Сравнить ранее полученные картинки с новым результатом. Исходная и промежуточные снимки не изменились.
Вид — только чтение; его фактическое представление выводится. НаборВариантов не является количеством кадров.
Как проверить результат
Семь булевых сообщений Истина; затем фактический Вид исходного PNG.
Результаты: 40×20, 20×10, 10×20; исходный PNG по-прежнему 80×40.
Ожидаемый результат
Последовательность реальных преобразований с проверкой размеров и сохранности исходника.
На что обратить внимание
Коэффициент Масштабировать должен быть больше нуля. 50 означает 50 процентов.
Не присваивайте результат ВыделитьОбласть или Повернуть: картинка получается отдельным методом.
У прямоугольника нельзя задавать область за пределами исходника. Здесь координаты заранее известны из собственного PNG.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.
Задать плотность PNG и отличить DPI от пиксельного размера
УстановитьПлотность меняет метаданные физического размера. Пиксельные 80×40 остаются прежними; допускается округление плотности при записи PNG.
Где и как запускать
Полный серверный общий модуль своей учебной конфигурации. Картинки только в памяти.
Подготовка
В отдельной своей конфигурации УчебнаяКонфигурацияСинтаксиса создайте серверный общий модуль УчебныеКартинки с флагом Сервер. Вставьте весь код одного урока и вызовите УчебныеКартинки.ВыполнитьПример() из серверной команды своей обработки.
Встроенный собственный PNG имеет 80×40 пикселей: белое поле, синий прямоугольник 40×20 с красной рамкой, начинающийся в точке 20,10. Фотографии, подписи, печати и документы пользователей не используются.
Картинки создаются из Base64 в памяти. Методы изменения меняют ОбрабатываемаяКартинка, а не исходный Картинка. ПолучитьКартинку создаёт отдельный результат; результаты не записываются на диск или в базу.
Основные уроки выполняйте на настольном сервере 1С 8.5.1.1343, не на мобильной платформе. Там другие ограничения форматов, метаданных цвета и плотности.
Последний урок — отдельный клиентский обработчик команды своей управляемой формы: он нужен для ФильтрИменФайлов и чтения устаревшего API, не для серверной обработки.
Процедура ВыполнитьПример() Экспорт
Исходная = Новый Картинка(Base64Значение("iVBORw0KGgoAAAANSUhEUgAAAFAAAAAoCAIAAADmAupWAAAAX0lEQVR4nO3YURGAMAxEwYhAROUgu66KCIZmuO6bE5D9Ta3DqnVYwOkBpwecHnB6r8BzjJZ1gq97bh4wMDAwMDAwMDAwMDAwMDDw1+CzXjx/DDg94PSA0wNOr7oP2N0DKcWmInx+weoAAAAASUVORK5CYII="));
Если Исходная.Ширина() <> 80 ИЛИ Исходная.Высота() <> 40 Тогда
ВызватьИсключение "Собственный PNG должен быть 80 на 40 пикселей";
КонецЕсли;
ИсходнаяГоризонталь = Исходная.ПлотностьПоГоризонтали();
ИсходнаяВертикаль = Исходная.ПлотностьПоВертикали();
Обработка = Новый ОбрабатываемаяКартинка(Исходная);
Обработка.УстановитьФормат(ФорматКартинки.PNG);
Обработка.УстановитьПлотность(300);
Первая = Обработка.ПолучитьКартинку();
Сообщить(Первая.ПлотностьПоГоризонтали() <> Неопределено);
Сообщить(ПлотностьБлизка(Первая.ПлотностьПоГоризонтали(), 300));
Сообщить(ПлотностьБлизка(Первая.ПлотностьПоВертикали(), 300));
Обработка.УстановитьПлотность(150, 300);
Вторая = Обработка.ПолучитьКартинку();
Сообщить(ПлотностьБлизка(Вторая.ПлотностьПоГоризонтали(), 150));
Сообщить(ПлотностьБлизка(Вторая.ПлотностьПоВертикали(), 300));
Сообщить(Вторая.Ширина() = 80 И Вторая.Высота() = 40);
Сообщить(Исходная.ПлотностьПоГоризонтали() = ИсходнаяГоризонталь);
Сообщить(Исходная.ПлотностьПоВертикали() = ИсходнаяВертикаль);
КонецПроцедуры
Функция ПлотностьБлизка(Фактическая, Ожидаемая)
Если Фактическая = Неопределено Тогда
Возврат Ложь;
КонецЕсли;
Возврат Фактическая > Ожидаемая - 1 И Фактическая < Ожидаемая + 1;
КонецФункцииРазбор по шагам
Запомнить фактическую исходную плотность, не присваивать стандартное значение из предположения.
При одном параметре 300 вертикальная плотность берётся равной горизонтальной.
При двух параметрах задать 150 по горизонтали и 300 по вертикали; размеры в пикселях не менять.
Сравнивать плотность с допуском меньше 1 DPI из-за целочисленного представления единиц PNG.
Проверить, что исходная картинка сохранила свою первоначальную метаинформацию.
Как проверить результат
В настольном опыте восемь сообщений Истина. У второй копии 80×40, плотности примерно 150 и 300 DPI.
Горизонтальная и вертикальная плотности исходника равны значениям, сохранённым до обработки.
Ожидаемый результат
Изменена физическая интерпретация рисунка без увеличения разрешения в пикселях.
На что обратить внимание
Не во всех форматах плотность хранится: успешный вызов не всегда означает изменение метаинформации.
Не выполняйте арифметику с Неопределено для картинки коллекции или мобильной платформы. Здесь используется свой самостоятельный настольный PNG.
Это не настройка принтера и не масштаб элемента формы.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.