apply static method
WatermarkResult
apply(
- Uint8List imageBytes, {
- required int width,
- required int height,
- required WatermarkConfig config,
Applies a text watermark to grayscale image bytes.
imageBytes — Raw grayscale pixel data (1 byte per pixel).
width and height — Image dimensions in pixels.
config — Watermark configuration.
Implementation
static WatermarkResult apply(
Uint8List imageBytes, {
required int width,
required int height,
required WatermarkConfig config,
}) {
final stopwatch = Stopwatch()..start();
if (imageBytes.isEmpty || width <= 0 || height <= 0) {
stopwatch.stop();
return WatermarkResult(
watermarkedBytes: imageBytes,
originalSize: imageBytes.length,
config: config,
success: false,
elapsed: stopwatch.elapsed,
);
}
final result = Uint8List.fromList(imageBytes);
final opacity = config.opacity.clamp(0.0, 1.0);
switch (config.position) {
case WatermarkPosition.center:
_applyTextAtPosition(
result, width, height, config.text, opacity,
x: width ~/ 2, y: height ~/ 2,
fontScale: config.fontSizeFactor,
);
break;
case WatermarkPosition.topLeft:
_applyTextAtPosition(
result, width, height, config.text, opacity,
x: config.margin + (config.text.length * 4),
y: config.margin + 8,
fontScale: config.fontSizeFactor,
);
break;
case WatermarkPosition.topRight:
_applyTextAtPosition(
result, width, height, config.text, opacity,
x: width - config.margin - (config.text.length * 4),
y: config.margin + 8,
fontScale: config.fontSizeFactor,
);
break;
case WatermarkPosition.bottomLeft:
_applyTextAtPosition(
result, width, height, config.text, opacity,
x: config.margin + (config.text.length * 4),
y: height - config.margin - 8,
fontScale: config.fontSizeFactor,
);
break;
case WatermarkPosition.bottomRight:
_applyTextAtPosition(
result, width, height, config.text, opacity,
x: width - config.margin - (config.text.length * 4),
y: height - config.margin - 8,
fontScale: config.fontSizeFactor,
);
break;
case WatermarkPosition.tiled:
_applyTiledWatermark(
result, width, height, config.text, opacity,
spacing: config.tileSpacing,
fontScale: config.fontSizeFactor,
);
break;
case WatermarkPosition.diagonal:
_applyDiagonalWatermark(
result, width, height, config.text, opacity,
fontScale: config.fontSizeFactor,
);
break;
}
stopwatch.stop();
return WatermarkResult(
watermarkedBytes: result,
originalSize: imageBytes.length,
config: config,
success: true,
elapsed: stopwatch.elapsed,
);
}