불변 이미지 모델
최신 안정판 Image 0.3.0 릴리스 기준
bluetape4k-images는 Scrimage의 ImmutableImage를 로드, 변환, 분석과 저장 단계 사이에서 전달하는 JVM 이미지 값으로 사용한다. 연산은 원본을 바꾸지 않고 새 이미지를 반환한다.
왜 불변 모델을 쓰는가
섹션 제목: “왜 불변 모델을 쓰는가”불변 값은 처리 흐름을 이해하고 재사용하기 쉽다. 다만 연산 결과마다 전체 픽셀 버퍼를 가질 수 있으므로 메모리가 공짜인 것은 아니다. 중간 이미지를 오래 보관하지 말고 처리 범위를 짧게 유지한다. 처리 단계가 길다면 실제 이미지 크기로 메모리를 측정해야 한다.
바이트 배열, 스트림, Okio 소스, 파일, 경로는 immutableImageOf 오버로드로 읽는다. 디코딩 진입점을 한곳에 모으고 호출자가 같은 이미지 타입을 사용하게 해 준다. I/O 소유권은 로드와 저장에서 다룬다.
Drawing과 mutable 연동
섹션 제목: “Drawing과 mutable 연동”ImmutableImage에 그릴 때는 withGraphics를 쓴다. Java2D 그래픽 컨텍스트를 정리하고 불변 결과를 반환한다. BufferedImage가 필요한 API도 연결할 수 있지만 변경 가능한 객체는 어댑터 안의 짧은 범위에 둔다.
처리 pipeline 구성
섹션 제목: “처리 pipeline 구성”다음 순서로 구성하면 경계가 분명해진다.
- 인코딩된 입력 크기와 이미지 크기를 검증한다.
- 한 번 디코딩한다.
- 방향, 색상과 목표 크기를 정규화한다.
- 변환이나 필터를 적용한다.
- 비교 기준이 같아야 하는 분석은 정규화한 이미지로 수행한다.
- 출력 경계에서 한 번 인코딩한다.
CAPTCHA와 OCR도 이 모델을 사용한다. 반면 libvips는 닫아야 하는 별도 VipsImage 계약을 쓴다. JVM 값 모델과 네이티브 자원 소유권을 같은 것으로 보면 안 된다.