파이썬, 이미지 압축프로그램 만들기 도전.(feat.tinify)

파이썬을 이용해 번거로운 작업을 편하게 도와줄 수 있는 이미지 압축프로그램 만들기에 도전했습니다. 언듯보면 애들 장난 수준으로 보입니다.

개인적으로 반복작업이 귀찮아서 만들어 봤는데 생각보다 마음에 듭니다. 무엇이든 작업단계를 줄일 수 있는 녀석들은 반가운 것 같습니다.

🔆이미지 압축이 왜 필요해요❓

우선, 이미지 압축에 대해서 간략하게 생각해 볼게요. 웹사이트(블로그 포함)를 운영한다는 것은 많은 유입을 통해 목적을 달성하는 것이라 할 수 있습니다.

자연스럽게 방문자가 많아지는 것은 해당 웹사이트의 정보가 좋다는 것을 나타내겠죠. 이런 부분들이 쌓여 검색포털에게 좋은 점수를 받을 수 있습니다.

좋은 점수를 받은 페이지는 관련 검색에서 상단에 노출된다고 하네요. 노출이 많이 되면 또 많은 유입자가 생기는 선순환이 됩니다. 초반 유입이 적다면 이런 구조는 어려울 수 있겠죠.

좋은 글이 뒤로 밀릴 수 있습니다. 검색포털사이트에서는 이용자의 긍정적 경험을 쌓기 위해 좋은 글을 끌어올려 보여주기 위해 노력합니다. 당연히 기준점이 마련되고, 그 기준점을 SEO라고 부르게 됩니다.

정확한 기준은 알 수 없지만, 그 중에 사이트 속도와 이미지 이름이 있습니다. 이미지의 이름이 페이지의 주제와 일치하는 것이 좋으며, 이미지 용량이 적어야 서버의 반응 속도가 높아질 수 있습니다.

📌 파이썬 이미지 압축프로그램 계획세우기.

이미지 압축 서비스를 제공하는 사이트는 많이 있습니다. 대표적으로 tinypng.com이 있습니다. 무료로 사용할 수 있으며, 사용방법이 간단하기 때문에 누구나 쉽게 사용이 가능합니다.

단순하게 압축할 이미지를 사이트에 upload시켜, 압축된 이미지를 download받으면 됩니다. 너무나 간단한 작업인데, 매번 하려니 조금 귀찮기도 합니다.

글에 사용될 이미지를 다운로드하고, tinypng에 업로드한 후, 이미지 이름을 변경합니다. 한 두장 정도의 사진은 괜찮지만, 사진이 많아지면 생각보다 번거롭고 귀찮게 느껴지곤 했습니다.

그래서, 조금 더 간편하게 사용할 수 있는 파이썬 프로그램을 만들어서 사용해야 겠다는 생각을 했습니다.


파이썬 이미지 압축프로그램의 개요

  • 원하는 이미지 파일 혹은 복사를 이용.
  • 이미지 파일을 tinypng_api를 이용해 압축.
  • 압축된 이미지를 가져와서 이름을 변경.
  • 최종 이미지 활용.

대략적으로 위의 계획대로 코드를 진행하려 합니다. 말이 거창하지 정말 간단한 작업이 될 것이라 생각했으며, pyqt를 이용해 윈도우 exe파일로 만들어 사용하는 것이 최종 단계입니다.


1️⃣ tinipy 사용방법 및 api_key 발급 받기

우선은 메인이라 할 수 있는 tinypng의 api_key를 발급받도록 합니다. 웬만하면 api키를 발급 받을 때, api사용방법에 관해서 알 수 있습니다.

tinypng_api

▪ tinypng.com 메인 화면에서 DEVELOPER API메뉴를 볼 수 있습니다. 이곳에서 이름과 이메일 주소를 입력하면 api_key를 발급받을 수 있습니다.

▪ 무료 사용의 경우 월 500개의 이미지까지 사용이 가능하며, 그 이상의 이미지를 압축할 필요가 있다면 일정한 일정한 금액을 결제해야 합니다. 해당 부분은 api 대쉬보드에서 확인할 수 있습니다.

▪ DEVELOPER API 페이지 우측에 보면 Documentation이 있습니다. 우리가 원하는 api 사용 관련 문서입니다. 여기서 python 예제를 확인하면 쉽게 적용할 수 있습니다.

import tinify
tinify.key = "발급받은 api_key"

source = tinify.from_file("unoptimized.webp") #파일 api로 전송 및 반환값 받기
source.to_file("optimized.webp") #파일 저장

참 단순하고 명쾌하게 되어있죠. 기본 파일 압축에 관련된 코드이며, 그 밖에도 사이즈 조절과 메타데이터에 관련된 기능을 추가할 수 있습니다.


2️⃣ 클립보드에 있는 파일 이미지 파일로 저장하기

구글의 DB는 참 좋습니다. 구글링으로 많은 것을 알 수 있기 때문이죠. 관련 키워드로 검색하면 좋은 정보를 얻을 수 있습니다.

사용할 모듈은 다음과 같습니다.

  • from PIL import ImageGrab

해당 모듈을 통해 클립보드에 있는 이미지를 파일로 저장할 수 있습니다. 여기서 아이디어를 얻을 수 있겠죠. 파이썬 캡쳐프로그램을 제작해 볼 수도 있습니다.

im = ImageGrab.grabclipboard()
im.save('./img01.jpg','JPEG')

3️⃣ Qtdesigner을 이용해 프로그램 레이아웃 만들기

실력이 좋다면 모든 것을 코드로 진행해도 되겠지만, 저는 Qtdesigner가 좋습니다. 기본적인 레이아웃을 만들어 두고, 코드를 연결하면 되니까요.

외관이 멋지진 않지만, 개인적으로 사용하기에 충분한 결과를 얻었습니다. 이 외관에 기능을 구현한 코드를 연결하면 프로그램을 활용할 수 있습니다.


위 사항은 해당 프로그램을 만들기 위해 중심이 되었던 기능들에 대한 내용이었습니다. 부가적인 기능이 필요하면, 구글링과 서적을 통해 원하는 기능을 구현할 수 있습니다.

Qtdesigner을 이용하는 방법 또한 잘 정리된 내용들이 인터넷에 많이 있습니다. 부족한 부분은 여기를 통해 매뉴얼을 차고할 수도 있습니다.

전문가는 아니지만, 파이썬 코딩을 즐기는 사람으로써 이렇게 생각합니다. 생각나면 두드려봐야한다고 말이죠. 물론, 그것이 실패로 끝나도, 도전한 사람만 얻을 수 있는 무엇인가가 있을 것입니다.

이번 내용도 상당히 간단한 작업이라 생각했지만, 생각지도 못한 ‘오류’를 만나고 말았네요. 관련 이슈는 requests ca-certificate 였습니다.

해당 증상으로 스크립트에서 만족되게 동작했는데, pyinstaller로 exe파일만 만들면 tinipy의 함수가 먹통이 되는 증상이었습니다.

원인을 찾는데 생각보다 오랜시간 걸렸고, 해결책을 찾는데 또 생각보다 오랜시간 걸렸습니다. 이런 만남 속에서 무엇인가 배우겠죠. 다음에는 이번 오류 증상과 관련된 이슈와 해결책에 대해 알아보겠습니다.

댓글 남기기