사진 용량 한꺼번에 줄이기
"파일 크기가 너무 큽니다." 사진 한 장이면 그림판으로 줄이면 되지만, 50장이면 이야기가 달라요. 바로 줄이고 싶다면 아래 도구를, 파이썬으로 내 도구를 만들고 싶다면 실습으로 내려가세요.
바로 줄이기
사진은 이 브라우저 안에서만 줄여요. 서버로 올리지 않아요. 세로로 찍은 사진도 바로 세워서 저장하고, 원본보다 작은 사진은 억지로 키우지 않아요. 아이폰 .heic 사진은 브라우저가 못 여는 경우가 많아요(사파리 제외).
0준비: 폴더 두 개와 설치 한 줄
- 바탕화면에
사진줄이기폴더, 그 안에photos폴더를 만들어요. - 줄일 사진을
photos에 복사해 넣어요. 옮기지 말고 복사! 원본은 원래 자리에 남겨 두는 게 안전장치예요. 사진줄이기폴더의 주소창에cmd→ 엔터로 검은 창을 열고 설치해요.
pip install pillow
pip install PIL은 안 돼요("No matching distribution found for PIL"). 설치할 때 이름은 pillow, 코드에서 부를 때 이름은 PIL이에요. 옛날 라이브러리(PIL)를 이어받은 게 Pillow라서 그래요. 파이썬 설치는 #4의 0단계를 보세요.
1AI에게 세 줄로 요청하기
파이썬 Pillow로 폴더 안의 사진들을 한꺼번에 줄이는 코드를 짜줘. photos 폴더 안의 jpg와 png를 긴 쪽 1280픽셀로 줄여줘. 결과는 small 폴더를 새로 만들어서 거기에 저장해줘.
일부러 짧게 뒀어요. 이 세 줄만으로도 사진은 줄어들지만, 몇 가지가 빠져 있어서 결과가 아쉬울 거예요. 뭐가 아쉬운지 직접 돌려 보고 미션에서 하나씩 채워요.
2연습장에서 바로 실행하기
받은 코드를 붙여넣고 ▶ 파이썬 실행. 연습장의 photos 폴더에는 예제 사진 3장(큰 가로 사진, 세로로 찍은 폰 사진, 작은 사진)이 들어 있어요. 내 사진으로 해 보고 싶다면 내 사진 넣기를 누르세요. 결과는 small/ 폴더 그림으로 아래에 나타나요.
내 컴퓨터에서 실행하려면
- 메모장에 코드를 붙여넣고
사진줄이기폴더에 저장해요(photos안이 아니에요). 파일 형식 모든 파일, 이름 resize.py, 인코딩 UTF-8. - 검은 창에
python resize.py→small폴더가 생기면 성공. 탐색기에서 보기 → 자세히로 바꾸면 KB가 보여요.
3미션: 눕는 사진부터 잡기
- 기본: small 폴더에 줄어든 사진
사진이 긴 쪽 1280px 이하로 줄어서
small에 저장돼야 해요. - 뭘 했는지 보여주기
한 장마다 한 줄씩, 마지막에 합계. 예시 한 줄: "사진을 한 장 처리할 때마다 "파일이름 2540KB -> 173KB"처럼 한 줄씩 보여주고, 맨 마지막에 "5장 완료 12.4MB -> 0.85MB"처럼 합계도 보여줘."
- 세로 사진이 눕는 문제 ⭐
폰 사진에는 "90도 돌려서 보여 주세요"라는 회전 메모가 따로 들어 있어요. 줄이다가 그 메모가 떨어지면 누운 채로 보여요. 이걸 AI에게 설명해서 고쳐 보세요. 예제 사진 중
IMG_0002_세로.jpg로 검사해요. - 내 마음대로 조절되게
긴 쪽 크기와 화질 숫자를 파일 맨 윗줄에서 바꿀 수 있게. 블로그용 1280, 메일용 800처럼요.
- 아이폰 사진(.heic)도 되게
Pillow는 기본으로 .heic를 못 열어요. 힌트: 추가로 설치할 게 있는지 AI에게 물어보세요. 연습장에서는 그 부품을 설치할 수 없어서 코드에 들어갔는지만 보고, 실제 확인은 내 컴퓨터에서 해요.
- 자유
파일 이름 뒤에 _small 붙이기, 이미 줄인 사진 건너뛰기, 폴더 안의 폴더까지 훑기, 투명한 PNG도 에러 없이…
안 될 때 확인할 것
| 증상 | 원인과 해결 |
|---|---|
No matching distribution found for PIL | pip install pillow가 맞아요 |
module 'PIL.Image' has no attribute 'ANTIALIAS' | AI가 옛날 코드를 줬어요(Pillow 10부터 없어진 이름). "Pillow 최신 버전에서 되게 고쳐줘". 아주 흔해요 |
cannot write mode RGBA as JPEG | 투명 배경 PNG를 JPG로 저장하려 했어요. "투명한 PNG도 에러 없이 처리되게 해줘" |
FileNotFoundError, small 폴더가 비어 있음 | 검은 창이 다른 폴더에 있거나, photos 이름 오타, 사진이 .heic |
| 세로 사진이 누워서 나옴 | 회전 메모(EXIF)가 떨어져 나갔어요. 미션 3 |
| 작은 사진이 억지로 커져서 뿌옇다 | "원본보다 작을 때는 그대로 두라"고 요청 |
실험: 가로세로를 3분의 1로 줄였는데 왜 용량은 15분의 1일까?
첫째, 화소 수는 넓이예요. 4032×3024는 1,219만 화소, 1280×960은 123만 화소예요. 긴 쪽은 3분의 1이지만 알갱이 수는 10분의 1이에요. 둘째, JPEG은 비슷한 부분을 뭉뚱그려 저장해요. 하늘처럼 비슷한 넓은 면은 "여기부터 여기까지 대충 이 색"으로 적으니까 화소가 준 것보다 더 줄어요. 이걸 손실 압축이라고 하고, 버린 정보는 돌아오지 않아요.
같은 사진을 화질 85로 20번 다시 저장하면? 위 도구에서 사진을 고른 뒤 눌러 보세요. 사진이 없으면 예제 그림으로 해요.
비교는 첫 번째 저장본과 20번째 저장본의 픽셀 차이(0~255)예요. 브라우저의 JPEG 저장 방식으로 잰 값이라 파이썬 Pillow와는 숫자가 조금 달라요.
그래서 원본을 덮어쓰면 안 돼요. 평균으로는 거의 티가 안 나도, 어떤 픽셀은 크게 틀어져요. 블로그 본문은 긴 쪽 1280px이면 대부분 충분하고, 메일 첨부는 800px, 인화나 보관이 목적이면 아예 줄이지 마세요.
블로그에서 자세히 보기: 극초보 바이브코딩 #5 원문
이전 실습: #4 와이파이 QR코드 · 전체 실습 목록
자주 묻는 질문
화질은 몇으로 하면 되나요?
블로그와 메일이라면 85 정도가 눈으로 구분이 잘 안 되면서 용량이 많이 줄어요. 1280px 기준으로 95는 85보다 두 배 가까이 크고, 75는 조금 더 작아요.
사진이 서버로 올라가나요?
아니요. 바로 줄이기와 연습장 모두 이 브라우저 안에서만 처리해요. 페이지를 닫으면 사라져요.
세로 사진이 왜 눕나요?
폰은 사진을 가로로 저장하고 "돌려서 보여 줘"라는 회전 메모(EXIF)를 붙여요. 줄이는 과정에서 이 메모가 빠지면 누운 원래 모습대로 보여요. 저장 전에 메모대로 실제로 돌려 주면 해결돼요.