엑셀 이미지 변환 (크기, 형식, 방향) :: ImageConverter 명령문 사용법 총정리
엑셀 ImageConverter 명령문 목차 바로가기
요약
엑셀 ImageConverter 명령문은 지정한 이미지의 크기, 방향, 포맷을 변경하는 엑셀 사용자지정 함수입니다.
명령문 구문
=ImageConverter ( 기존파일경로, [새로운파일경로], [파일형식], [덮어쓰기], [그림품질], [최대넓이], [최대높이], [좌우반전], [상하반전], [회전각도])
사용된 인수 및 변수 알아보기
인수 | 설명 |
기존파일경로 [Range] |
크기, 형식, 방향을 변경할 기존 이미지의 파일 경로입니다. 확장자를 포함한 전체 경로를 입력합니다. |
새로운파일경로 [String, 선택인수] |
변경 후 새롭게 저장 될 이미지의 파일 경로입니다. 확장자를 포함한 전체 경로를 입력합니다. |
파일형식 [Long, 선택인수] |
변경할 이미지 포맷을 지정합니다. 총 5개의 이미지 형식을 지원합니다.
|
덮어쓰기 [Boolean, 선택인수] |
TRUE일 경우 새로운파일경로에 기존 파일이 존재하면 덮어쓰기 합니다. 기본값은 FALSE 입니다. |
그림품질 [Long, 선택인수] |
기본값은 92 입니다. 이미지 품질을 지정하며 100은 최고품질, 0은 최저품질입니다. JPG 포맷으로 변환시에만 적용됩니다. |
최대넓이 [Double, 선택인수] |
변환 될 이미지의 최대 넓이입니다. 기본값은 0 입니다. |
최대높이 [Double, 선택인수] |
변환 될 이미지의 최대 높이입니다. 기본값은 0 입니다. |
좌우반전 [Boolean, 선택인수] |
TRUE일 경우 좌우반전이 된 이미지를 반환합니다. 기본값은 FALSE 입니다. |
상하반전 [Boolean, 선택인수] |
TRUE일 경우 상하반전이 된 이미지를 반환합니다. 기본값은 FALSE 입니다. |
회전각도 [Double, 선택인수] |
0보다 클 경우 시계방향, 0보다 작을경우 반시계 방향으로 이미지를 회전합니다. 기본값은 0 입니다. |
예제파일 다운로드
오빠두엑셀의 강의 예제파일은 여러분을 위해 자유롭게 제공하고 있습니다.
- [VBA예제] ImageConverter 명령문 - 예제파일예제파일
상세 설명
엑셀 ImageConverter 명령문은 윈도우에서 제공하는 WIA(Windows Image Acquisition) 라이브러리를 사용하여 이미지의 크기, 형식, 방향을 변경하는 이미지 변환 함수입니다.
외부 윈도우 라이브러리를 사용하지만 별도의 추가 라이브러리 설정없이 명령문을 복사/붙여넣기하여 바로 사용할 수 있습니다.
기존 파일경로에 파일이 존재하지 않을 경우 "입력한 파일이 존재하지 않습니다." 라는 오류메세지가 출력되며 명령문이 종료됩니다.
기존 이미지가 없을 경우 입력한 파일이 존재하지 않습니다 라는 오류가 출력됩니다 새로운 파일경로에 기존 파일이 존재하고 덮어쓰기 여부가 FALSE 일 경우, "기존 파일이 있습니다." 라는 오류메세지가 출력됩니다.
새로 저장할 경로에 기존 파일이 존재할 경우 파일이 있습니다 라는 오류가 출력됩니다 새로운 이미지 파일을 저장하려는 경로에 '저장하기' 권한이 없을 경우 '엑세스가 거부되었습니다.'라는 오류메세지가 출력됩니다.
저장경로에 '저장하기' 권한이 없을 경우 엑세스가 거부되었습니다 라는 오류가 출력됩니다. 보조명령문으로 특정경로의 파일존재여부를 확인하는 FileExists 명령문이 사용됩니다.
엑셀 이미지 변환 (크기, 형식, 방향), ImageConverter 명령문 동작원리
ImageConverter 명령문 전체 코드
'############################################################### '오빠두엑셀 VBA 사용자지정함수 (https://www.oppadu.com) '▶ ImageConverter 함수 '▶ 이미지의 크기, 형식, 방향을 변환합니다. '▶ 인수 설명 '_____________strPath : 크기, 형식, 방향을 변경할 기존 이미지의 파일 경로입니다. 확장자를 포함한 전체 경로를 입력합니다. '_____________strNewPath : 변경 후 새롭게 저장 될 이미지의 파일 경로입니다. 확장자를 포함한 전체 경로를 입력합니다. '_____________lngFormat : 변경할 이미지 포맷을 지정합니다. 총 5개의 이미지 형식을 지원합니다. '_____________KillExists : TRUE일 경우 새로운파일경로에 기존 파일이 존재하면 덮어쓰기 합니다. '_____________lngQuality : 기본값은 92 입니다. 이미지 품질을 지정하며 100은 최고품질, 0은 최저품질입니다. JPG 포맷으로 변환시에만 적용됩니다. '_____________dblMaxW : 변환 될 이미지의 최대 넓이입니다. 기본값은 0 입니다. '_____________dblMaxH : 변환 될 이미지의 최대 높이입니다. 기본값은 0 입니다. '_____________blnFilpH : TRUE일 경우 좌우반전이 된 이미지를 반환합니다. 기본값은 FALSE 입니다. '_____________blnFlipV : TRUE일 경우 상하반전이 된 이미지를 반환합니다. 기본값은 FALSE 입니다. '_____________dblRotation : 0보다 클 경우 시계방향, 0보다 작을경우 반시계 방향으로 이미지를 회전합니다. 기본값은 0 입니다. '############################################################### Public Sub ImageConverter(strPath As String, _ Optional strNewPath As String, _ Optional lngFormat As Long = 0, _ Optional KillExists As Boolean = False, _ Optional lngQuality As Long = 92, _ Optional dblMaxW As Double = 0, _ Optional dblMaxH As Double = 0, _ Optional blnFlipH As Boolean = False, _ Optional blnFlipV As Boolean = False, _ Optional dblRotation As Double = 0) '---------------------------------------------------- '변수 설정 '---------------------------------------------------- Dim objWIA As Object ' WIA 이미지 파일 오브젝트 입니다. Dim objIP_1 As Object: Dim objIP_2 As Object: Dim objIP_3 As Object ' WIA 이미지 프로세싱을 위한 ImageProcess 개체입니다. Dim strFormat As String: Dim strExt As String ' 특정 형식의 파일로 저장하기 위한 WIA 파일형식 및 확장자 입니다. '---------------------------------------------------- '오류 검사 '---------------------------------------------------- On Error GoTo EH If lngQuality > 100 Or lngQuality < 0 Then lngQuality = 100 If dblMaxH < 0 Then dblMaxH = 0 If dblMaxV < 0 Then dblMaxV = 0 If IsMissing(strNewPath) Or strNewPath = "" Then strNewPath = strPath If FileExists(strPath) = False Then GoTo EH_Empty '---------------------------------------------------- '파일형식 및 확장자 선택 'https://docs.microsoft.com/en-us/previous-versions/windows/desktop/wiaaut/-wiaaut-consts-formatid '---------------------------------------------------- Select Case lngFormat Case 0 strFormat = "{B96B3CAE-0728-11D3-9D7B-0000F81EF32E}" strExt = "JPG" Case 1 strFormat = "{B96B3CAF-0728-11D3-9D7B-0000F81EF32E}" strExt = "PNG" Case 2 strFormat = "{B96B3CAB-0728-11D3-9D7B-0000F81EF32E}" strExt = "BMP" Case 3 strFormat = "{B96B3CB0-0728-11D3-9D7B-0000F81EF32E}" strExt = "GIF" Case 4 strFormat = "{B96B3CB1-0728-11D3-9D7B-0000F81EF32E}" strExt = "TIFF" End Select '---------------------------------------------------- 'WIA 이미지 필터 적용 'https://docs.microsoft.com/en-us/previous-versions/windows/desktop/wiaaut/-wiaaut-howto-use-filters '---------------------------------------------------- ' 1단계 : Conver 함수 (파일 형식을 변경합니다) Set objIP_1 = CreateObject("WIA.ImageProcess") objIP_1.Filters.Add objIP_1.FilterInfos("Convert").FilterID objIP_1.Filters(1).Properties("FormatID") = strFormat objIP_1.Filters(1).Properties("Quality") = lngQuality ' 2단계 : RotateFlip 함수 (파일을 반전 또는 회전합니다) If blnFlipH = True Or blnFlipV = True Or lngroation <> 0 Then Set objIP_2 = CreateObject("WIA.ImageProcess") objIP_2.Filters.Add objIP_2.FilterInfos("RotateFlip").FilterID objIP_2.Filters(1).Properties("FlipHorizontal") = blnFlipH objIP_2.Filters(1).Properties("FlipVertical") = blnFlipV objIP_2.Filters(1).Properties("RotationAngle") = lngRotation End If ' 3단계 : Scale 함수 (파일의 크기를 변경합니다) If dblMaxH <> 0 Or dblMaxV <> 0 Then Set objIP_3 = CreateObject("WIA.ImageProcess") objIP_3.Filters.Add objIP_3.FilterInfos("Scale").FilterID objIP_3.Filters(1).Properties("MaximumWidth") = dblMaxW objIP_3.Filters(1).Properties("MaximumHeight") = dblMaxH End If ' 4단계 : 기존 이미지 파일 불러오기 및 필터 적용 Set objWIA = CreateObject("WIA.ImageFile") objWIA.LoadFile strPath Set objWIA = objIP_1.Apply(objWIA) If Not objIP_2 Is Nothing Then Set objWIA = objIP_2.Apply(objWIA) If Not objIP_3 Is Nothing Then Set objWIA = objIP_3.Apply(objWIA) '---------------------------------------------------- '변경된 이미지 파일 저장 '---------------------------------------------------- ' 파일명 설정 strNewPath = Left(strNewPath, InStrRev(strNewPath, ".")) & LCase(strExt) ' 기존 파일 삭제여부 체크 (삭제여부 False이고 기존파일 존재시 오류 반환) If KillExists = True And FileExists(strNewPath) = True Then Kill strNewPath ' 파일 저장 및 명령문 종료 objWIA.SaveFile strNewPath EH_Exit: On Error Resume Next If Not objIP_1 Is Nothing Then Set objIP_1 = Nothing If Not objIP_2 Is Nothing Then Set objIP_2 = Nothing If Not objIP_3 Is Nothing Then Set objIP_3 = Nothing If Not objWIA Is Nothing Then Set objWIA = Nothing Exit Sub '---------------------------------------------------- '오류 처리 '---------------------------------------------------- EH_Empty: MsgBox "입력한 파일이 존재하지 않습니다.", vbOKOnly + vbCritical GoTo EH_Exit EH: MsgBox "오류가 발생하였습니다." & vbNewLine & vbNewLine & _ "발생위치 : " & "ImageConverter" & vbNewLine & _ "오류번호 : " & Err.Number & vbNewLine & _ "오류상세 : " & Err.Description, vbCritical GoTo EH_Exit End Sub Public Function FileExists(ByVal path_ As String) As Boolean '######################################################## '입력한 파일경로에 파일 존재여부를 확인합니다. 'https://www.oppadu.com/vba-fileexists-함수/ '######################################################## FileExists = (Dir(path_, vbDirectory) <> "") End Function
실전 사용 예제
- 실행중인 엑셀파일과 같은 경로의 '테스트.png' 그림파일을 '변환.jpg'로 최대넓이 600, 최대높이 300으로 변환합니다.
ImageConverter ThisWorkbook.Path & "\테스트.png", ThisWorkbook.Path & "\변환.jpg", 0, True, , 600, 300
- 실행중인 엑셀파일과 같은 경로의 '테스트.png' 그림파일을 좌우반전하여 '테스트_좌우반전.png'로 저장합니다.
ImageConverter ThisWorkbook.Path & "\테스트.png", ThisWorkbook.Path & "\테스트_좌우반전.png", 1, True, blnFipH:=True
- C:\의 '그림.png' 파일을 최대높이/넓이 100픽셀 기준으로 변경하여 '그림.bmp'로 저장합니다.
ImageConverter "C:\그림.png", "C:\그림.bmp", 2, True, , 100, 100
명령문 동작원리 단계별 알아보기
- 변수를 설정합니다.
Dim objWIA As Object ' WIA 이미지 파일 오브젝트 입니다. Dim objIP_1 As Object: Dim objIP_2 As Object: Dim objIP_3 As Object ' WIA 이미지 프로세싱을 위한 ImageProcess 개체입니다. Dim strFormat As String: Dim strExt As String ' 특정 형식의 파일로 저장하기 위한 WIA 파일형식 및 확장자 입니다.
- 받아온 인수에서 발생가능한 오류를 검사합니다.
If lngQuality > 100 Or lngQuality < 0 Then lngQuality = 100 If dblMaxH < 0 Then dblMaxH = 0 If dblMaxV < 0 Then dblMaxV = 0 If IsMissing(strNewPath) Or strNewPath = "" Then strNewPath = strPath If FileExists(strPath) = False Then GoTo EH_Empty
- 변환할 이미지 형식 및 확장자를 지정합니다.
Select Case lngFormat Case 0 strFormat = "{B96B3CAE-0728-11D3-9D7B-0000F81EF32E}" strExt = "JPG" Case 1 strFormat = "{B96B3CAF-0728-11D3-9D7B-0000F81EF32E}" strExt = "PNG" Case 2 strFormat = "{B96B3CAB-0728-11D3-9D7B-0000F81EF32E}" strExt = "BMP" Case 3 strFormat = "{B96B3CB0-0728-11D3-9D7B-0000F81EF32E}" strExt = "GIF" Case 4 strFormat = "{B96B3CB1-0728-11D3-9D7B-0000F81EF32E}" strExt = "TIFF" End Select
- 이미지에 적용할 WIA 필터를 설정합니다. (Convert, RotateFlip, Scale)
' 1단계 : Conver 함수 (파일 형식을 변경합니다) Set objIP_1 = CreateObject("WIA.ImageProcess") objIP_1.Filters.Add objIP_1.FilterInfos("Convert").FilterID objIP_1.Filters(1).Properties("FormatID") = strFormat objIP_1.Filters(1).Properties("Quality") = lngQuality ' 2단계 : RotateFlip 함수 (파일을 반전 또는 회전합니다) If blnFlipH = True Or blnFlipV = True Or lngroation <> 0 Then Set objIP_2 = CreateObject("WIA.ImageProcess") objIP_2.Filters.Add objIP_2.FilterInfos("RotateFlip").FilterID objIP_2.Filters(1).Properties("FlipHorizontal") = blnFlipH objIP_2.Filters(1).Properties("FlipVertical") = blnFlipV objIP_2.Filters(1).Properties("RotationAngle") = lngRotation End If ' 3단계 : Scale 함수 (파일의 크기를 변경합니다) If dblMaxH <> 0 Or dblMaxV <> 0 Then Set objIP_3 = CreateObject("WIA.ImageProcess") objIP_3.Filters.Add objIP_3.FilterInfos("Scale").FilterID objIP_3.Filters(1).Properties("MaximumWidth") = dblMaxW objIP_3.Filters(1).Properties("MaximumHeight") = dblMaxH End If
- 기존 이미지를 불러온 뒤 WIA 필터를 적용합니다.
Set objWIA = CreateObject("WIA.ImageFile") objWIA.LoadFile strPath Set objWIA = objIP_1.Apply(objWIA) If Not objIP_2 Is Nothing Then Set objWIA = objIP_2.Apply(objWIA) If Not objIP_3 Is Nothing Then Set objWIA = objIP_3.Apply(objWIA)
- 새로운 경로에 파일 존재여부를 확인한 뒤 파일을 저장합니다.
' 파일명 설정 strNewPath = Left(strNewPath, InStrRev(strNewPath, ".")) & LCase(strExt) ' 기존 파일 삭제여부 체크 (삭제여부 False이고 기존파일 존재시 오류 반환) If KillExists = True And FileExists(strNewPath) = True Then Kill strNewPath ' 파일 저장 및 명령문 종료 objWIA.SaveFile strNewPath
- 이미지 변환 명령문을 종료합니다.
On Error Resume Next If Not objIP_1 Is Nothing Then Set objIP_1 = Nothing If Not objIP_2 Is Nothing Then Set objIP_2 = Nothing If Not objIP_3 Is Nothing Then Set objIP_3 = Nothing If Not objWIA Is Nothing Then Set objWIA = Nothing Exit Sub
- 실행중인 엑셀파일과 같은 경로의 '테스트.png' 그림파일을 '변환.jpg'로 최대넓이 600, 최대높이 300으로 변환합니다.