UiPath Image 처리

RPA 2024. 8. 23. 14:29
반응형

i. jpge png, bmp와 같은 기본적인 이미지 처리 지원

ii. UiPath.Core.Image 지원 형식  JPEG, PNG, BMP, GIF, and WEBP.

iii. 거의 모든 프로젝트에선 1번에 하나를 자주 사용

iv. 특수한 이미지를 편집하거나 가져올 일이 있으면, 해당 파일을 위한 코딩을 직접 구현(Invoke Code)

v. UiPath.Core 의 이미지 확장자 지원으로 base64와 같은 기본적인 변환 및 이미지 가공 제공

 

Load/Save Image

경로에 있는 이미지 파일을 읽어오는 것이 가능하다. 이때 읽어온 데이터는 UiPath.Core.Image 형으로 저장되는데, 꽤 많은 기능이 알게모르게 적용되어 있다.

 

이미지 확장자 변환

png > jpg 변환
png > bmp 변환
출력된 jpg
출력된 bmp

육안으로 보기엔 모두 이상 없어 보인다. 이처럼 UiPath.Core.Image는 별다른 액티비티 없이 그냥 확장자 명만 바꿔 저장해도 확장자가 그대로 변환되어서 저장된다. 물론, 그냥 이름만 바꿔서 저장이 되는 것일 수도 있겠다만... 아래 산출파일들을 참고 부탁한다.

 

아무개이미지 확장자 변경과 UiPath.Core.Image 변경의 차이

아래 [아무개.bmp]는 그냥 확장자만 바꾼 것이다. 열리긴 열리지만 기존 원본인 [아무개이미지.png]와 용량 차이를 보이지 않는다. 하지만, UiPath.Core.Image로 한 번 담았다가 bmp로 뽑아낸 [Test.bmp]는 용량 차이를 보이고 있다. 이미지의 자세한 품질차이까진 들여다보진 않았지만, 용량 면에선 확실히 어떤 변환 과정이 있었다는 것을 알 수 있다.

 

이미지 자르기

편집 전 이미지

산출물

적용 코드: imgTest.SimpleCrop(new Rectangle(30, 30, 50, 100), 1.0)

 

코드: {Image}.SimpleCrop(new UiPath.Core.Region(new Rectangle({size})), {scaleFactor(double)})

여기서 사이즈를 UiPath.Core.Region으로 한 번 더 감싸도 되고 안해도 된다. + scaleFactor는 확대율을 뜻한다. 단, 바로 앞 변수에 Cropping 사이즈에 대한 확대율이지 이미지에 대한 확대율은 아니다

 

Base64 산출

Base64를 직접적으로 쓸 기회가 많지 않았지만, 내가 보통 처했던 환경과 해결했던 솔루션으로 Base64를 구현해보겠다.

예제 Config 파일

 

 

보통 Base64가 필요했던 경우는 액셀의 데이터를 메일에 붙여넣을 때 그 중간다리 역할로 썼다. 웹쪽은 대게 html이기에 base64로 밀어서 올리면 잘 올라가는 식이었다.

 

솔루션은 그냥 VBA를 활용해 비트맵으로 복사하는 것이다. 후에 UiPath쪽에서 가져와 UiPath.Core.Image 형식으로 변환 후 올리는 것이다. UiPath.Core.Image 형은 기본적으로 Base64 프로퍼티를 지니고 있다.

1
2
3
4
5
6
7
8
9
10
Sub 사진복사()
'
' 사진복사 매크로
'
 
'
    Range("A1:C13").Select
    Selection.CopyPicture Appearance:=xlScreen, Format:=xlBitmap
End Sub
 
cs

매크로로 우선 선택영역(영역은 Invoke VBA에서 제공하는 인수로 제공하면 되겠다.) 지정 후 비트맵으로 복사하는 심플한 코드다.

 

후에, UiPath 측에서는 클립보드에 복사된 데이터를 긁어와야한다.

System.Windows.Clipboard.GetImage() > BitmapSource 산출

System.Windows.Forms.Clipboard.GetImage() > System.Drawing.Image 산출

 

위에 거는 헷갈리지 말라고 적어놓은 것이다. 아래 것이 UiPath.Core.Image로 변환 가능하다. 

자료형 변환과정

 

UiPath.Core.Image 측에서 Drawing.Image도 받아줘서 그냥 별다른 생성 과정(new 어쩌구)없이 Assign만 해줘도 알아서 할당된다.

 

단, 클립보드 복사 단계라 모니터링이 제대로 되지 않을 수 있고 한번에 불러올 액셀 데이터 양이 많으면, 복사 자체가 느릴 수 있다. 이럴 때에는 System.Windows.Forms.Clipboard.ContainsImage() 함수를 활용해(bool 반환) 복사가 끝났는지 확인 후 다음 과정으로 넘어가면 되겠다. 물론, 이 복사과정 전에 해당 변수를 비우는 과정과 복사 확인 간 반복과정 작성은 필수다.

 

Base64는 그냥 . 누르면 나온다.

UiPath.Core.Image 변환 후 Base64 접근

 

Take Screenshot

Take Screenshot Activity

화면 캡쳐 액티비티다. 그냥 아무 선택 하지 않고 기본으로 두면 전체화면을 찍어준다. 타겟을 표시해주면 해당 타겟에 가운데를 기준으로 찍는다.

 

이는 담당자와 산출물 조회 후 적당한 사진크기로 자르던지 기준을 조금 옮기던지 해서 맞추면 되겠다.

 
반응형
Posted by Library of Lotus
,