(DELPHI)已经存入SQLSERVER中的图片数据(image字段)太大,怎么直接在数据库中压缩?或怎么用程序实现

2025-03-05 03:24:16
推荐回答(5个)
回答1:

delphi 的图像缩放示例代码如下:

//将图片缩放至指定大小
procedure SizeBmp(const Source, Dest: string; const x, y: integer);
var
  aBmp, bBmp: tbitmap;
  scalex, scaley: real;
begin
  aBmp := TBitmap.Create;
  bBmp := TBitmap.Create;
  try
    aBmp.LoadFromFile(Source);
    scaley := aBmp.Height / y;
    scalex := aBmp.Width / x;
    bBmp.Width := round(aBmp.Width / scalex);
    bBmp.Height := round(aBmp.Height / scaley);
    bBmp.PixelFormat := pfDevice;
    SetStretchBltMode(bBmp.Canvas.Handle, COLORONCOLOR);
    StretchBlt(bBmp.Canvas.Handle, 0, 0, bBmp.Width, bBmp.Height,
      aBmp.Canvas.Handle, 0, 0, aBmp.Width, aBmp.Height, srccopy);
    bBmp.SaveToFile(Dest);
  finally
    aBmp.Free;
    bBmp.Free;
  end;
end;

procedure TForm1.btn1Click(Sender: TObject);
begin
  SizeBmp('e:\1112.bmp','e:\1112_small.bmp',640,480);
end;

回答2:

delphi里面有zlib这个单元,里面有压缩的函数TCompressionStream可以调用!参考下面的代码去处理吧!
var
SourceStream: TCompressionStream;
DestStream: TMemoryStream;
Count: Integer;
Begin
//获得图像流的原始尺寸
Count := CompressedStream.Size;
DestStream := TMemoryStream.Create;
SourceStream:=TCompressionStream.Create(CompressionLevel, DestStream);
Try
CompressedStream.SaveToStream(SourceStream);
//将原始流进行压缩, DestStream中保存着压缩后的流
SourceStream.Free;
CompressedStream.Clear;
//写入原始流的尺寸
CompressedStream.WriteBuffer(Count, SizeOf(Count));
//写入经过压缩的流
CompressedStream.CopyFrom(DestStream, 0);
finally
DestStream.Free;
end;
end;

回答3:

DELPHI好像有个zip的第三方控件,你可以考虑把数据读出来,压缩后再存回去,然后,在需要使用的时候再把它解压。

回答4:

fg

回答5:

没什么好办法,压缩好了再放进去。