如何减小JPG文件的大小?

时间:2012-11-06 20:50:56

标签: 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增加到TIk的图片大小,达到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;

4 个答案:

答案 0 :(得分:14)

您保存的内容不是JPEG图片。您已保存Windows位图。那根本没有压缩。它恰好具有.jpg扩展名,但这并不会使文件本身成为JPEG。

您需要使用TJPEGImage来保存文件。使用CompressionQuality属性控制压缩。将图像放入位图后,将其传输到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;

答案 1 :(得分:4)

文件保存为位图,为JPEG。

即使是“非常好的质量”,JPEG也不会那么大。

然而,32位位图(没有RLE) - 361 * 440 * 4(字节/像素)~640k

答案 2 :(得分:4)

implementation
uses Jpeg;


procedure SaveBMPasJPG(bmp:TBitmap; const FileName:String;Quality:Integer=90);
var
  jpg:TJpegImage;
begin
   jpg:=TJpegImage.Create;
   try
     jpg.CompressionQuality := Quality;
     jpg.Assign(bmp);
     jpg.SaveToFile(FileName);
   finally
     jpg.Free;
   end;

end;

答案 3 :(得分:-2)

尝试使用内核批量图像缩放器工具,一次调整单个或多个图像的大小。