Delphi7 压缩图片(BMP、JPG、PNG)
2017-12-06 16:42
435 查看
/// <summary> /// 压缩图片(BMP、JPG、PNG) /// </summary> /// <param name="FileName">文件路径</param> /// <param name="Width">需要压缩后的宽度</param> /// <param name="Height">需要压缩后的高度</param> /// <param name="PressQuality">压缩质量</param> /// <returns>是否压缩成功</returns> function CompressImageFile(FileName: string; Width, Height: integer; PressQuality:Integer= 90): Boolean; function GetNewSize(OldWidth, OldHeight: integer; NewWidth, NewHeight: integer; var RetWidth, RetHeight: integer):Boolean; var H:Boolean; begin Result := False; if (NewHeight < OldHeight) or (NewWidth < OldWidth) then begin H := NewHeight < OldHeight; if H then begin //按比例缩小,按高度来算高度的 RetHeight := NewHeight; RetWidth := Round(OldWidth * (NewHeight/OldHeight)); end else begin //按比例缩小,按宽度来算宽度的 RetWidth := NewWidth; RetHeight := Round(OldHeight * (NewWidth/OldWidth)); end; Result:=True; end; end; var bmp: TBitmap; jpg: TJpegImage; png: TPNGGraphic; i: Integer; sTemp: string; begin Result := False; try bmp := TBitmap.Create; jpg := TJPEGImage.Create; png := TPNGGraphic.Create; if pos(UpperCase('.bmp'), UpperCase(filename)) <> 0 then //bmp格式 begin bmp.LoadFromFile(filename); jpg.Assign(bmp); jpg.CompressionQuality := PressQuality; jpg.Compress; if GetNewSize(bmp.Width,bmp.height,Width,Height,Width,Height) then begin bmp.height := Height; bmp.Width := Width; bmp.Canvas.StretchDraw(bmp.Canvas.ClipRect, jpg); jpg.Assign(bmp); sTemp := filename + '.lq'; jpg.SaveToFile(sTemp); DeleteFile(filename); CopyFile(PChar(sTemp), PChar(filename), True); DeleteFile(sTemp); Result := True; end; end else if pos(UpperCase('.png'), UpperCase(filename)) <> 0 then //jpg其它格式 begin jpg.LoadFromFile(filename); if GetNewSize(jpg.Width,jpg.height,Width,Height,Width,Height) then begin bmp.height := Height; bmp.Width := Width; bmp.Canvas.StretchDraw(bmp.Canvas.ClipRect, jpg); jpg.Assign(bmp); jpg.CompressionQuality := PressQuality; jpg.Compress; sTemp := filename + '.lq'; jpg.SaveToFile(sTemp); DeleteFile(filename); CopyFile(PChar(sTemp), PChar(filename), True); DeleteFile(sTemp); Result := True; end; end else if pos(UpperCase('.png'), UpperCase(filename)) <> 0 then //png格式 begin png.LoadFromFile(filename); if GetNewSize(png.Width,png.height,Width,Height,Width,Height) then begin bmp.height := Height; bmp.Width := Width; bmp.Canvas.StretchDraw(bmp.Canvas.ClipRect, png); jpg.Assign(bmp); jpg.CompressionQuality := PressQuality; jpg.Compress; sTemp := filename + '.lq'; jpg.SaveToFile(sTemp); DeleteFile(filename); CopyFile(PChar(sTemp), PChar(filename), True); DeleteFile(sTemp); Result := True; end; end; finally FreeAndNil(bmp); FreeAndNil(jpg); FreeAndNil(png); end; end; procedure TForm1.btn1Click(Sender: TObject); begin CompressImageFile('d:\png\222.png', 200, 200); end;
相关文章推荐
- C# Bitmap/png转成jpg格式,压缩图片
- fso获取图片宽度和高度的类,支持JPG,GIF,PNG,BMP
- 获取图片宽度和高度的类,支持JPG,GIF,PNG,BMP
- 图片中,bmp . png . jpg . gif ……含义
- 各种图片格式(BMP,JPG, GIF,PNG, TGA) 简单介绍
- WinCE5.0的 Imaging API 显示JPG BMP PNG 图片问题
- 缩略图实现,将图片(jpg、bmp、png、gif等等)真实的变成想要的大小
- 在VC6中基于dll开发插件用于各种图片显示(BMP/TGA/JPG/GIF/PNG/TIF/ICO/WMF/EMF/...)
- 解决eWebEditor上传图片提示:请选择一个有效的文件,支持的格式有(GIF|JPG|JPEG|BMP|PNG)!
- 图片裁剪工具类(支持jpg,png,bmp,gif(剪切后为静态))
- Bitmap,jpg,png区别以及在Android上实现不载入内存压缩图片
- WTL基础: 显示图片(JPG, BMP, PNG, TIF等)
- Windows Mobile 上显示png,jpg,bmp等图片
- 常见图片格式简单分析总结--JPG、PNG、GIF、BMP
- 批量图片缩小工具,JPG|PNG|BMP图片缩小工具
- java 将jpg、bmp、png、gif图片文件,进行等比或非等比的大小转换
- 保存一个免费的在线的图片转换工具网站,支持BMP,JPG,IOC,PNG和GIF
- 将JPG,BMP,PNG图片插入到ACCESS数据库
- [转载]C#图片格式(JPG,BMP,PNG,GIF)等转换为ICO图标
- WTL基础: 显示图片(JPG, BMP, PNG等)