delphi 压缩图片(BMP、JPG、PNG)  
官方Delphi 学习QQ群: 682628230(三千人)
频道

delphi 压缩图片(BMP、JPG、PNG)


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;

————————————————

原文链接:https://blog.csdn.net/lqena/article/details/78732255

推荐分享
图文皆来源于网络,内容仅做公益性分享,版权归原作者所有,如有侵权请告知删除!
 

Copyright © 2014 DelphiW.com 开发 源码 文档 技巧 All Rights Reserved
晋ICP备14006235号-8 晋公网安备 14108102000087号

执行时间: 0.13091087341309 seconds