ОбрабатываемаяКартинка

Типы · ProcessingPicture

Предназначен для преобразования картинок. Изменяющие методы (например, ВыделитьЗначимуюЧасть, Масштабировать, Повернуть) изменяют внутреннее состояние объекта и не возвращают картинку. Для получения результата обработки используются: ПолучитьКартинку - возвращает одно изображение; ПолучитьКартинки - возвращает массив изображений, если результат содержит несколько кадров или фрагментов.

Полное описание, параметры и ограничения

ОбрабатываемаяКартинка (ProcessingPicture)

ОбрабатываемаяКартинка (ProcessingPicture)

Доступен, начиная с версии 8.3.14.

Методы:
ВыделитьЗначимуюЧасть (SelectKeyArea)
ВыделитьОбласть (SelectArea)
Масштабировать (Scale)
Повернуть (Rotate)
ПолучитьКартинки (GetPictures)
ПолучитьКартинку (GetPicture)
ПреобразоватьВОттенкиСерого (ConvertToGrayScale)
УстановитьГлубинуЦвета (SetColorDepth)
УстановитьПлотность (SetDensity)
УстановитьРазмер (SetSize)
УстановитьФормат (SetFormat)

Конструкторы:
На основании массива картинок и формата
По умолчанию

Описание:

Предназначен для преобразования картинок.

Изменяющие методы (например, ВыделитьЗначимуюЧасть, Масштабировать, Повернуть) изменяют внутреннее состояние объекта и не возвращают картинку.
Для получения результата обработки используются:
ПолучитьКартинку - возвращает одно изображение;

ПолучитьКартинки - возвращает массив изображений, если результат содержит несколько кадров или фрагментов.

Доступность:

Сервер, толстый клиент, внешнее соединение, мобильное приложение (сервер), мобильный автономный сервер.

Использование в версии:

Доступен, начиная с версии 8.3.14.

Методическая информация

Практические примеры

Обрезать свой прямоугольник, уменьшить вдвое и повернуть на 90 градусов

ВыделитьОбласть, Масштабировать и Повернуть не возвращают картинку. Отдельные результаты получаются после каждого шага через ПолучитьКартинку.

Где и как запускать

Полный серверный общий модуль своей учебной конфигурации. Картинки только в памяти.

Подготовка

  1. В отдельной своей конфигурации УчебнаяКонфигурацияСинтаксиса создайте серверный общий модуль УчебныеКартинки с флагом Сервер. Вставьте весь код одного урока и вызовите УчебныеКартинки.ВыполнитьПример() из серверной команды своей обработки.

  2. Встроенный собственный PNG имеет 80×40 пикселей: белое поле, синий прямоугольник 40×20 с красной рамкой, начинающийся в точке 20,10. Фотографии, подписи, печати и документы пользователей не используются.

  3. Картинки создаются из Base64 в памяти. Методы изменения меняют ОбрабатываемаяКартинка, а не исходный Картинка. ПолучитьКартинку создаёт отдельный результат; результаты не записываются на диск или в базу.

  4. Основные уроки выполняйте на настольном сервере 1С 8.5.1.1343, не на мобильной платформе. Там другие ограничения форматов, метаданных цвета и плотности.

  5. Последний урок — отдельный клиентский обработчик команды своей управляемой формы: он нужен для ФильтрИменФайлов и чтения устаревшего 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);
    Сообщить(Не Исходная.НаборВариантов);
    Сообщить("Вид исходной картинки: " + Строка(Исходная.Вид));
КонецПроцедуры

Разбор по шагам

  1. Начало координат области — левый верхний угол, смещения и размеры заданы в пикселях.

  2. Сначала вырезать центральный прямоугольник 40×20. Затем масштабировать его на 50 процентов, не на коэффициент 0,5.

  3. Повернуть текущие 20×10 на 90 градусов: ширина и высота меняются местами.

  4. Сравнить ранее полученные картинки с новым результатом. Исходная и промежуточные снимки не изменились.

  5. Вид — только чтение; его фактическое представление выводится. НаборВариантов не является количеством кадров.

Как проверить результат

  1. Семь булевых сообщений Истина; затем фактический Вид исходного PNG.

  2. Результаты: 40×20, 20×10, 10×20; исходный PNG по-прежнему 80×40.

Ожидаемый результат

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

На что обратить внимание

  1. Коэффициент Масштабировать должен быть больше нуля. 50 означает 50 процентов.

  2. Не присваивайте результат ВыделитьОбласть или Повернуть: картинка получается отдельным методом.

  3. У прямоугольника нельзя задавать область за пределами исходника. Здесь координаты заранее известны из собственного PNG.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Задать плотность PNG и отличить DPI от пиксельного размера

УстановитьПлотность меняет метаданные физического размера. Пиксельные 80×40 остаются прежними; допускается округление плотности при записи PNG.

Где и как запускать

