我自己写的一个jpg文件的压缩过程,不过好像有些问题。 ( 积分: 100 )

  • 主题发起人 主题发起人 superdyp
  • 开始时间 开始时间
S

superdyp

Unregistered / Unconfirmed
GUEST, unregistred user!
过程如下:
procedure CompressJpg(oldFile: String; JpgFile: String; Quality: Integer)
{
说明:压缩Jpg图片
参数:oldFile 源图片名
参数:JpgFile 目标图片名
参数:Quality 压缩率
}
var
Jpeg: TJPEGImage;
begin
if not FileExists(oldFile) then
Exit;
try
Jpeg := TJPEGImage.Create;
with Jpeg do
begin
LoadFromFile(oldFile);
CompressionQuality := Quality; //压缩比例
Compress;
SaveToFile(JpgFile); //保存路径、文件
end;
finally
end;
end;

可是为何执行完后,在指定的目录中,是产生的一个jpg文件,但其大小为OK??是否这个过程有问题呢? 谢谢!
 
过程如下:
procedure CompressJpg(oldFile: String; JpgFile: String; Quality: Integer)
{
说明:压缩Jpg图片
参数:oldFile 源图片名
参数:JpgFile 目标图片名
参数:Quality 压缩率
}
var
Jpeg: TJPEGImage;
begin
if not FileExists(oldFile) then
Exit;
try
Jpeg := TJPEGImage.Create;
with Jpeg do
begin
LoadFromFile(oldFile);
CompressionQuality := Quality; //压缩比例
Compress;
SaveToFile(JpgFile); //保存路径、文件
end;
finally
end;
end;

可是为何执行完后,在指定的目录中,是产生的一个jpg文件,但其大小为OK??是否这个过程有问题呢? 谢谢!
 
觉得Compress过程的作用不是你那样用,看看关于Compress的帮助:
Forces the action of compression.
procedure Compress;
Description
Call Compress to compress for optimization, such as before streaming out when assigning a bitmap to a jpeg. Changing properties like CompressionQuality does not force compression. To force compression, call Compress.
改动一下你的代码:
procedure CompressJpg(oldFile: String; JpgFile: String; Quality: Integer)
var //主要增加一个TBitmap对象,将Bitmap图象压缩为Jpeg图象
AJpeg :TJPEGImage;
aBmp :TBitmap;
begin
if not FileExists(oldFile) then
Exit;
try
AJpeg := TJPEGImage.Create;
aBmp :=TBitmap.Create;
aBmp.LoadFromFile(oldFile);
AJpeg.Compress;
AJpeg.CompressionQuality := TJPEGQualityRange(Quality);//压缩比例
AJpeg.Assign(aBmp); //这个过程里已经按比例压缩转换了格式
AJpeg.SaveToFile(JpgFile); //保存路径、文件
finally
AJpeg.Free;
aBmp.Free;
end;
end;

var
Path1,Path2 :string;
begin
Path1 :='AA.bmp';
Path2 :='BB.jpg';
self.CompressJpg(Path1,Path2,50); //可以将50改为其他比例,是有不同的
end;
 
不是呀。我的oldfile已经是jpg格式的了
 
应该没有问题啊
 
后退
顶部