УстановитьРазмер принимает пиксели, а не проценты. Пропущенная сторона рассчитывается пропорционально; обе заданные стороны могут изменить пропорции.
Где и как запускать
Полный серверный общий модуль своей учебной конфигурации. Картинки только в памяти.
Подготовка
В отдельной своей конфигурации УчебнаяКонфигурацияСинтаксиса создайте серверный общий модуль УчебныеКартинки с флагом Сервер. Вставьте весь код одного урока и вызовите УчебныеКартинки.ВыполнитьПример() из серверной команды своей обработки.
Встроенный собственный PNG имеет 80×40 пикселей: белое поле, синий прямоугольник 40×20 с красной рамкой, начинающийся в точке 20,10. Фотографии, подписи, печати и документы пользователей не используются.
Картинки создаются из Base64 в памяти. Методы изменения меняют ОбрабатываемаяКартинка, а не исходный Картинка. ПолучитьКартинку создаёт отдельный результат; результаты не записываются на диск или в базу.
Основные уроки выполняйте на настольном сервере 1С 8.5.1.1343, не на мобильной платформе. Там другие ограничения форматов, метаданных цвета и плотности.
Последний урок — отдельный клиентский обработчик команды своей управляемой формы: он нужен для ФильтрИменФайлов и чтения устаревшего API, не для серверной обработки.
Процедура ВыполнитьПример() Экспорт
Исходная = Новый Картинка(Base64Значение("iVBORw0KGgoAAAANSUhEUgAAAFAAAAAoCAIAAADmAupWAAAAX0lEQVR4nO3YURGAMAxEwYhAROUgu66KCIZmuO6bE5D9Ta3DqnVYwOkBpwecHnB6r8BzjJZ1gq97bh4wMDAwMDAwMDAwMDAwMDDw1+CzXjx/DDg94PSA0wNOr7oP2N0DKcWmInx+weoAAAAASUVORK5CYII="));
Если Исходная.Ширина() <> 80 ИЛИ Исходная.Высота() <> 40 Тогда
ВызватьИсключение "Собственный PNG должен быть 80 на 40 пикселей";
КонецЕсли;
Обработка = Новый ОбрабатываемаяКартинка(Исходная);
Обработка.УстановитьРазмер(40);
ПоШирине = Обработка.ПолучитьКартинку();
Сообщить(ПоШирине.Ширина() = 40 И ПоШирине.Высота() = 20);
Обработка.УстановитьРазмер(, 10);
ПоВысоте = Обработка.ПолучитьКартинку();
Сообщить(ПоВысоте.Ширина() = 20 И ПоВысоте.Высота() = 10);
Обработка.УстановитьРазмер(30, 30);
Квадрат = Обработка.ПолучитьКартинку();
Сообщить(Квадрат.Ширина() = 30 И Квадрат.Высота() = 30);
Сообщить(Исходная.Ширина() = 80 И Исходная.Высота() = 40);
Сообщить(ПоШирине.Ширина() = 40 И ПоШирине.Высота() = 20);
КонецПроцедурыРазбор по шагам
Передать только ширину 40: высота становится 20, отношение сторон 2:1 сохраняется.
Пропустить первый параметр и задать высоту 10: ширина текущего изображения станет 20.
Задать ширину и высоту 30: результат квадратный, первоначальные пропорции не сохраняются.
Проверить, что первая полученная копия и исходная картинка не стали квадратными.
Как проверить результат
Пять сообщений Истина: 40×20, 20×10, 30×30 и сохранность двух ранее полученных объектов.
После двух первых уменьшений отношение ширины к высоте 2:1; у последнего результата 1:1.
Ожидаемый результат
Разница пропорционального уменьшения и принудительного размера проверяется числами, не только на глаз.
На что обратить внимание
Пиксельные размеры изображения не равны Ширина/Высота элемента формы в символах и строках.
Увеличение числа пикселей не восстановит отсутствующие детали исходного рисунка.
Не используйте ноль или отрицательный размер как способ очистить картинку.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.