Полный серверный общий модуль своей учебной конфигурации. Картинки только в памяти.

Подготовка

  1. В отдельной своей конфигурации УчебнаяКонфигурацияСинтаксиса создайте серверный общий модуль УчебныеКартинки с флагом Сервер. Вставьте весь код одного урока и вызовите УчебныеКартинки.ВыполнитьПример() из серверной команды своей обработки.

  2. Встроенный собственный PNG имеет 80×40 пикселей: белое поле, синий прямоугольник 40×20 с красной рамкой, начинающийся в точке 20,10. Фотографии, подписи, печати и документы пользователей не используются.

  3. Картинки создаются из Base64 в памяти. Методы изменения меняют ОбрабатываемаяКартинка, а не исходный Картинка. ПолучитьКартинку создаёт отдельный результат; результаты не записываются на диск или в базу.

  4. Основные уроки выполняйте на настольном сервере 1С 8.5.1.1343, не на мобильной платформе. Там другие ограничения форматов, метаданных цвета и плотности.

  5. Последний урок — отдельный клиентский обработчик команды своей управляемой формы: он нужен для ФильтрИменФайлов и чтения устаревшего API, не для серверной обработки.

Процедура ВыполнитьПример() Экспорт
    Исходная = Новый Картинка(Base64Значение("iVBORw0KGgoAAAANSUhEUgAAAFAAAAAoCAIAAADmAupWAAAAX0lEQVR4nO3YURGAMAxEwYhAROUgu66KCIZmuO6bE5D9Ta3DqnVYwOkBpwecHnB6r8BzjJZ1gq97bh4wMDAwMDAwMDAwMDAwMDDw1+CzXjx/DDg94PSA0wNOr7oP2N0DKcWmInx+weoAAAAASUVORK5CYII="));
    Если Исходная.Ширина() <> 80 ИЛИ Исходная.Высота() <> 40 Тогда
        ВызватьИсключение "Собственный PNG должен быть 80 на 40 пикселей";
    КонецЕсли;
    ИсходнаяГоризонталь = Исходная.ПлотностьПоГоризонтали();
    ИсходнаяВертикаль = Исходная.ПлотностьПоВертикали();
    Обработка = Новый ОбрабатываемаяКартинка(Исходная);
    Обработка.УстановитьФормат(ФорматКартинки.PNG);
    Обработка.УстановитьПлотность(300);
    Первая = Обработка.ПолучитьКартинку();
    Сообщить(Первая.ПлотностьПоГоризонтали() <> Неопределено);
    Сообщить(ПлотностьБлизка(Первая.ПлотностьПоГоризонтали(), 300));
    Сообщить(ПлотностьБлизка(Первая.ПлотностьПоВертикали(), 300));
    Обработка.УстановитьПлотность(150, 300);
    Вторая = Обработка.ПолучитьКартинку();
    Сообщить(ПлотностьБлизка(Вторая.ПлотностьПоГоризонтали(), 150));
    Сообщить(ПлотностьБлизка(Вторая.ПлотностьПоВертикали(), 300));
    Сообщить(Вторая.Ширина() = 80 И Вторая.Высота() = 40);
    Сообщить(Исходная.ПлотностьПоГоризонтали() = ИсходнаяГоризонталь);
    Сообщить(Исходная.ПлотностьПоВертикали() = ИсходнаяВертикаль);
КонецПроцедуры

Функция ПлотностьБлизка(Фактическая, Ожидаемая)
    Если Фактическая = Неопределено Тогда
        Возврат Ложь;
    КонецЕсли;
    Возврат Фактическая > Ожидаемая - 1 И Фактическая < Ожидаемая + 1;
КонецФункции

Разбор по шагам

  1. Запомнить фактическую исходную плотность, не присваивать стандартное значение из предположения.

  2. При одном параметре 300 вертикальная плотность берётся равной горизонтальной.

  3. При двух параметрах задать 150 по горизонтали и 300 по вертикали; размеры в пикселях не менять.

  4. Сравнивать плотность с допуском меньше 1 DPI из-за целочисленного представления единиц PNG.

  5. Проверить, что исходная картинка сохранила свою первоначальную метаинформацию.

Как проверить результат

  1. В настольном опыте восемь сообщений Истина. У второй копии 80×40, плотности примерно 150 и 300 DPI.

  2. Горизонтальная и вертикальная плотности исходника равны значениям, сохранённым до обработки.

Ожидаемый результат

Изменена физическая интерпретация рисунка без увеличения разрешения в пикселях.

На что обратить внимание

  1. Не во всех форматах плотность хранится: успешный вызов не всегда означает изменение метаинформации.

  2. Не выполняйте арифметику с Неопределено для картинки коллекции или мобильной платформы. Здесь используется свой самостоятельный настольный PNG.

  3. Это не настройка принтера и не масштаб элемента формы.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.