apply static method

WatermarkResult apply(
  1. Uint8List imageBytes, {
  2. required int width,
  3. required int height,
  4. 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,
  );
}