Delphi:如何在图像中添加文本并保存新图像?

时间:2012-05-09 13:18:49

标签: image delphi

这个想法是从数据库中检索日期(文本和图片),然后将这些数据添加到另一张图片(如ID表格)中,然后保存新图片。

如何在delphi中完成?

THX

1 个答案:

答案 0 :(得分:13)

尝试以下方法:

uses
  PNGImage;

procedure TForm1.Button1Click(Sender: TObject);
var
  PNGImage: TPNGImage;
  BlobStream: TMemoryStream;
begin
  // create the PNG image instance
  PNGImage := TPNGImage.Create;
  try
    // assuming you have in the BlobStream variable the image from a DB loaded
    PNGImage.LoadFromStream(BlobStream);
    // setup the text background to be transparent
    PNGImage.Canvas.Brush.Style := bsClear;
    // optionally configure the font
    PNGImage.Canvas.Font.Size := 11;
    PNGImage.Canvas.Font.Color := clRed;
    PNGImage.Canvas.Font.Style := [fsBold];
    // and render it to the image's canvas
    PNGImage.Canvas.TextOut(5, 5, 'SomeText');
    // save this modified image to the file
    PNGImage.SaveToFile('c:\picture.png');
  finally
    // and finally free the PNG image instance
    PNGImage.Free;
  end;
end;

以下是如何创建访问卡的示例(不要忘记将necessary image文件另存为d:\llamas.png):

uses
  GraphUtil, PNGImage;

procedure CreateCard(const AFileFile: string; AImage: TPNGImage;
  const AName, ASurname: string);
begin
  with TPNGImage.CreateBlank(COLOR_RGB, 8, 330, 160) do
  try
    GradientFillCanvas(Canvas, clWhite, $000080FF,
      Canvas.ClipRect, gdVertical);
    Canvas.StretchDraw(Rect(18, 18, 108, 108), AImage);
    Canvas.Pen.Width := 2;
    Canvas.Brush.Style := bsClear;
    Canvas.Rectangle(5, 5, Width - 4, Height - 4);
    Canvas.Font.Size := 12;
    Canvas.Font.Style := [fsBold];
    Canvas.TextOut(110, 30, 'Form:  ' + AName + '  :.');
    Canvas.TextOut(125, 60, 'Genus:  ' + ASurname + '  :.');
    SaveToFile(AFileFile);
  finally
    Free;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  PNGImage: TPNGImage;
begin
  PNGImage := TPNGImage.Create;
  try
    // here you will load the image blob (by using LoadFromStream)
    // instead of LoadFromFile
    PNGImage.LoadFromFile('d:\llamas.png');
    CreateCard('d:\visit-card.png', PNGImage, 'Alpaca', 'Lama');
  finally
    PNGImage.Free;
  end;
end;

以下是它的样子:

enter image description here