Advertisement
DemAl

Сжатие картинок в 1С до заданного размера

Feb 7th, 2023
1,200
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 2.64 KB | None | 0 0
  1. Функция ПолучитьУжатуюКартинку(Крт,УжатьДо) Экспорт
  2.     Отступ = 0.9;
  3.     Крт_ = Крт;
  4.     Пока Крт_.РазмерФайла()>УжатьДо Цикл
  5.         УжатьДо90 = Окр(УжатьДо*Отступ,0);
  6.         КртШирина = Крт.Ширина();
  7.         КртВысота = Крт.Высота();
  8.         РзмКрт = Крт.РазмерФайла();
  9.         Кф = УжатьДо/РзмКрт;
  10.         Кф1 = Log(1.5+Кф*Кф*1.25);
  11.         Кф0 = Кф1/4;
  12.         Кф2 = 3*(1+Кф1)/4;
  13.         Кф = Кф1;
  14.         НоваяШирина = Окр(КртШирина*Кф,0);
  15.         НоваяВысота = Окр(КртВысота*Кф,0);
  16.         ОбрКрт = Новый ОбрабатываемаяКартинка(Крт, Истина);
  17.         ОбрКрт.УстановитьРазмер(НоваяШирина,НоваяВысота);
  18.         Крт_ = ОбрКрт.ПолучитьКартинку();
  19.         Пока ((Крт_.РазмерФайла()>УжатьДо) ИЛИ (Крт_.РазмерФайла()<=УжатьДо90)) И (Кф2-Кф0>0.025) Цикл
  20.             Если Крт_.РазмерФайла()>УжатьДо Тогда
  21.                 Кф2 = Кф1;
  22.                 Кф = (Кф1+Кф0)/2;
  23.                 Кф1 = Кф;
  24.                 ОбрКрт = Новый ОбрабатываемаяКартинка(Крт, Истина);
  25.                 НоваяШирина = Окр(КртШирина*Кф,0);
  26.                 НоваяВысота = Окр(КртВысота*Кф,0);
  27.                 ОбрКрт.УстановитьРазмер(НоваяШирина,НоваяВысота);
  28.                 Крт_ = ОбрКрт.ПолучитьКартинку();
  29.             Иначе
  30.                 Кф0 = Кф1;
  31.                 Кф = (Кф2+Кф1)/2;
  32.                 Кф1 = Кф;
  33.                 ОбрКрт = Новый ОбрабатываемаяКартинка(Крт, Истина);
  34.                 НоваяШирина = Окр(КртШирина*Кф,0);
  35.                 НоваяВысота = Окр(КртВысота*Кф,0);
  36.                 ОбрКрт.УстановитьРазмер(НоваяШирина,НоваяВысота);
  37.                 Крт_ = ОбрКрт.ПолучитьКартинку();
  38.             КонецЕсли;
  39.         КонецЦикла;
  40.         Отступ = Отступ-0.1;
  41.         Если Отступ<0.6 Тогда
  42.             Прервать;
  43.         КонецЕсли;
  44.     КонецЦикла;
  45.     Возврат Крт_;
  46. КонецФункции
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement