delphi - 如何减小 JPG 文件的大小?

标签 delphi size jpeg reduce

前几天我问了这个问题并得到了答案: How to add a picture frame and insert the text in the image?

现在,当我将 TPanel 中的内容(1x 形状、1x TImage、2x TLabel)保存为 JPG 文件时,
该 JPG 文件的大小从 20kb(TImage 中图片的大小)增加到 620kb。

尺寸几乎相同。原始JPG文件320x320,新JPG图片361x440。

那么,如何减小这个尺寸呢?

这是来自 @iPath 的第一个问题的答案,这就是创建新 JPG 文件的方式:

procedure TForm1.SavePanelAsImage;
var
 img: TBitmap;
begin
 img := TBitmap.Create;
 try
  img.Width := fpPanel.Width;
  img.Height := fpPanel.Height;
  fpPanel.PaintTo(img.Canvas, 0, 0);
  img.SaveToFile(fpFileName);
 finally
  img.Free;
end;
end;

最佳答案

您保存的不是 JPEG 图像。您已保存 Windows 位图。那根本没有压缩。它恰好具有 .jpg 扩展名,但这并不意味着文件本身就是 JPEG。

您需要使用TJPEGImage来保存文件。使用 CompressionQuality 控制压缩属性(property)。将图像转换为位图后,将其转换为 JPEG

uses
  jpeg;

procedure TForm1.SavePanelAsImage;
var
  img: TBitmap;
  JpegImage: TJPEGImage;
begin
  img := TBitmap.Create;
  try
    img.Width := fpPanel.Width;
    img.Height := fpPanel.Height;
    fpPanel.PaintTo(img.Canvas, 0, 0);
    JpegImage := TJPEGImage.Create;
    try
      JpegImage.CompressionQuality := ...;//you decide the value
      JpegImage.Assign(img);
      JpegImage.SaveToFile(fpFileName);
    finally
      JpegImage.Free;
    end;
  finally
    img.Free;
  end;
end;

关于delphi - 如何减小 JPG 文件的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13259190/

相关文章:

c# - 是否可以从控件创建 JPG?

delphi - Delphi 是否有使用 [Dependency] 等属性的 DI 框架?

c - Delphi dcu 到 obj

delphi - 使用 Delphi 将缓冲区中的值集成

delphi - 在Delphi中,有没有办法调整TMemo的行距?

r - 如何更改排列Grob 上的标题(顶部)大小?

c++ - 数组大小由输入文件的行数定义

html - 浏览器中的图像比在 css 中设置的大

ios - 下载时如何在 UIImageView 中显示渐进式 JPEG?

PHP从url下载jpeg图像