엑셀 이미지 변환 (크기, 형식, 방향) :: ImageConverter 명령문

지정한 이미지의 크기, 방향, 형식을 변경하는 ImageConvert 명령문의 사용법 및 동작원리를 살펴봅니다.

홈페이지 » 엑셀 이미지 변환 (크기, 형식, 방향) :: ImageConverter 함수

엑셀 이미지 변환 (크기, 형식, 방향) :: ImageConverter 명령문 사용법 총정리

엑셀 ImageConverter 명령문 목차 바로가기
요약

엑셀 ImageConverter 명령문은 지정한 이미지의 크기, 방향, 포맷을 변경하는 엑셀 사용자지정 함수입니다.

명령문 구문
=ImageConverter ( 기존파일경로, [새로운파일경로], [파일형식], [덮어쓰기], [그림품질], [최대넓이], [최대높이], [좌우반전], [상하반전], [회전각도])
사용된 인수 및 변수 알아보기
인수설명
기존파일경로
[Range]
크기, 형식, 방향을 변경할 기존 이미지의 파일 경로입니다. 확장자를 포함한 전체 경로를 입력합니다.
새로운파일경로
[String, 선택인수]
변경 후 새롭게 저장 될 이미지의 파일 경로입니다. 확장자를 포함한 전체 경로를 입력합니다.
파일형식
[Long, 선택인수]
변경할 이미지 포맷을 지정합니다. 총 5개의 이미지 형식을 지원합니다.

  • 0 : [기본값] JPG 포맷으로 변환합니다.
  • 1 : PNG 포맷으로 변환합니다.
  • 2 : BMP 포맷으로 변환합니다.
  • 3 : GIF 포맷으로 변환합니다.
  • 4 : TIFF 포맷으로 변환합니다.
덮어쓰기
[Boolean, 선택인수]
TRUE일 경우 새로운파일경로에 기존 파일이 존재하면 덮어쓰기 합니다. 기본값은 FALSE 입니다.
그림품질
[Long, 선택인수]
기본값은 92 입니다. 이미지 품질을 지정하며 100은 최고품질, 0은 최저품질입니다. JPG 포맷으로 변환시에만 적용됩니다.
최대넓이
[Double, 선택인수]
변환 될 이미지의 최대 넓이입니다. 기본값은 0 입니다.
최대높이
[Double, 선택인수]
변환 될 이미지의 최대 높이입니다. 기본값은 0 입니다.
좌우반전
[Boolean, 선택인수]
TRUE일 경우 좌우반전이 된 이미지를 반환합니다. 기본값은 FALSE 입니다.
상하반전
[Boolean, 선택인수]
TRUE일 경우 상하반전이 된 이미지를 반환합니다. 기본값은 FALSE 입니다.
회전각도
[Double, 선택인수]
0보다 클 경우 시계방향, 0보다 작을경우 반시계 방향으로 이미지를 회전합니다. 기본값은 0 입니다.

예제파일 다운로드

상세 설명

엑셀 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
실전 사용 예제
  1. 실행중인 엑셀파일과 같은 경로의 '테스트.png' 그림파일을 '변환.jpg'로 최대넓이 600, 최대높이 300으로 변환합니다.
    ImageConverter ThisWorkbook.Path & "\테스트.png", ThisWorkbook.Path & "\변환.jpg", 0, True, , 600, 300
  2. 실행중인 엑셀파일과 같은 경로의 '테스트.png' 그림파일을 좌우반전하여 '테스트_좌우반전.png'로 저장합니다.
    ImageConverter ThisWorkbook.Path & "\테스트.png", ThisWorkbook.Path & "\테스트_좌우반전.png", 1, True, blnFipH:=True
  3. C:\의 '그림.png' 파일을 최대높이/넓이 100픽셀 기준으로 변경하여 '그림.bmp'로 저장합니다.
    ImageConverter "C:\그림.png", "C:\그림.bmp", 2, True, , 100, 100

명령문 동작원리 단계별 알아보기

  1. 변수를 설정합니다.
    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 파일형식 및 확장자 입니다.
  2. 받아온 인수에서 발생가능한 오류를 검사합니다.
    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
  3. 변환할 이미지 형식 및 확장자를 지정합니다.
    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
  4. 이미지에 적용할 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
  5. 기존 이미지를 불러온 뒤 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)
  6. 새로운 경로에 파일 존재여부를 확인한 뒤 파일을 저장합니다.
    ' 파일명 설정
    strNewPath = Left(strNewPath, InStrRev(strNewPath, ".")) & LCase(strExt)
     
    ' 기존 파일 삭제여부 체크 (삭제여부 False이고 기존파일 존재시 오류 반환)
    If KillExists = True And FileExists(strNewPath) = True Then Kill strNewPath
     
    ' 파일 저장 및 명령문 종료
    objWIA.SaveFile strNewPath
  7. 이미지 변환 명령문을 종료합니다.
        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
5 2 votes
게시글평점
현재 페이지 댓글알림 신청
알림 설정
guest
3 Comments
Inline Feedbacks
View all comments
꾸루꾸루
2020년 6월 15일 7:11 오전
게시글평점 :
     

가끔 기안작성시 이미지 크기가 지멋대로여서 알씨로 변경하느라 불편했었는데 이제 엑셀에서 바로 작업할수도 있겠네요
여러개 파일을 한번에 벌크로 작업할수 있는 추가기능도 같이 제공해주시면 너무나도 좋을것 같습니다 !!

Jay
Jay
2020년 9월 18일 3:59 오후
게시글평점 :
     

좋은 게시글 감사합니다. 혹시 png의 투명색 지정을 따로 할 수 업을까요?
잘 변환되고 좋은데 투명 부분이 이리저리 깨져버리네요...

3
0
여러분의 생각을 댓글로 남겨주세요.x