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가 오탐 적용되지 않는다.
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-skiafeature의 시각 정합성 검증 범위가 넓어진다.구현 후보
watermark_jpeg_bytes_to_hancom_baked_png_bytes()를 renderer 공통 helper로 이동하거나 native Skia renderer에서 재사용한다.PaintOp::Image생성 단계 또는 Skia image draw 직전에서 watermark JPEG 여부를 판정한다.ImageEffect::RealPic에 준하는 draw path를 사용하거나, 별도 상태로 후처리를 생략한다.완료 조건
samples/복학원서.hwp1페이지 native Skia PNG export에서 중앙 워터마크의 회색 사각 배경이 제거된다.