Delphi 如何减少JPG文件的大小?
几天前我问了这个问题,得到了答案: 现在,当我将TPanel中的内容(1x形状、1x时间间隔、2x TLabel)保存为JPG文件时,Delphi 如何减少JPG文件的大小?,delphi,size,jpeg,reduce,Delphi,Size,Jpeg,Reduce,几天前我问了这个问题,得到了答案: 现在,当我将TPanel中的内容(1x形状、1x时间间隔、2x TLabel)保存为JPG文件时, JPG文件的大小从20kb(即图片的大小)增加到620kb 尺寸几乎相同。原始JPG文件320x320,新JPG图片361x440 那么,如何缩小这个尺寸呢 这是第一个问题的答案,来自@iPath,所以这就是如何创建新的JPG文件: procedure TForm1.SavePanelAsImage; var img: TBitmap; begin img
JPG文件的大小从20kb(即图片的大小)增加到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
保存文件。使用属性控制压缩。一旦你有了位图中的图像,把它转换成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;
文件保存为位图,而不是JPEG格式 即使在“质量非常好”的情况下,JPEG也不会有那么大
但是,32位位图(不带RLE)将为-361*440*4(字节/像素)~640k尝试使用内核批量图像大小调整工具一次性调整图像大小。正在创建位图文件!在我回答中的注释部分,我提到必须使用TJPEGImage将位图转换为Jpeg。我的示例保存了一个位图,@David Heffernan澄清了这一点;)请注意,顺便说一句,JPEG是一种有损压缩算法,这意味着如果保存图像并再次加载,则无法返回完全相同的图像。因此,如果您多次编辑它,每次保存为JPEG,您的图像将遭受多代损失。
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;