Skip to content

rhwp-studio (web) 에서 그림 회색조/밝기/대비 효과가 적용되지 않음 — CLI SVG 와 정합성 회귀 #516

@edwardkim

Description

@edwardkim

증상

samples/복학원서.hwp 등 그림에 effect=GrayScale, brightness, contrast 가 설정된 문서를 rhwp-studio (web) 에서 열면 회색조/밝기/대비 효과가 적용되지 않은 원본 컬러 그림 이 출력된다.

CLI SVG 출력 (rhwp export-svg) 은 동일 문서에서 <filter feColorMatrix> 를 정상 적용하고 있어 결과가 다르다.

정합성 회귀 (CLI ↔ web)

출력 경로 회색조 적용 비고
CLI SVG (rhwp export-svg) ✅ 정상 src/renderer/svg.rs::ensure_image_effect_filter 가 GrayScale / BlackWhite / brightness/contrast 필터 emit
rhwp-studio (web) 누락 본 이슈

코드 흐름

  1. 모델 / 파서: Picture.image_attr.effect = ImageEffect::GrayScale 정상 (src/parser/control/shape.rs:852)
  2. CLI SVG renderer (src/renderer/svg.rs:1172 영역): <filter id="rhwp-img-grayscale"> + <g filter="url(...)"> 정상 emit
  3. PageLayerTree JSON (src/paint/json.rs:727): "effect":"grayScale" + "brightness" + "contrast" 정상 직렬화 (PR Task #508: PageLayerTree image brightness/contrast JSON 필드 추가 #510 으로 brightness/contrast 추가 완료)
  4. rhwp-studio web 렌더 경로: ❌ effect 적용 누락

CLI 출력 검증 자료

samples/복학원서.hwp 의 CLI SVG (output/svg/pr510_after/복학원서.svg) 에서 다음 정의/적용 확인됨:

<filter id="rhwp-img-grayscale">
  <feColorMatrix type="matrix" values="0.299 0.587 0.114 0 0 ..."/>
</filter>
<filter id="rhwp-img-bc-b-50c70">
  <feComponentTransfer>
    <feFuncR type="linear" slope="1.7000" intercept="-0.8500"/>
    ...
  </feComponentTransfer>
</filter>
<g filter="url(#rhwp-img-grayscale)">...</g>
<g filter="url(#rhwp-img-bc-b-50c70)">...</g>

CLI 는 GrayScale + brightness=-50 + contrast=70 워터마크 효과를 모두 정상 적용.

가설 (1차 진단 출발점)

rhwp-studio/src/ 의 PageRenderTree → Canvas/SVG 렌더 경로에서 ImageNode.effect / brightness / contrast 값을 조회는 하지만 (picture-props-dialog 에서 사용 확인) 실제 paint 단계에서 Canvas 2D filter 또는 inline SVG <filter> 를 적용하는 처리가 누락 되어 있다.

비교: PR #510 (Task #508) 은 PageLayerTree JSON 에 brightness/contrast 가 누락된 결함이었음 — 동일 패턴의 contract 누락이지만 본 결함은 JSON 은 정상이고 web consumer 의 적용 누락.

재현

  1. rhwp-studio dev 서버 기동: cd rhwp-studio && npx vite --host 0.0.0.0 --port 7700
  2. samples/복학원서.hwp 로드
  3. 워터마크 영역 (회색조 + brightness=-50 + contrast=70 의 흐린 직인) 확인 → 원본 컬러 + 진하게 표시
  4. 비교: rhwp export-svg samples/복학원서.hwp 로 CLI SVG 생성 → 정상 (회색조 + 흐린 워터마크)

본질 (조사 출발점)

  • rhwp-studio/src/engine/ 또는 rhwp-studio/src/render/ 의 paint 경로에서 image.effect/brightness/contrast 적용 코드 부재 점검
  • Canvas 2D ctx.filter = 'grayscale(100%) brightness(...) contrast(...)' 또는 inline SVG <filter> 추가 필요
  • src/renderer/svg.rs::ensure_image_effect_filter 로직과 정합한 web-side 구현

비-목표 (별도 이슈 후보)

  • Pattern8x8 effect 의 web 적용 (CLI 도 grayscale 폴백)
  • 회전/플립 + effect 결합 시 정합성

환경

  • 버전: v0.7.9 (devel branch, commit 79e87b9)
  • 샘플: samples/복학원서.hwp (114 KB) — 워터마크 직인 (effect=GrayScale, brightness=-50, contrast=70)
  • 정답지: 한컴 2010 + 한컴 2022, 또는 rhwp CLI SVG 출력

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions