function CutImgToBase(fn: string): string; // 压缩图片只能压缩bmp:将jpg转换成bmp再压缩 var m1: TMemoryStream; m2: TStringStream; jpg: TJPEGImage; bmp: TBitmap; begin jpg := TJpegImage.Create; bmp := TBitmap.Create; m1 := TMemoryStream.Create; m2 := TStringStream.Create; jpg.LoadFromFile(fn); bmp.Width := jpg.Width div 2; bmp.Height := jpg.Height div 2; bmp.Canvas.StretchDraw(bmp.Canvas.ClipRect, jpg); jpg.Assign(bmp); jpg.CompressionQuality := 30; jpg.Compress; // 先指定大小再压缩 jpg.SaveToStream(m1); m1.Position := 0; // 一定要还原指针,才能base64 EncdDecd.EncodeStream(m1, m2); result := m2.DataString.Replace(#13, '').Replace(#10, ''); bmp.Free; jpg.Free; m1.Free; m2.Free; end;
调用函数:
procedure TForm2.Button4Click(Sender: TObject); // 调用函数 压缩并编码
var
m: TStringStream;
s: string;
begin
s := CutImgToBase('test.jpg');
FilePutContents('mm.txt', s);
m := TStringStream.Create(s);
Memo1.Lines.Add(m.DataString);
m.SaveToFile('base64.txt');
end;
解码Base64测试:
procedure TForm2.DecodeBaseClick(Sender: TObject); // 解码
var
m1: TStringStream;
m2: TMemoryStream;
begin
m1 := TStringStream.Create;
m2 := TMemoryStream.Create;
m1.LoadFromFile('base64.txt');
EncdDecd.DecodeStream(m1, m2);
m2.SaveToFile('1.jpg');
m1.Free;
m2.Free;
end;