112 lines
3.2 KiB
Plaintext
112 lines
3.2 KiB
Plaintext
unit Tocsg.Watermark;
|
|
|
|
interface
|
|
|
|
uses
|
|
imageen, Vcl.Graphics, Winapi.Windows;
|
|
|
|
procedure AddWatermarkTextLayer(aImgEn: TImageEn; aFont: TFont; sWaterText: string;
|
|
nTransparency: Integer; AAddShadow: Boolean = false);
|
|
procedure AddWatermarkImageLayer(aImgEn: TImageEn; sWaterImgPath: string;
|
|
nTransparency: Integer; AAddShadow: Boolean = false);
|
|
|
|
implementation
|
|
|
|
uses
|
|
hyieutils, iexLayers;
|
|
|
|
procedure AddWatermarkTextLayer(aImgEn: TImageEn; aFont: TFont; sWaterText: string;
|
|
nTransparency: Integer; AAddShadow: Boolean = false);
|
|
{ Create a watermark layer. }
|
|
var
|
|
nLayerIdx,
|
|
nWInc, nHInc,
|
|
nWUntil, nHUntil, i, c: Integer;
|
|
r: TRect;
|
|
begin
|
|
// All layers have the same size
|
|
// aImgEn.LayersSync := True;
|
|
|
|
// Add a new layer
|
|
nLayerIdx := aImgEn.LayersAdd;
|
|
// Fill the layer with White
|
|
aImgEn.Proc.Fill(TColor2TRGB(clWhite));
|
|
|
|
i := IETextWidthW(aImgEn.Bitmap.Canvas, sWaterText);
|
|
|
|
// 해상도 크기에 맞춰서 적절히 조절 22_0429 09:04:24 kku
|
|
// if aImgEn.Bitmap.Width > 1000 then
|
|
// aFont.Size := Round(aImgEn.Bitmap.Width / 80.0)
|
|
// else
|
|
// aFont.Size := Round(aImgEn.Bitmap.Width / 60.0);
|
|
aFont.Size := (aImgEn.Bitmap.Height - IETextWidthW(aImgEn.Bitmap.Canvas, sWaterText)) div 30;
|
|
nWInc := Round(aImgEn.Bitmap.Width / 6.0);
|
|
nHInc := Round(aImgEn.Bitmap.Height / 2.5);
|
|
|
|
{ Output our text }
|
|
// aImgEn.Proc.TextOut(Align_Text_Horz_Center, Align_Text_Vert_Center,
|
|
// AString, AFontName, AFontSize, AFontColor, [fsBold]);
|
|
ZeroMemory(@r, SizeOf(r));
|
|
r.Left := (aImgEn.Bitmap.Width div 10) * -1;
|
|
r.Top := 0;
|
|
r.Width := 10000;
|
|
r.Height := 10000;
|
|
nHUntil := aImgEn.Bitmap.Height;// - (aImgEn.Bitmap.Height div 2);
|
|
nWUntil := aImgEn.Bitmap.Width - (aImgEn.Bitmap.Width div 8);
|
|
while r.Top < nHUntil do
|
|
begin
|
|
while r.Left < nWUntil do
|
|
begin
|
|
aImgEn.Proc.TextOut(r, sWaterText, aFont, -25);
|
|
Inc(r.Left, nWInc);
|
|
end;
|
|
Inc(r.Top, nHInc);
|
|
r.Left := 0;
|
|
end;
|
|
|
|
// Make the white background transparent
|
|
aImgEn.Proc.SetTransparentColors(TColor2TRGB(clWhite), TColor2TRGB(clWhite), 0);
|
|
|
|
// Add a shadow
|
|
if AAddShadow = true then
|
|
aImgEn.Proc.AddSoftShadow(2, 3, 3);
|
|
|
|
// Set the layers transparency
|
|
aImgEn.Layers[nLayerIdx].Transparency := nTransparency;
|
|
|
|
// 저장을 위해 레이어 합치기 22_0429 08:46:56 kku
|
|
aImgEn.LayersMerge(0, 1);
|
|
aImgEn.Update;
|
|
end;
|
|
|
|
procedure AddWatermarkImageLayer(aImgEn: TImageEn; sWaterImgPath: string;
|
|
nTransparency: Integer; AAddShadow: Boolean = false);
|
|
var
|
|
nLayerIdx,
|
|
nWInc, nHInc,
|
|
nWUntil, nHUntil, i, c: Integer;
|
|
r: TRect;
|
|
begin
|
|
nLayerIdx := aImgEn.LayersAdd;
|
|
aImgEn.IO.LoadFromFile(sWaterImgPath);
|
|
aImgEn.Proc.Resample(aImgEn.Layers[0].Width div 2, aImgEn.Layers[0].Height div 2);
|
|
aImgEn.Layers[nLayerIdx].PosX := IELayer_Pos_HCenter;
|
|
aImgEn.Layers[nLayerIdx].PosY := IELayer_Pos_VCenter;
|
|
|
|
// Make the white background transparent
|
|
aImgEn.Proc.SetTransparentColors(TColor2TRGB(clWhite), TColor2TRGB(clWhite), 0);
|
|
|
|
// Add a shadow
|
|
if AAddShadow = true then
|
|
aImgEn.Proc.AddSoftShadow(2, 3, 3);
|
|
|
|
// Set the layers transparency
|
|
aImgEn.Layers[nLayerIdx].Transparency := nTransparency;
|
|
|
|
// 저장을 위해 레이어 합치기 22_0429 08:46:56 kku
|
|
aImgEn.LayersMerge(0, 1);
|
|
aImgEn.Update;
|
|
end;
|
|
|
|
end.
|