图片压缩!

mediafang2003 2007-05-22 11:32:40
怎么用delphi实现对jpg图片的压缩保存和解压缩显示,jpg图片太大,我想在用户上传的时候就对图片压缩保存,好像抓屏的保存后还是很大,请教大家怎么实现的。多谢
...全文
524 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
xbase 2008-06-17
  • 打赏
  • 举报
回复
能否做个限制,比如超过500K的话我把图片缩小(类似ACDSEE的长宽按原来比例缩小)到500K,这样的缩小代码应该怎么实现?等候解答,谢谢哦~~~~~~~
无条件为你 2008-06-17
  • 打赏
  • 举报
回复
楼上的朋友,如果你有什么需求请另发贴提问,跟在别人的贴子上做回复,一般不会被更多人的关注。
ytmfudukomh 2008-06-17
  • 打赏
  • 举报
回复
function ChangPICSize(SourecePath, DescPath: string; W: Integer = 20; H: Integer = 20): Boolean;
var
bmp, SourceBmp, bmp2: TBitmap;
jpg, SourceJpg: TJPEGImage;
begin
if UpperCase(ExtractFileExt(SourecePath)) = '.JPG' then
begin
bmp := TBitmap.Create;
SourceJpg := TJPEGImage.Create;
Jpg := TJPEGImage.Create;
try
try
SourceJpg.LoadFromFile(SourecePath);
bmp.Width := W;
bmp.Height := H;
bmp.PixelFormat := pf32bit;
bmp.Canvas.StretchDraw(Rect(0, 0, W, H), SourceJpg);
jpg.Assign(bmp);
jpg.SaveToFile(DescPath);
Result :=True ;
except
Result := False;
end;
finally
bmp.Free;
jpg.Free;
SourceJpg.Free;
end;
end
else if UpperCase(ExtractFileExt(SourecePath)) = '.BMP' then
begin
bmp := TBitmap.Create;
bmp2 := TBitmap.Create;
SourceBmp := TBitmap.Create;
try
try
SourceBmp.LoadFromFile(SourecePath);
bmp.Width := W;
bmp.Height := H;
bmp.PixelFormat := pf32bit;
bmp.Canvas.StretchDraw(Rect(0, 0, W, H), SourceBmp);
bmp2.Assign(bmp);
bmp2.SaveToFile(DescPath);
Result :=True ;
except
Result := False;
end;
finally
bmp.Free;
bmp2.Free;
SourceBmp.Free;
end;
end;
end;

PS:我这里是改图片尺寸..
无条件为你 2008-06-16
  • 打赏
  • 举报
回复
楼上的代码是先把一个JPG转为BMP流,然后再转成JPG格式保存的。这个代码肯定是可以用的。不过压缩图片并不一定要降低图片质量,比如可以等比例缩小图片,压缩效果应该更好。

我觉得楼主没有把问题描述清楚。“图片很大”是什么意思?是指图片的尺寸很大?还是指图片超过1M,占用空间大?
pengxuan 2008-06-16
  • 打赏
  • 举报
回复

procedure TForm1.Button1Click(Sender: TObject);
var jpeg:TJPEGImage;
begin
jpeg:=TJPEGImage.Create;
jpeg.LoadFromFile('E:\movie\燕塞湖之旅\100_3162.JPG');
Image1.Picture.Bitmap.Assign(jpeg);
jpeg.Assign(Image1.Picture.Bitmap);
jpeg.CompressionQuality:=25;
jpeg.Compress;
jpeg.SaveToFile('c:\aa.jpg');
end;
pengxuan 2008-06-06
  • 打赏
  • 举报
回复
这问题没解决啊
meiZiNick 2008-05-01
  • 打赏
  • 举报
回复
等待牛人来答.
knowledge_Is_Life 2008-05-01
  • 打赏
  • 举报
回复
不明LZ在说什么
blazingfire 2008-05-01
  • 打赏
  • 举报
回复
jpg图片本来已经是压缩格式,除非可以忍受质量的下降,否则再压缩空间不大。
shadowstar 2007-06-06
  • 打赏
  • 举报
回复
特别小,肉眼看不出来,基本上是不可能的
liups 2007-06-05
  • 打赏
  • 举报
回复
下面是我的一个程序中的代码,实际上没有特别处理,保存过后JPG特别小而且至少肉眼看质量上没有降低
procedure TForm1.Button3Click(Sender: TObject);
var
JPEGImage: TJPEGImage;
begin
//直接保存会出现错误:
//'project raised exception class EJPEG with
// message 'JPEG error #53'. Process stopped.'
//分析应为保存的jpg文件格式有问题,无法预览
//官方说法是: 53 cstrJERR_OUT_OF_MEMORY
// 'Insufficient memory (case %d)'
if SavePictureDialog1.InitialDir='' then
SavePictureDialog1.InitialDir:=ExtractFilePath(OpenPictureDialog1.FileName);
if trim(LabeledEdit1.Text)<>'' then
SavePictureDialog1.FileName:=trim(LabeledEdit1.Text)+'.jpg';
if SavePictureDialog1.execute then
begin
JPEGImage:=TJPEGImage.Create;
JPEGImage.Assign(image2.Picture.Graphic);
JPEGImage.SaveToFile(ExtractFilePath(SavePictureDialog1.Filename)+trim(LabeledEdit1.Text)+'.jpg');
end;
end;
nf3 2007-06-03
  • 打赏
  • 举报
回复

mediafang2003 2007-05-23
  • 打赏
  • 举报
回复
楼上的,我这样压缩了,但是生成的照片大小都是0了,怎么回事啊。求助!
SonicX 2007-05-22
  • 打赏
  • 举报
回复
...
...
jpg.CompressionQuality:=50; //压缩率1~100%
jpg.Compress; //执行压缩
jpg.SaveToFile(...)

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi GAME,图形处理/多媒体
社区管理员
  • GAME,图形处理/多媒体社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