emsir
Егор Ширялин
0 комментариев 3 162 25.12.2023

Сжатие картинок в 1С

Данный фрагмент кода будет полезен для случаев, когда нужно сохранить картинку в базу, но она очень большая, а заморачиваться с ее обработкой внешними программами не хочется.

На вход в функцию подается параметр СжимаемаяКартинка типа "Картинка", которую требуется сжать.

Если картинка больше указанной высоты (в пикселях), то происходит ее уменьшение по вертикали до параметра УказаннаяВысота, а ширина уменьшается пропорционально.

Функция СжатьКартинку(СжимаемаяКартинка) СжатаяКартинка = СжимаемаяКартинка; ИсходнаяВысота = Формат(СжимаемаяКартинка.Высота(), "ЧГ=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).

Комментарии (0)

Для добавления комментария необходимо авторизоваться.

Вход | Регистрация