紧急求助,如何将大图片转换成小图片后保存(50分)

  • 主题发起人 主题发起人 li99106
  • 开始时间 开始时间
L

li99106

Unregistered / Unconfirmed
GUEST, unregistred user!
请教:如何将大的jpeg图片转换成小的jpeg图片,保存在数据库当中!
 
先将大的jpeg转换为Bitmap,然后利用Bitmap.StretchDraw转换为一个小的Bitmap,再将这个小的Bitmap转换为jpeg.
 
这太麻烦了需要转换两次,能不能有直接的方法将.jpeg图片按照一定的压缩比例进行保存,比如将一张2M多图片转换成400k的图片进行保存!
 
好象必须要经过转化成tbitmap这个过程...
 
对,你只能先转换成bitmap,再用canvas.stretchdraw缩小,再保存。网上有不少这样的例程的。www.torry.net上好象有,用thumbnail为关键字搜索!
 
TJPEGImage里有个Scale可以用,扫描原始尺寸的1/1, 1/2, 1/4, 1/8
下面代码是直接复制过来的,慢慢看:
TJPEG := TJPEGImage.Create;
TJPEG.Scale := TJPEGScale(0);
//TJPEG.Performance := jpBestSpeed;
TJPEG.Performance := jpBestQuality;
if (p.ImageWidth >= (MaxWidth*2))or(p.ImageHeight >= (MaxHeight*2)) then TJPEG.Scale := TJPEGScale(1);
if (p.ImageWidth >= (MaxWidth*4))or(p.ImageHeight >= (MaxHeight*4)) then TJPEG.Scale := TJPEGScale(2);
if (p.ImageWidth >= (MaxWidth*8))or(p.ImageHeight >= (MaxHeight*8)) then TJPEG.Scale := TJPEGScale(3);
try
TJPEG.LoadFromFile(p.FilePath + p.FileName);
except
p.ThumbStatus := -42;
TJPEG.Free;
exit;
end;
try
TJPEG.DIBNeeded;
except
p.ThumbStatus := -43;
TJPEG.Free;
exit;
end;
bmp := TBitmap.Create;
cRect := GetReSizeRect(MaxWidth, MaxHeight, TJPEG.Width, TJPEG.Height);
bmp.Width := cRect.Right;
bmp.Height := cRect.Bottom;
bmp.Canvas.Brush.color := clBtnFace;
bmp.Canvas.FillRect(cRect);
bmp.PixelFormat := pf24bit;
bmp.Canvas.StretchDraw(cRect, TJPEG);
TJPEG.Assign(bmp);
bmp.Free;
 
var
MyJpeg: TJpegImage;
Image1:TImage;
begin
Image1:= TImage.Create(application);
MyJpeg:= TJpegImage.Create;
MyJpeg.LoadFromFile('打开文件路径');
MyJpeg.CompressionQuality:=scale;
MyJpeg.Compress;
MyJpeg.SaveToFile(‘转换后的文件路径’);
end;

以上代码我在运行时,没有报错!可是图片进行压缩后,生成一张零k图片!请问各位高手,这是什么原因!请给于指教!
 
var jpg1,jpg2:TJpegImage;
bmp1:TBitMap;
begin
Jpg1:=TJpegImage.Create;
Jpg2:=TJpegImage.Create;
bmp1:=TBitMap.Create;
Jpg1.CompressionQuality:=10;
Jpg2.LoadFromFile('c:/1.jpg');
Bmp1.Assign(Jpg2);
Jpg1.Assign(Bmp1);
Jpg1.SaveToFile('C:/2.Jpg');
end;
 
to:ycjjcy
还是你厉害,给你加分!
 
多人接受答案了。
 
后退
顶部