4

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

这怎么能在delphi中完成?

谢谢

4

1 回答 1

14

尝试以下操作:

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;

这是它的样子:

在此处输入图像描述

于 2012-05-09T14:03:06.587 回答