Groovy 이미지 변환 코드
현재 모처에서 대규모 문서 검색 시스템(50t 규모) 구축 프로젝트를 진행 중 이다.
고객의 요청으로 문서에서 이미지 추출 미리보기 기능이 필요 한데 외부 필터를 사용해 추출 하다 보니 이미지 포멧이 멋대로 나와 몇가지 처리가 필요 하다.
이미지 추출 -> 이미지 파일 정리(외부 도구가 몇개 이하 추출 제한이 없다(이미지 갯수 만큼 모두 추출)) 10개 이상 삭제 ->
이미지 변환
프로세스가 필요 하다. 해당 프로세스는 대략 아래의 흐름(대충 예시로 만든거라 실제 만들면 더 많은 플로우나 기능 필요) 으로 진행 하면 된다.
뭐튼 중요한건 저게 아니고 이미지 처리를 해야 되다 보니 스크립트 실행이 필요 하게 되었다.
NIFI 자체에는 이미지 처리 프로세스가 없다.
처음에는 파이썬으로 executecommand(외부 실행 호출)를 통해 해결할려고 했으나 폐쇄망의 특성으로 인해 외부 whl이 필요 한데 os 버전 등 등이 막장이라 오히려 더 불편해지는 상황이 필요 해서 자바로 개발해서 통jar 실행 형태로 해결할려고 보던 도중 자바의 경우 간단한 변환 작업은 외부 import 없이 해결이 가능 했다.
외부 import가 필요 없다는거에서 착안 groovy 로 하면 되지 않을까 싶어서 간단히 짜봤더니 역시 된다.
아래는 나이파이 관련 내용은 없고 이미지 변환 내용만 있다. (나중에 수정)
테스트 구동 해본 결과 에러 없이 정상적으로 잘 변환 된다. 업무에 적용 후 스크립트는 나이파이용으로 변환 후 다시 기록 하겠다.
목적에 맞춰 발과 깃코파일럿으로 짯다. 엉성한거 잘알고 있다....
import javax.imageio.ImageIO
static void main(String[] args) {
flowFile = session.get()
if(!flowFile) return
def dirPath = flowFile.getAttribute('dirPath')
def file = new File(dirPath)
def files = file.listFiles()
for(f in files) {
def splitFile = f.getName().split("\\.")
if( splitFile[0].length() > 3) {
f.delete()
}
else
{
if(splitFile[1].toLowerCase().equals('bmp')){
def image = ImageIO.read(f)
ImageIO.write(image, "jpg", new File(dirPath + "/" + splitFile[0] + ".jpg"))
f.delete()
}
}
}
flowFile = session.putAttribute(flowFile, "ImageTransferPath", dirPath)
session.transfer(flowFile, REL_SUCCESS)
}
아래표는 읽어들일수 있는 이미지 타입들이다.
'자바' 카테고리의 다른 글
ELK Spring Data 연결 (1) | 2024.04.21 |
---|---|
groovy Json 한글 제어시 UTF8 escape 변환안되게 하기 (1) | 2023.10.24 |
루씬 숫자형 인덱싱 출력 9.3.0 기준 (0) | 2022.10.07 |
elasticsearch basic auth 인증 코드 (0) | 2022.10.01 |
vscode 이클립스 단축키 똑같이 하기 (0) | 2022.08.07 |