Skip to content

native Skia renderer에도 #976 JPEG 워터마크 baked PNG 처리 적용 #992

@postmelee

Description

@postmelee

Refs #938
Follows #976

문제

#976은 samples/복학원서.hwp의 중앙 JPEG 워터마크를 baked PNG로 선보정하고, SVG / WebCanvas / rhwp-studio overlay 경로에서 후단 filter, opacity, mix-blend-mode 중복 적용을 막는다.

다만 native Skia PNG export 경로(render_page_png_native_with_export_options)는 별도 renderer이므로, 같은 워터마크 보정 의미가 적용되는지 확인하고 필요 시 반영할 필요가 있다.

현재 이 경로가 같은 정책을 공유하지 않으면, renderer별로 같은 문서의 워터마크 톤과 배경 처리 결과가 달라질 수 있다.

목표

  • native Skia renderer가 #976의 baked watermark 의미를 공유한다.
  • 워터마크성 JPEG는 한컴 출력에 가까운 opaque PNG로 선보정된다.
  • baked watermark에는 Skia image effect / brightness / contrast / opacity가 중복 적용되지 않는다.
  • SVG / WebCanvas / rhwp-studio overlay / native Skia PNG export 사이의 워터마크 표현 차이를 줄인다.

기대 효과

  • native Skia PNG export가 SVG 및 WebCanvas 계열 렌더러와 더 일관된 결과를 낸다.
  • native-skia feature의 시각 정합성 검증 범위가 넓어진다.
  • 워터마크 처리 로직을 renderer별로 따로 해석하지 않고 공통 의미로 수렴시킬 수 있다.
  • 향후 PNG export, visual regression test, renderer parity 비교에서 복학원서 워터마크 투명 배경이 사각 영역으로 렌더링됨 #938 계열 문서를 더 신뢰도 높은 샘플로 사용할 수 있다.
  • 일반 JPEG/PNG 이미지와 워터마크성 JPEG의 처리 경계를 더 명확히 검증할 수 있다.

구현 후보

  • #976의 watermark_jpeg_bytes_to_hancom_baked_png_bytes()를 renderer 공통 helper로 이동하거나 native Skia renderer에서 재사용한다.
  • PaintOp::Image 생성 단계 또는 Skia image draw 직전에서 watermark JPEG 여부를 판정한다.
  • baked PNG 성공 시 ImageEffect::RealPic에 준하는 draw path를 사용하거나, 별도 상태로 후처리를 생략한다.
  • SVG/WebCanvas/studio overlay와 native Skia가 같은 판정 조건과 tone mapping을 사용하도록 테스트를 추가한다.

완료 조건

  • samples/복학원서.hwp 1페이지 native Skia PNG export에서 중앙 워터마크의 회색 사각 배경이 제거된다.
  • SVG / WebCanvas / rhwp-studio overlay 기존 회귀 테스트는 유지된다.
  • native Skia PNG 경로 전용 회귀 테스트가 추가된다.
  • 일반 JPEG/PNG/PCX 이미지에는 워터마크 bake가 오탐 적용되지 않는다.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions