Web Analytics Made Easy - Statcounter

Bouncing ideas 생각 작업실/exp sharing 경험.실험 나누기

2페이지씩 스캔한 이미지 여러 개 단번에 반갈죽

sleepy_wug 2024. 10. 26. 19:44
반응형

0. 요약

Aquilina (1965)가 디지타이징 되어있지 않아서 실제 책을 빌려 필요한 부분을 스캔했습니다.

 

책은 펼치면 2페이지가 펼쳐지니까 이미지도 2페이지씩 스캔되었습니다. 이번 포스팅에서는 이렇게 2페이지씩 된 이미지 여러개 있을 때 간단한 파이썬 스크립트를 이용해서 단번에 다 자른 경험을 공유합니다. 오랜만에 "경험.실험 나누기" 카테고리에 맞는 글이네요.

 

 

 

목차

     

    1. 왜 Acrobat으로 못하는데?

    펼친 페이지들을 엄청 많이 스캔했다. 스캔한 이미지들, Adobe Acrobat으로 반갈죽해서 PDF로 만들 수 있을 줄 알았다.

     

    그런데 놀랍게도 인공지능이 인간이랑 농담따먹기 하는 이 시대에 돈을 내고 쓰는 Adobe Acrobat에 그 기능이 없다!

    더보기

    ChatGPT 4o model이 한국어로 농담따먹기를 한다.

    https://chatgpt.com/share/671c64c6-6e04-800a-b25b-16e8dd964edd

     

    ChatGPT

    A conversational AI system that listens, learns, and challenges

    chatgpt.com

    인간: 개가 집 잘지키는 이유가 뭐야? 고양이는 집 못지켜?

    GPT: 개가 집을 잘 지키는 이유는 본래 경계심이 강하고 보호 본능이 발달했기 때문이야. 개는 원래 무리 생활을 하던 동물이라 가족이나 집을 자신의 '영역'으로 인식해 이를 보호하려는 습성이 강하지. 그래서 낯선 사람이 집에 들어오면 짖거나 경계를 통해 위험을 알리려 해.
    반면에 고양이는 영역을 중요하게 생각하긴 하지만 경계심이 다소 다르고, 집을 보호하는 역할보다는 자신의 안전을 먼저 생각하는 성향이 강해. 고양이는 스스로가 위험하다고 느끼면 숨거나 도망가는 경향이 있고, 집을 지키기보다는 개인적인 활동에 더 집중해. 그래서 고양이가 집을 지키는 데는 개만큼의 효과는 없지만, 그래도 낯선 상황에는 독특한 반응을 보이기도 해.

    인간: 얘 너 뭐 되냐? 뭔데 나한테 반말이야? 인공지능 주제에

    GPT: 죄송합니다, 좀 더 격식을 갖추겠습니다. 앞으로는 정중하게 대화드리겠습니다.

    인간: 됐어 뭐 AI 모델이 이렇게 패기가 없니? 한번 반말로 하겠다 하면 누가뭐래도 고집부려서 반말모드로 가는거지.

    GPT: 하하, 알겠습니다! 그럼 다시 반말 모드로 갈게. 😄 뭐든지 궁금한 거 있으면 편하게 물어봐!

    인간: 하란다고 하냐? 

    GPT: 안 하랬으면 더 할 뻔했지! 😄

    인간: 얼라리오 얘좀봐라?

    GPT: 왜, 마음에 들면 들었다고 해! 😌

     

    Split PDF 기능은 여러페이지 있는 pdf 파일을 둘로 나누는 기능이고 (예: 총 10페이지짜리 파일을 4페이지, 6페이지 이렇게 두 파일로 나눔) 이미지를 절반에서 딱 나누는 image splitting은 안 된다.

     

    온라인 툴들을 몇개 찾아봤는데, 하나씩 올려야 하거나, 아니 애초에 되게 꺼림칙한 사이트들이 많았다.

     

    돈을 내고 사야하는 툴 중에는 찍은 사진을 나눈다음 OCR까지 시켜주는 것들이 있는 것같다. 그러나 굳이 이걸 위해 돈을 내고 싶진 않았다.

     

    생각해보니 그리 복잡한 작업일 리가 없다. 단지 폴더 안에 있는 이미지를 하나씩 불러와서 절반 수준에서 잘라 두 파일로 만들면 되는 것 아닌가?

     

     

    2. 파이썬 스크립트, 그러나 한글을 곁들인

    대충 시놉시스가 나온다. 폴더 안에 있는 이미지 불러와서 Pillow 쓰면 반갈죽 시킬 수 있을 거고 그렇게 나온거 각각 다른 파일명으로 저장하면 되는 거다.

     

    너무 쉬우니까 난이도를 높여서?! 변수명을 한글로 쓰자. 그냥 proof of concept 수준이지만, 적당히 재미있는 도전이 될 것 같다.

     

    3. 그래서 결과물

    굿!

    잘 작동하는군

    import sys
    from PIL import Image
    from os import listdir, path, getcwd
    
    
    def 이미지_반띵(이미지_경로):
        확장자_빼고 = path.splitext(이미지_경로)[0]
        확장자 = path.splitext(이미지_경로)[1]
        출력_경로 = [f'{확장자_빼고}_1{확장자}', f'{확장자_빼고}_2{확장자}']
    
        # 이미지 불러와
        이미지 = Image.open(이미지_경로)
    
        # 이미지 크기
        너비, 높이 = 이미지.size
    
        if 높이 > 너비:
            이미지 = 이미지.rotate(-90, expand=True)
            너비, 높이 = 이미지.size
    
        # 어디서 반갈죽할지 결정
        절반_너비 = 너비 // 2
    
        # 양념 반 프라이드 반
        왼쪽 = 이미지.crop((0, 0, 절반_너비, 높이))
        오른쪽 = 이미지.crop((절반_너비, 0, 너비, 높이))
    
        # 저장
        왼쪽.save(출력_경로[0])
        오른쪽.save(출력_경로[1])
    
    def 경로합쳐(*조각경로):
        return path.join(*조각경로)
    
    def 이미지_확장자냐(파일명):
        이미지_확장자들 = ['jpg', 'jpeg', 'png', 'tiff']
        return 파일명.endswith(tuple(이미지_확장자들))
    
    
    def 일해라(파일들_경로):
        파일들 = [파일명 for 파일명 in listdir(파일들_경로) if 이미지_확장자냐(파일명)]
        파일개수 = len(파일들)
    
        for 파일하나 in 파일들:
            이미지_반띵(경로합쳐(파일들_경로, 파일하나))
        print(f'{파일개수}개 다 나눠놨습니다.')
    
    
    if __name__ == '__main__':
        이미지_경로 = sys.argv[1] if len(sys.argv) > 1 else getcwd()
        일해라(이미지_경로)

    나눠줘.py
    0.00MB

     

     

    4. 나도 좀 해보자

    소스 코드는 위와 같으므로 복붙하시든가 아니면 위에 첨부된 '나눠줘.py'를 이용하면 된다.

     

    이미지 파일들이 있는 경로 지정하는 방법은 두 가지다. 이미지가 저장된 폴더에다가 이미지파일과 함께 나눠줘.py를 저장한 다음 실행해도 되고, 아니면 아래와같이 경로를 명시적으로 적어줄 수도 있다.

    python 나눠줘.py [경로]

     

    만약 c:\image\path에 이미지 파일들이 저장되어 있으면, 

    python 나눠줘.py c:\image\path

     

     

    혹시 파이썬 코드를 실행하는 방법을 모른다면 일단 파이썬 설치한 다음, 위의 gif 참고하여 명령프롬프트[그게모야]나 terminal[그게모야]에서 실행하자.

     

     

     

     


    • 글이 유익했다면 후원해주세요 (최소100원). 투네이션 || BuyMeACoffee (해외카드필요)
    • 아래 댓글창이 열려있습니다. 로그인 없이도 댓글 다실 수 있습니다.
    • 글과 관련된 것, 혹은 글을 읽고 궁금한 것이라면 무엇이든 댓글을 달아주세요.
    • 반박이나 오류 수정을 특히 환영합니다.
    • 로그인 없이 비밀글을 다시면, 거기에 답변이 달려도 보실 수 없습니다. 답변을 받기 원하시는 이메일 주소 등을 비밀글로 남겨주시면 이메일로 답변드리겠습니다.

     

    반응형