Данный фрагмент кода будет полезен для случаев, когда нужно сохранить картинку в базу, но она очень большая, а заморачиваться с ее обработкой внешними программами не хочется.
На вход в функцию подается параметр СжимаемаяКартинка типа "Картинка", которую требуется сжать.
Если картинка больше указанной высоты (в пикселях), то происходит ее уменьшение по вертикали до параметра УказаннаяВысота, а ширина уменьшается пропорционально.
Функция СжатьКартинку(СжимаемаяКартинка) СжатаяКартинка = СжимаемаяКартинка; ИсходнаяВысота = Формат(СжимаемаяКартинка.Высота(), "ЧГ=0"); ИсходнаяШирина = Формат(СжимаемаяКартинка.Ширина(), "ЧГ=0"); ИсходныйРазмер = Формат(СжимаемаяКартинка.РазмерФайла(), "ЧГ=0"); МаксимальнаяВысота = Константы.ВысотаЗагружаемыхКартинок.Получить(); // ПКС СтепеньСжатия = Новый СжатиеДанных(1); // от -1 до 9, 0 = без сжатия, 9 - максимальное сжатие ТекущаяВысота = СжимаемаяКартинка.Высота(); Если ТекущаяВысота > МаксимальнаяВысота И МаксимальнаяВысота > 0 Тогда ОбрабатываемаяКартинка = Новый ОбрабатываемаяКартинка(СжимаемаяКартинка); ОбрабатываемаяКартинка.УстановитьРазмер(Неопределено, МаксимальнаяВысота); СжатаяКартинка = ОбрабатываемаяКартинка.ПолучитьКартинку(); ИтоговаяВысота = Формат(СжатаяКартинка.Высота(), "ЧГ=0"); // Пкс ИтоговаяШирина = Формат(СжатаяКартинка.Ширина(), "ЧГ=0"); // Пкс ИтоговыйРазмер = Формат(СжатаяКартинка.РазмерФайла(), "ЧГ=0"); // байт Сообщить("Сжали картинку. Height: "+ИсходнаяВысота+"->"+ИтоговаяВысота+"pxl, Width: "+ИсходнаяШирина+"->"+ИтоговаяШирина+"pxl, Size: "+ИсходныйРазмер+"->"+ИтоговыйРазмер+" bytes"); КонецЕсли; Возврат Новый ХранилищеЗначения(СжатаяКартинка, СтепеньСжатия); КонецФункции
Функция подойдет как для управляемых так и для обычных форм. Успешно прошла тестирование на платформе 1С:Предприятие 8.3 (8.3.22.2239).
Для добавления комментария необходимо авторизоваться.
Вход | Регистрация