delphiXE jpg图片压缩


本文整理自网络,侵删。

 
//
// ------------------------------------------------------------------------------------
//
// uPicPress.pas -- jpg图片压缩:
//
//                            本单元由 佛也没辙q:340066709 亲情奉献
//                                 本单元只在高版本测试通过
// ------------------------------------------------------------------------------------
//


unit uPicPress;

interface

uses
  Winapi.Windows, System.SysUtils, Vcl.Graphics, Vcl.ExtCtrls, Vcl.Imaging.jpeg;

function GetNewSize(OldWidth, OldHeight: integer; NewWidth, NewHeight: integer; var RetWidth, RetHeight: integer):Boolean;
function CompressImageFile(FileName: string;  Width, Height: integer; PressQuality:Integer= 90; outFileName: string=''): Boolean;

implementation

// 计算图片大小比例;
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;

// 压缩图片;
function CompressImageFile(FileName: string;  Width, Height: integer; PressQuality:Integer= 100; outFileName: string=''): Boolean;
var
   bmp: TBitmap;
   jpg: TJpegImage;
   i: Integer;
begin
  Result := False;
  try
    bmp := TBitmap.Create;
    jpg := TJPEGImage.Create;
    if pos(UpperCase('.jpg'), UpperCase(FileName)) <> 0 then //jpg其它格式
    begin
      if Trim(outFileName) = '' then
        outFileName := 'd:/tmp.jpg';
      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;
        jpg.SaveToFile(outFileName);
        Result := True;
      end;
    end;
  finally
    FreeAndNil(bmp);
    FreeAndNil(jpg);
  end;
end;
end.

相关阅读 >>

Delphi 2009 泛型容器单元(generics.collections)[1]: tlist<t>

Delphi 数组定义

Delphi如何获取句柄?

Delphi实现tedit控件的外观只有一条下划线

Delphi edit 让密码变成点

Delphi中tframe组件的使用

Delphi写的简单的文件的打开和关闭

Delphi paramstr的用法

Delphi 几个实用的html解析函数

Delphi rgbtohsb

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...