글목록

2022년 3월 19일

PowerPoint 매크로 - 그림의 밝기, 명암을 한꺼번에 변경하기

Powerpoint에 삽입된 사진이나 그림의 밝기와 대비를 한꺼번에 조절해야할 때가 있습니다. 예를 들어, 자연 조명 아래에서 시간별로 찍은 사진의 경우, 일광이나 날씨에 따라 밝기가 다르다든지, 분석 기기의 출력물들이 분석자마다 밝기나 대비 설정값이 달라서, 모아놓고 보면 일정하지 않고 얼룩얼룩한 경우가 있습니다. 그러나, powerpoint는 아쉽게도 여러 사진을 선택한 상태에서는 색상 조절 기능이 비활성화되기 때문에 일괄적으로 밝기나 대비값을 바꿀 수 없습니다.

Powerpoint에는 여러가지 사진 효과를 주는 기능이 있고, 매크로를 이용하여 한꺼번에 여러장의 사진을 조절할 수 있습니다. 아래에 여러장의 사진을 선택한 후 밝기와 대비값을 입력하면 한꺼번에 변경하는 매크로 예를 올려두었으니, 참고하셔서 필요한 기능으로 수정하시면 되겠습니다.

단, powerpoint에서 사진 효과를 조절하고 저장하게 되면, 원본 사진의 용량보다 몇배씩 늘어나는 것을 알 수 있습니다. 예를 들어, 1MB 사진을 10장 넣고 저장하면 10MB지만, 사진 효과를 몇가지 주고 저장하면 5~10배까지 용량이 늘어납니다. 따라서 원본 사진을 그대로 남겨놓아야하는 경우가 아니라면, 사진 효과를 주고 나서 JPG나 PNG 형식으로 변환해서 저장해주면 용량이 정상적으로 줄어듭니다.

'------------------------------------------
Function SetPictureEffect(iShape As Shape, iBrightness As Single, iContrast As Single)
  On Error Resume Next
  Dim tPEf As PictureEffect
  '사진 효과는 Shape의 채우기(fill) 속성에 포함됩니다. 지정된 밝기와 대비값을 입력하면, 원본은 그대로 두고, Fill 속성에 계속 누적하는 방식으로 사진 효과를 계산합니다.
  '사진을 지정한 밝기와 대비로 속성을 지정하기 위해서는 그 전에 지정해둔 밝기, 대비 속성을 삭제해야합니다. 만약, 이를 삭제하지 않으면 이전이 지정된 속성에 새로 지정한 속성을 누적해서 보여줍니다. 예를 들어, 원본에서 밝기를 50% 높인 상태의 사진에  PictureEffect를 추가하여 다시 밝기를 20%로 지정하게 되면, 원본 대비 밝기가 20% 높아지는 것이 아니라, 원본보다 50% 밝은 사진에 다시 20%를 더 밝게 만들게 됩니다. 따라서, 원본을 기준으로 밝기, 대비를 지정하기 위해서는 그 전에 지정했던 밝기, 대비 속성을 모두 삭제해야합니다. 단, 밝기, 대비 속성을 제외한 나머지 사진 효과는 그대로 둡니다.
  With iShape.Fill
    For Each tPEf In .PictureEffects
      If tPEf.Type = msoEffectBrightnessContrast Then tPEf.Delete
    Next
  '밝기는 EffectParameters(1)에, 대비는 (2)에 지정합니다. 순서가 바뀌면 밝기와 대비 속성이 바뀝니다.
    If (iBrightness <> 0 Or iContrast <> 0) Then
      Set tPEf = .PictureEffects.Insert(msoEffectBrightnessContrast)
      tPEf.EffectParameters(1).Value = iBrightness
      tPEf.EffectParameters(2).Value = iContrast
    End If
  End With
End Function
'------------------------------------------
Sub 밝기대비조절()
  '여러장의 사진을 선택한 상태에서 사진 또는 그림에 대해서만 밝기, 대비값을 조절하는 실행 매크로입니다.
  On Error GoTo ErrorHandler
  Dim tSel As ShapeRange, tStr As String, tBrightness As Single, tContrast As Single

  '현재 선택된 개체를 확인하고, 선택된 개체가 없으면 작업을 취소합니다.
  Set tSel = SelectedShapeRange(True)
  If tSel.Count < 1 Then GoTo ErrorHandler

  '밝기와 대비값을 입력받습니다. 각각의 범위는 -1~1의 값이며, 입력을 받을 때에는 % 단위로 받습니다. (powerpoint 입력창과 맞추기 위해...)
  tStr = InputBox("밝기를 입력하세요. (-100%~100%)", "밝기 입력", 0)
  If StrPtr(tStr) = 0 Or Not IsNumeric(tStr) Then Exit Sub
  tBrightness = Val(tStr)
  If tBrightness < -100 Then tBrightness = -100
  If tBrightness > 100 Then tBrightness = 100
  tBrightness = tBrightness / 100
  
  tStr = InputBox("대비를 입력하세요. (
-100%~100%)", "대비 입력", 0)
  If StrPtr(tStr) = 0 Or Not IsNumeric(tStr) Then Exit Sub
  tContrast = Val(tStr)
  If tContrast < -100 Then tContrast = -100
  If tContrast > 100 Then tContrast = 100
  tContrast = tContrast / 100
  
  '선택된 개체가 사진이나 그림 형태이면, 밝기와 대비값을 변경시켜줍니다.
  For i = 1 To tSel.Count
    If tSel(i).Type = msoPicture Then SetPictureEffect tSel(i), tBrightness, tContrast
  Next
ErrorHandler:
End Sub


댓글 없음:

댓글 쓰기

의견이나 질문이 있으신 분은 언제든지 댓글을 달아주세요~

많이 본 글 :