Показать сообщение отдельно
  #1  
Старый 23.03.2022, 18:43
alexdudchenko2022 alexdudchenko2022 вне форума
Прохожий
 
Регистрация: 16.03.2022
Сообщения: 11
Версия Delphi: XE3
Репутация: 10
По умолчанию Сжатие изображение Jpg (вес)

Всем привет нужно помощь. Имеется фотографии более размерным весом более 1мб. Мне нужно ее подгрузить в Image1 и пере сохранить уже в сжатом по весу, разрешение и холст не трогаем, только исключительно вес, по условию состояние точнее не более 200 кб.

Вообщем нашел то что хотел это самое идеальное что мог найти.
Код:
procedure TForm1.Button1Click(Sender: TObject);

const FileName = 'e:\Безымянный.jpg';
      FileNameOut = 'e:\БезымянныйOut.jpg';

var JpegIn: TJpegImage;
    Bitmap: TBitmap;
    MS: TMemoryStream;

function GetFileSize(PFileName: String): Int64;
var FS: TFileStream;
begin
  FS:=TFileStream.Create(PFileName,fmOpenRead);
  Result:=FS.Size;
  FS.Free;
end;

begin
  {загрузили jpg из файла}
  Label1.Caption:=Format('Размер исходного файла - %d',[GetFileSize(FileName)]);
  JpegIn:=TJpegImage.Create;
  JpegIn.LoadFromFile(FileName);

  {сконвертировали в bmp}
  Bitmap:=TBitmap.Create;
  Bitmap.Assign(JpegIn);

  {компрессия}
  JpegIn.Assign(Bitmap);
  Bitmap.Free;
  JpegIn.CompressionQuality:=50;
  JpegIn.Compress;

  {посмотрели размер в стреам}
  MS:=TMemoryStream.Create;
  JpegIn.SaveToStream(MS);
  Label3.Caption:=Format('Размер в стреам - %d',[MS.Size]);
  MS.Free;

  {записали в файл}
  JpegIn.SaveToFile(FileNameOut);
  Label2.Caption:=Format('Размер выходного файла - %d',[GetFileSize(FileNameOut)]);
  JpegIn.Free;
Но мне теперь надо как то через цикл сделать что бы проверяла размер то что напишу в Edit. Здесь все считай готово на 95% остается еще маленький шаг сделать и на этом всё.
Ответить с цитированием