청담동 골목에서

Posted by 루아흐뉴마 그날 : 2018.08.17 12:00

S Y N O P S I S #청담동


# 청담동


여느 동네와 다를 바 없어보이는 골목.
"청담동" 세글자 하나만으로 느껴지는 묘한 이질감.
'뭐야 청담동 별 거 없네'
'역시 청담동'
사이에서 갈팡질팡 하다
이내 '저 건물은 얼마일까?'로 끝났던.

SONY | ILCE-7R | Manual | Spot | 1/2500sec | F/5.0 | 68.0mm | ISO-125



댓글을 달아 주세요

S Y N O P S I S #VBA로 피부보정하기 #주파수분리

  • 주파수분리(Frequency Separation) 기법은 피부를 보정하는 다양한 방법 중 하나이다.
  • 특히 거친 피부를 매끄럽게 하면서도 피부 자체의 디테일을 보존하는 데 탁월하다
  • 주파수분리는 크게 두 단계다.
  • 1) 원본사진의 톤과 디테일을 분리한다. (이 과정에서 약간의 가우시안 블러가 들어감)
  • 2) 톤 영역에 대해서만 한 번 더 블러를 먹여서 피부를 보정한다. (여기서 한 번 더 가우시안 블러가 들어감)
  • 이 과정이 꽤나 귀찮기 때문에 보통은 액션(Action)을 만들어두고 사용한다.
  • 다만, '디테일 분리를 위해 적절한 가우시안 블러 사이즈가 얼마인가?'를 고민할 수 있다.
  • 이 때문에 블러 사이즈를 고정시킨 액션을 실행하는게 찝찝하다. (그래서 매크로를 만들었다.)
  • 본인의 경우 얼굴부분의 픽셀 사이즈(가로x세로)에 0.000004를 곱해서 쓴다.
  • 즉 얼굴부분의 사이즈가 100만 픽셀이면 1) 단계에서 가우시안 블러 사이즈를 4 정도 준다. (200만이면? 8 정도 준다.)
  • 0.00으로 시작 하는 저 기괴한 숫자는 본인이 쓰다가 적절한 타협점을 찾은 값이다.
  • 2) 단계에서 적용하는 가우시안 블러 값은 1) 단계에서 적용한 블러 사이즈의 2.5~3배 정도를 주면 나쁘지 않다.
  • 2) 단계에서 값을 너무 크게 줬더라도 Opacity를 줘서 강도를 낮출 수 있기 때문에 민감할 필요는 없다.
  • 영상에서 보는것처럼 매크로를 적용하고 나면 마스크가 하나 생기는데, 여기서 피부 보정이 필요한 부분만 밝혀주면 된다.

  • Output Image




    VBA Code


    Option Explicit
    Sub freq()
    Dim appPhoto As Photoshop.Application 'early bound
    Dim docRef As Photoshop.Document
    Dim layRef As Photoshop.ArtLayer
    Dim lays As Photoshop.ArtLayers
    Dim actName As String
    Dim blurDeg As Double
    
    blurDeg = InputBox("얼굴의 픽셀수 입력") * 0.000004 '디테일 분리를 위한 가우시안 블러 정도
    
    On Error Resume Next  '에러 검출 off
    Set appPhoto = GetObject(, "Photoshop.Application")
    If Err.Number > 0 Then  '오류 발생시
      MsgBox "포토샵을 실행하세요", vbOKOnly
      Exit Sub  '매크로 종료
    End If
    On Error GoTo 0 '에러 검출 on
    
    Set docRef = appPhoto.ActiveDocument
    Set layRef = docRef.ActiveLayer
    Set lays = docRef.ArtLayers
    
    actName = layRef.Name '복사하기 전 현재 레이어 명칭
    
    layRef.Duplicate '레이어 복사 2회
    layRef.Duplicate
    
    Call lays(actName & " copy 2").ApplyGaussianBlur(blurDeg) '두 번째 복사된 레이어에 가우시안 블러 적용
    
    docRef.ActiveLayer = lays(actName & " copy") '첫번째 복사한 레이어 활성화
    
    
    '여기서부터는 VB ScriptingListener 수행결과를 따름 (개체모델을 찾을 수 없어서)
    Dim dialogMode
    dialogMode = 3
    Dim idAppI
    Dim idslct
    
    '하단의 script는 주파수 분리를 수행하는 과정
    
    idAppI = appPhoto.CharIDToTypeID("AppI")
      Dim desc202
      Set desc202 = CreateObject("Photoshop.ActionDescriptor")
      Dim idWith
      idWith = appPhoto.CharIDToTypeID("With")
      Dim desc203
      Set desc203 = CreateObject("Photoshop.ActionDescriptor")
      Dim idT
        idT = appPhoto.CharIDToTypeID("T" & Chr(32) & Chr(32) & Chr(32))
        Dim ref100
        Set ref100 = CreateObject("Photoshop.ActionReference")
        Dim idChnl
        idChnl = appPhoto.CharIDToTypeID("Chnl")
        Dim idRGB
        idRGB = appPhoto.CharIDToTypeID("RGB ")
        Call ref100.PutEnumerated(idChnl, idChnl, idRGB)
        Dim idLyr
        idLyr = appPhoto.CharIDToTypeID("Lyr ")
        Call ref100.PutName(idLyr, actName & " copy 2")
      Call desc203.PutReference(idT, ref100)
      Dim idClcl
      idClcl = appPhoto.CharIDToTypeID("Clcl")
      Dim idClcn
      idClcn = appPhoto.CharIDToTypeID("Clcn")
      Dim idSbtr
      idSbtr = appPhoto.CharIDToTypeID("Sbtr")
      Call desc203.PutEnumerated(idClcl, idClcn, idSbtr)
      Dim idScl
      idScl = appPhoto.CharIDToTypeID("Scl ")
      Call desc203.PutDouble(idScl, 2.00000)
      Dim idOfst
      idOfst = appPhoto.CharIDToTypeID("Ofst")
      Call desc203.PutInteger(idOfst, 128)
      
      idClcl = appPhoto.CharIDToTypeID("Clcl")
      Call desc202.PutObject(idWith, idClcl, desc203)
      Call appPhoto.ExecuteAction(idAppI, desc202, dialogMode)
    
    
    lays(actName & " copy").BlendMode = Photoshop.psLinearLight '디테일 레이어 Linear Light 적용
    docRef.ActiveLayer = lays(actName & " copy 2")  '톤 레이어 선택
    
    Dim idnewPlacedLayer '톤 레이어를 스마트 오브젝트 레이어로 변환
    idnewPlacedLayer = appPhoto.StringIDToTypeID("newPlacedLayer")
    Call appPhoto.ExecuteAction(idnewPlacedLayer, , dialogMode)
    
    Call lays(actName & " copy 2").ApplyGaussianBlur(blurDeg * 2.7) '가우시안 블러 적용
    
    Set docRef = Nothing
    Set appPhoto = Nothing
    
    End Sub
    




    매크로 실행 동영상





     Copyright (2018) Ruahneuma. All Rights Reserved.


    댓글을 달아 주세요


    S Y N O P S I S #파워포인트 글씨 일괄 변경

  • 파워포인트 각 슬라이드의 텍스트 서식 중에서 색깔을 일괄적으로 변경하는 매크로이다.
  • 파워포인트 슬라이드가 많아질수록 직접 변경하기 번거로울 때 사용하면 좋다.
  • 변경되는 Shape는 텍스트를 가진 텍스트박스, 도형, 표의 모든 텍스트이다.
  • 파워포인트가 실행되어 있어야 하고, 코드는 엑셀에 작성하여 제어하는 방식이다.
  • 엑셀 개발자도구에서 PowerPoint Object Library를 참조해주어야 한다.
  • ※ 차트의 글씨 색깔은 변경하지 않는다. (참고)


  • Output Image




    VBA 예시 Code


    Option Explicit
    Sub c_changer()
    Dim pptRef As PowerPoint.Application
    Dim sld As PowerPoint.Slide
    Dim shp As PowerPoint.Shape
    Dim tbl As PowerPoint.Table
    Dim i As Long, j As Long
    
    On Error Resume Next
    Set pptRef = GetObject(, "PowerPoint.Application")
    If Err.Number > 0 Then '파워포인트가 실행되어있지 않으면,
      MsgBox "파워포인트를 실행하세요", vbOKOnly
      Exit Sub '매크로 종료
    End If
    On Error GoTo 0
    
    For Each sld In pptRef.ActivePresentation.Slides '모든 슬라이드(sld)를 돌면서
      For Each shp In sld.Shapes  '슬라이드 내의 개체(shp)를 돌면서
        
        If shp.TextFrame2.HasText Then  '그룹으로 된 경우
          shp.TextFrame2.TextRange.Font.Fill.ForeColor.RGB = RGB(0, 0, 0)
        End If
        
        If shp.HasTextFrame Then  '텍스트 개체이면
          shp.TextFrame.TextRange.Font.Color = RGB(0, 0, 0)
        End If
        
        If shp.HasTable Then  '표이면
          Set tbl = shp.Table 'tbl을 표 개체로 지정
            For i = 1 To tbl.Rows.Count
              For j = 1 To tbl.Columns.Count  '각 셀을 순환하면서
                tbl.Cell(i, j).Shape.TextFrame.TextRange.Font.Color.RGB = RGB(0, 0, 0)
              Next j
          Next i
        End If
      Next
    Next
    
    End Sub
    
    





    매크로 실행 동영상





     Copyright (2018) Ruahneuma. All Rights Reserved.


    댓글을 달아 주세요

     «이전 1 2 3 4 ··· 24  다음»

    티스토리 툴바