위에서 파일을 고르면 바로 열립니다.준비됨 — 인터넷을 끊어도 이대로 동작합니다.이 브라우저에서는 쓸 수 없습니다 (나머지는 그대로 동작합니다).오프라인 저장에는 https:// 또는 localhost가 필요합니다.여기서는 저장할 수 없지만, 어느 쪽이든 올라가는 것은 없습니다.파일은 어디로도 가지 않았습니다. 파일 {total}개를 불러왔고 모두 이 사이트의 것입니다. {platform}무언가가 {hosts}에 접속했는데, 이 도구는 절대 그러지 않습니다. 살펴볼 만합니다. {platform}광고와 측정과 후원 버튼을 위한 이 사이트 자신의 스크립트가 호스트 {hosts}곳에서 왔습니다. 그중 어느 쪽도 파일이나 그 1바이트도 받지 않았습니다.광고와 측정과 후원 버튼을 위한 이 사이트 자신의 스크립트가 호스트 {hosts}곳에서 왔습니다. 그중 어느 쪽도 파일이나 그 1바이트도 받지 않았습니다.문제가 생겼습니다: {detail}. 처음부터 다시 하려면 페이지를 새로 고치세요.파일 {count}개를 읽는 중…파일 {count}개를 읽는 중…예시로 해 보기예시를 만드는 중…이 브라우저에서는 예시를 만들지 못했습니다. 대신 파일을 골라 주세요.
크기 조절도, 자르기도, 형식 변경도 모두 내 브라우저가 내 기기의 성능으로, 브라우저에 이미 들어 있는 이미지 인코더를 써서 합니다. 이 도구에는 네트워크 기능이 하나도 없습니다. 가져올 것도 보낼 것도 없어요. 설령 보내려 해도 이 페이지 반대편에는 사진을 받아 줄 서버 자체가 없습니다.
✗ 업로드 없음
✗ 가입 없음
✗ 워터마크 없음
✓ 오프라인 동작
✓ 오픈 소스
실시간 확인:확인 중…
오프라인:확인 중…
그냥 믿지 마시고 직접 확인해 보세요. 개발자 도구의 '네트워크' 탭을 켜 놓고 사진 크기를 바꿔 보십시오. 이미지도, 미리보기도, 파일 이름도, 고른 파일의 단 1바이트도 실려 나가는 요청이 없습니다. 아니면 인터넷을 끊고 그냥 크기를 바꿔 보셔도 됩니다.
이 약속을 직접 확인하는 방법
이미지는 나갈 곳이 없습니다. 이 페이지가 연결해도 되는 주소는 Content-Security-Policy에 모두 적혀 있는데, 그중 이 사이트 것은 하나도 없습니다. 파일이 모일 만한 수신 지점이 없고, 설령 있더라도 거기로 파일을 보낼 코드가 없습니다.
여기서는 아무것도 가져오지 않습니다.src/ 어디에도 fetch도, XMLHttpRequest도, sendBeacon도 없습니다. 크기 조절은 캔버스 위의 drawImage 하나와 canvas.toBlob 하나가 전부입니다. 브라우저에 이미 설치되어 있는 스케일러와 인코더예요.
바꿔 달라고 하지 않은 파일은 바뀌지 않습니다. 자르기도, 크기 조절도, 형식 변경도 없다면 고르신 파일이 다시 저장되지 않고 바이트 그대로 되돌아옵니다. 예의로 하는 일이 아닙니다. 이 도구가 사진을 몰래 다시 인코딩하거나, 그냥 들여다보려던 사진의 메타데이터를 슬쩍 떨어뜨릴 수 없는 이유입니다.
구글이 불러오는 것과, 구글에게 주지 않는 것. 광고와 측정 스크립트는 구글에서, 후원 버튼은 Buy Me a Coffee에서 옵니다. 어느 쪽에도 내 사진에 관한 것은 넘어가지 않습니다. 파일을 읽고 자르고 크기를 바꾸고 쓰는 코드는 한 줄도 빠짐없이 이 출처에서 제공되고 저장소에 공개되어 있습니다.
오프라인에서도 동작합니다. 네트워크를 끊어도 도구는 그대로입니다. 애초에 네트워크를 쓰는 단계가 없었으니까요. 가장 간단한 증거입니다.
직접 확인해 보세요. 위에 적은 어느 것도 그냥 믿으실 필요는 없습니다. 이 페이지는 저장소 안의 템플릿과 설정을 빌드 스크립트가 찍어 낸 결과이고, 그 스크립트는 누구나 읽고 직접 돌려 볼 수 있습니다. 결과물은 dist 브랜치에 그대로 올라가 있고요. 그래서 실제로 제공되는 파일과 소스를 빌드한 결과를 나란히 놓고 비교해 보실 수 있습니다:
먼저 읽어 볼 파일을 꼽자면, Content-Security-Policy는 config/site.toml, 무엇이 남고 얼마나 큰 결과가 나올지를 정하는 산술은 src/geometry.js, 자르기와 크기 조절을 한꺼번에 해내는 drawImage 호출 하나는 src/codecs.js에 있습니다.
회사 보안 소프트웨어가 업로드를 경고한다면. 그것은 브라우저에서 파일이 선택되는 순간을 지켜보며, 페이지가 그것을 보낼 생각인지는 알 수 없습니다 — 그래서 고르는 순간에 경고합니다. 여기서는 아무것도 보내지 않습니다. 브라우저 개발자 도구를 열고 네트워크 탭으로 옮긴 뒤 파일을 골라 보세요. 그것을 실어 나르는 요청은 없고, 이 페이지 자체의 로컬 미리보기 말고는 요청 자체가 없습니다. 같은 확인을 IT 팀도 삼십 초면 할 수 있습니다.
1 이미지 고르기
2 원한다면 자르기
상자는 사진 전체에서 시작하므로, 이 단계를 그냥 지나가면 아무것도 잘리지 않습니다. 이미지마다 자기 상자를 따로 갖는데, 위 목록에서 하나를 고르면 그 위에 그리게 됩니다. 자르기는 크기 조절보다 먼저 일어납니다. 말이 되는 순서가 그것뿐이거든요. 줄인 다음에 잘라 낸 사진은 필요했던 픽셀을 이미 버린 뒤니까요.
상자 안쪽을 끌면 옮겨지고, 모서리를 끌면 크기가 바뀝니다. 상자에 초점이 있을 때 방향키는 1픽셀씩 밀고, Alt + 방향키는 크기를 바꾸며, Shift를 누른 채면 한 번에 10픽셀씩 움직입니다.
이미지를 넣으면 상자가 여기 나타납니다.
3 어떤 크기로 할지 말하기
사진을 원본보다 크게 만들지 않기 확대는 애초에 찍히지 않은 픽셀을 지어내는 일이라, 작은 사진에 큰 틀을 요구하면 선명해지는 게 아니라 흐릿해집니다. 이 항목을 켜 두면 요청한 크기보다 이미 작은 것은 자기 크기 그대로 남습니다.
한쪽만 채우고 다른 쪽을 비워 두면 사진이 자기 비율을 지킵니다.
더 긴 쪽이 이 값이 되고 나머지가 따라갑니다. 한 묶음 안의 세로 사진과 가로 사진이 긴 변 기준으로 전부 같은 크기가 되는데, 갤러리에서 보통 원하는 것이 그것입니다.
4 저장하기
화질 85 JPEG와 WebP에만 해당합니다. PNG에는 화질 다이얼이 없습니다. 85쯤이 대부분의 사람이 차이를 못 느끼기 시작하는 지점입니다. 60 아래로 내려 가면 단색 면에 띠가 생깁니다.
배경 사진이 없는 자리에 비치는 색입니다. 여백을 넣은 틀 뒤에, 그리고 출력 형식에 알파 채널이 없을 때 투명한 부분 뒤에 나타납니다.
완료
{name}: 이 도구가 읽을 수 있는 이미지가 아닙니다.{name}: 이 브라우저가 디코딩하지 못했습니다.{name}: {reason}이 브라우저가 {format} 쓰기를 거부했습니다.이 브라우저가 사진을 디코딩하지 못했습니다.{n}바이트{n} KB{n} MB이미지 1장이미지 {n}장거의 같은 크기{percent}% 작아짐{percent}% 커짐{count}, 모두 {size}자르기 미리보기에 있는 것이 {name}입니다{name}에 자르기 상자를 그리기미리보기 중{name}을 목록에서 빼기바뀌는 것이 없으니 이 파일은 그대로 지나갑니다.{size}가 됩니다이미지 크기 바꾸기이미지 크기 바꾸기{name} 미리보기자르기 영역. 방향키가 옮기고, Alt와 방향키가 크기를 바꾸며, Shift를 누른 채면 한 번에 열 픽셀씩 움직입니다.{name}에 그리는 중입니다.이미지마다 자기 상자를 따로 가집니다. {note}{name}에는 자기 상자가 있습니다.{name}은 아직 사진 전체입니다 — 위 목록에서 고르면 그것도 자를 수 있습니다.나머지 {count}은 아직 사진 전체입니다 — 위 목록에서 하나를 골라 자르세요.나머지 둘 다 자기 상자가 있습니다.나머지 {n}장 모두 자기 상자가 있습니다.나머지 {total}장 가운데 1장에 자기 상자가 있고, 나머지는 아직 사진 전체입니다.나머지 {total}장 가운데 {n}장에 자기 상자가 있고, 나머지는 아직 사진 전체입니다.목록의 이미지가 모두 정확히 이 크기라서, 다른 하나도 정확히 이 상자를 받습니다.목록의 이미지가 모두 정확히 이 크기라서, 전부 정확히 이 상자를 받습니다.각각에 같은 상대 영역을 — 저마다의 너비와 높이에 대한 같은 비율로 — 잡습니다. 크기가 다 같지는 않기 때문입니다.사진 자체의 비율로, 각각의 같은 상대 영역에 들어가는 가장 큰 상자입니다. 크기가 다 같지 않아도 결과는 모두 고정한 비율로 나옵니다.{ratio} 비율로, 각각의 같은 상대 영역에 들어가는 가장 큰 상자입니다. 크기가 다 같지 않아도 결과는 모두 고정한 비율로 나옵니다.JPEG는 JPEG로, PNG는 PNG로 남습니다. 이 브라우저가 쓰지 못하는 것 — GIF나 BMP — 은 투명도와 평평한 색을 지키는 PNG로 나옵니다.작고 어디서나 열리지만 투명도가 없습니다. 비쳐 보이던 곳은 배경색으로 채워집니다.손실이 없고 투명하지만, 사진에서는 나머지 둘보다 훨씬 큽니다.같은 품질이면 JPEG보다 작고, 투명도를 지키며, 요즘 브라우저는 모두 엽니다.WebP — 이 브라우저는 지원하지 않습니다{crop}로 잘라내고{size}로 크기를 바꾸고{size} 그대로 두고{crop}로 잘라낸 다음 {size}로 크기를 바꾸고{what}, 요청한 그 틀에 맞게 여백을 채우고{what}, {format}로 씁니다{plan}.이미지를 추가하면 무엇이 되는지 여기에 그대로 적힙니다.바뀌는 것이 없습니다: {name}은 {size}이고, 들어온 그대로 바이트 단위로 돌아갑니다.{name}은 {size}입니다. 나오는 것은 {out} — {scale}.{name}은 {size}입니다. 나오는 것은 {out} — 사진은 {scale}이고, 그 틀의 나머지는 배경이 채웁니다.{name}은 {size}입니다. 상자가 그중 {crop}을 남깁니다. 나오는 것은 {out} — {scale}.{name}은 {size}입니다. 상자가 그중 {crop}을 남깁니다. 나오는 것은 {out} — 사진은 {scale}이고, 그 틀의 나머지는 배경이 채웁니다.상자가 남긴 것의 {percent}%원본의 {percent}%상자가 남긴 것의 {percent}%로 확대원본의 {percent}%로 확대자르는 것도 크기를 바꾸는 것도 없고 형식도 그대로라, 다시 인코딩할 것이 없습니다. 파일마다 바이트 단위로, EXIF 태그까지 그대로 돌려줍니다. 하나도 열지 않기 때문입니다.이미지는 {plan} — 그리고 EXIF와 GPS 태그는 살아남지 못합니다. canvas가 담는 것은 픽셀뿐이니까요.{name}은 {plan} — 그리고 EXIF와 GPS 태그는 살아남지 못합니다. canvas가 담는 것은 픽셀뿐이니까요. {rest}다른 이미지도 같은 크기와 형식 설정을 받되, 자르기는 자기 것입니다.나머지 {count}도 같은 크기와 형식 설정을 받되, 자르기는 저마다 자기 것입니다.{total}장 가운데 {index}번째: {name}요청된 것이 없어서 한 것도 없습니다. 파일마다 들어온 그대로 돌아갔습니다.{before} 들어와 {after} 나감 — {change}.{before} 들어와 {after} 나감 — {change}. 그중 {count}은 바꿀 것이 없어 그대로 지나갔습니다.{before} 들어와 {after} 나감 — {change}. 그중 {count}은 바꿀 것이 없어 그대로 지나갔습니다.{name}을 원래 크기로 보기{size} · {bytes} — 그대로{before} → {after} · {beforebytes} → {afterbytes} · {change}메타데이터까지 바이트 단위로 그대로 지나갔습니다. 이 파일에서는 바뀌는 것이 없었습니다.보기내려받기원본: {name}결과: {name}원본 {name}, {size}. 둘 다 이 창에 들어가는 크기로 보여 줍니다. 그것이 둘을 견주는 유일하게 공정한 방법입니다.결과 보기원본 보기저장 이름형식전후파일 크기자르기배율여백품질메타데이터같은 파일, 바이트 단위로 그대로남아 있음 — 이 파일은 한 번도 열리지 않았습니다넘어가지 않음 — canvas가 담는 것은 픽셀뿐입니다{size}, 왼쪽에서 {x}, 위에서 {y} 지점부터아니요 — 사진 전체가 지나갔습니다자른 것의 {percent}%원본의 {percent}%예 — 사진이 배경색 위에 놓입니다{total}개 중 {done}개까지 하고 멈췄습니다. 끝난 것은 아래에 있습니다.첫 번째가 끝나기 전에 멈췄습니다.이미지는 어디로도 가지 않았습니다. 파일 {total}개를 불러왔고 모두 이 사이트의 것입니다. {platform}무언가가 {hosts}에 접속했는데, 이 도구는 절대 그러지 않습니다. 살펴볼 만합니다. {platform}광고와 측정과 후원 버튼을 위한 이 사이트 자신의 스크립트가 호스트 {hosts}곳에서 왔습니다. 그중 어느 쪽도 이미지나 그 1바이트도 받지 않았습니다.광고와 측정과 후원 버튼을 위한 이 사이트 자신의 스크립트가 호스트 {hosts}곳에서 왔습니다. 그중 어느 쪽도 이미지나 그 1바이트도 받지 않았습니다.
원하는 결과가 나왔나요?
무엇이 잘못됐나요?
고맙습니다 — 큰 도움이 됩니다.
보내지는 것은 답변뿐이고, 그것도 버튼을 눌렀을 때만입니다. 파일도, 파일 이름도, 파일에 관한 어떤 정보도 보내지 않습니다.
# 이미지 크기 조절 — 사진 크기 바꾸기, 자르기, 변환
크기를 말하고, 상자를 그리고, 형식을 고르세요.
> JPEG, PNG, WebP 이미지를 브라우저에서 크기 바꾸고 자르고 변환합니다. 정확한 픽셀로도, 퍼센트로도, 긴 변 기준으로도. 한 장이든 폴더 하나든 됩니다. 아무것도 업로드되지 않습니다.
이 페이지는 브라우저 안에서만 동작하는 대화형 도구입니다(https://abox.tools/ko/이미지-크기-조절/). 도구에 넘긴 어떤 것도 업로드되지 않습니다. 아래는 이 페이지가 도구에 대해 글로 설명하는 내용 전부입니다. 도구를 쓰려면 이 주소를 여세요.
## 이미지 파일은 **절대 업로드되지 않습니다**. 서버가 아예 없으니까요.
크기 조절도, 자르기도, 형식 변경도 모두 내 브라우저가 내 기기의 성능으로, 브라우저에 이미 들어 있는 이미지 인코더를 써서 합니다. 이 도구에는 네트워크 기능이 하나도 없습니다. 가져올 것도 보낼 것도 없어요. 설령 보내려 해도 이 페이지 반대편에는 사진을 받아 줄 서버 자체가 없습니다.
- ✗ 업로드 없음
- ✗ 가입 없음
- ✗ 워터마크 없음
- ✓ 오프라인 동작
- ✓ 오픈 소스
## 업로드하지 않고 이미지 크기를 바꾸는 방법
1. **이미지를 고릅니다.** 선택 영역에 끌어다 놓거나 직접 골라 주세요. 브라우저가 디스크에서 곧바로 읽습니다. 그동안 어디로도 아무것도 나가지 않습니다.
2. **원한다면 자릅니다.** 상자는 사진 전체에서 시작하므로, 그대로 두면 아무것도 잘리지 않습니다. 끌어서 옮기거나 비율을 고정하세요. 프로필 사진이면 1:1, 스토리면 9:16, 썸네일이면 16:9입니다. "최대"를 누르면 들어맞는 가장 큰 상자가 잡히고요. 이미지마다 자기 상자를 따로 갖습니다. 목록의 아무 줄이나 누르면 그 이미지 위에 그리게 됩니다. 전부 같은 구도로 잡아야 한다면 버튼 하나가 그것도 해 줍니다.
3. **어떤 크기로 나올지 말합니다.** 너비만, 높이만, 또는 둘 다. 세로 사진과 가로 사진을 서로 같은 크기로 맞춰 주는 긴 변 기준. 아니면 그냥 퍼센트. 둘 중 한 칸을 비워 두면 사진이 자기 비율을 지킵니다.
4. **형식을 고르고 버튼을 누릅니다.** 파일이 들어온 형식을 그대로 두거나, 전부 JPEG나 PNG, WebP로 쓰세요. 결과마다 무엇이 되었고 얼마나 작아졌는지가 적힙니다. 하나를 누르면 원래 크기로 열리면서 뒤에 깔린 수치들과 비교할 원본이 함께 나옵니다. 여러 장은 zip 하나로 내려옵니다.
## 자세한 설명
[이미지를 망치지 않고 크기를 바꾸는 방법](https://abox.tools/ko/가이드/이미지-크기-바꾸기/): 픽셀 크기를 바꿀 때 사진에 무슨 일이 일어나는지. 줄이는 것은 안전하고 늘리는 것은 그렇지 않은 이유, 상자의 비율이 맞지 않을 때 할 일, 그리고 대신 잘라내야 할 때.
## 상자 속 다른 도구
- [HEIC를 JPG로](https://abox.tools/ko/heic-jpg-변환/): 아이폰이 만드는 사진을, 아무 데서나 열리는 형식으로.
- [증명사진 만들기](https://abox.tools/ko/증명사진-만들기/): 나라를 고르세요. 그 나라의 규정을 그대로 적용합니다.
- [이미지 스택](https://abox.tools/ko/이미지-스택/): 스무 장을 한 장으로. 스무 번의 업로드도, RAW 변환기도 없이.
- [이미지 가리기](https://abox.tools/ko/이미지-가리기/): 가린 부분은 파일에서 지워집니다. 파일 안에 숨겨 두는 것이 아닙니다.
## 자주 묻는 질문
### 제 이미지가 어딘가로 업로드되나요?
아닙니다. 파일을 디코딩하고 자르고 크기를 바꾸고 쓰는 일은 내 기기에서 도는 내 브라우저가 하고, 브라우저에 이미 들어 있는 JPEG, PNG, WebP 인코더를 씁니다. 이 도구에는 네트워크 기능이 하나도 없어서 무언가를 가져오지도, 보내지도 않습니다. 이 페이지의 `Content-Security-Policy`에 연결해도 되는 주소가 전부 적혀 있는데, 그중 이 사이트 것은 하나도 없습니다.
### 너비만 주고 높이를 주지 않으면 어떻게 되나요?
높이는 사진 자기 비율을 따라갑니다. 대개 그게 원하던 것이죠. "가로 1920"은 "가로 1920, 세로는 거기 맞춰서"라는 뜻이니까요. 둘 다 채우면 그 둘이 사진의 비율과 어긋날 수 있는데, "비율이 어긋나면" 선택지가 나타나는 것은 그때뿐입니다. 상자 안에 맞추기, 채우고 넘치는 부분 잘라내기, 배경으로 여백 채우기, 아니면 늘여서 찌그러짐을 감수하기 중에서 고르시면 됩니다.
### 크기를 줄이면 화질이 떨어지나요?
작게 만드는 것은 눈에 띄는 방식으로는 떨어지지 않습니다. 나가는 픽셀보다 들어오는 픽셀이 많으니 남는 디테일은 진짜 디테일이니까요. 크게 만드는 것은 애초에 찍히지 않은 것을 만들어 낼 수 없습니다. 결과는 더 선명한 사본이 아니라 더 흐릿한 사본이고요. 그래서 "원본보다 크게 만들지 않음"이 기본으로 켜져 있습니다. 대가를 조금 치르는 것은 그다음의 재인코딩인데, 형식이 JPEG나 WebP일 때이고 화질 슬라이더로 그만큼을 조절합니다.
### 이미지마다 다르게 자를 수 있나요?
됩니다. 그게 기본입니다. 목록의 모든 이미지가 자기 픽셀 기준의 자기 상자를 갖고, 줄을 누르면 그 이미지가 자기 상자와 자기 고정 비율을 달고 미리보기에 올라옵니다. 하나에 한 일이 다른 것에 영향을 주지 않습니다. 모든 상자는 사진 전체에서 시작하므로, 한 번도 그리지 않은 이미지는 전혀 잘리지 않습니다.
### 여러 장을 한 번에 똑같이 자를 수도 있나요?
됩니다. 미리보기 아래 버튼으로요. 다른 모든 이미지에 같은 상대 영역, 그러니까 자기 너비와 높이의 같은 비율을 줍니다. 크기가 다 같은 스크린샷이나 내보내기 묶음이라면 결과적으로 정확히 같은 상자이고, 페이지가 그렇다고 알려 줍니다. 비율을 고정해 두었다면 대신 그 영역 안에 들어가는 그 비율의 가장 큰 상자를 각자에게 줍니다. 그래서 1:1을 누르고 그 버튼을 누르면 세로와 가로가 섞인 폴더에서 정사각형이 나옵니다. 그 뒤에도 모든 상자는 계속 고칠 수 있습니다.
### 어떤 형식을 읽고 쓸 수 있나요?
브라우저가 디코딩할 수 있는 것은 다 읽습니다. 실제로는 JPEG, PNG, WebP, GIF, BMP이고, 요즘 브라우저 대부분에서는 AVIF까지 읽습니다. 쓰는 쪽은 JPEG, PNG, WebP인데, 브라우저에 들어 있는 인코더가 그것뿐이기 때문입니다. "형식 유지"에서는 JPEG는 JPEG로, PNG는 PNG로 남습니다. 브라우저가 쓰지 못하는 GIF나 BMP 같은 것은 PNG로 나오는데, 투명도와 단색 면을 온전히 지키는 쪽이 그것이기 때문입니다.
### JPEG로 저장하면 투명한 부분은 어떻게 되나요?
배경색으로 채워집니다. JPEG에는 그걸 담을 알파 채널이 없기 때문입니다. 색은 직접 고르실 수 있고 기본값은 흰색인데, 대부분이 원하는 것이자 거의 모든 다른 도구가 말없이 하는 일이기도 합니다. 여백을 채울 때도 같은 색을 씁니다. PNG나 WebP로 저장하면 투명도가 손상 없이 그대로 넘어갑니다.
### EXIF와 GPS 정보도 지워지나요?
실제로 손대는 파일에서는 부수적으로 지워집니다. 자르거나 크기를 바꾼다는 것은 사진을 픽셀로 디코딩했다가 그 픽셀을 다시 인코딩한다는 뜻인데, 픽셀로 가득한 캔버스에는 태그가 붙어 있지 않아서 위치와 카메라 모델, 촬영 시각이 새 파일에는 아예 쓰이지 않습니다. 전혀 바꾸지 않는 파일은 경우가 다릅니다. 태그까지 통째로, 바이트 그대로 돌아오니까요. 메타데이터만 없애고 사진은 그대로 두고 싶다면 [EXIF 확인 및 제거](https://abox.tools/ko/exif-정보-삭제/)를 쓰세요. 다시 압축하지 않고 컨테이너만 새로 씁니다.
### 이미지 압축 도구와는 무엇이 다른가요?
이 도구는 크기를 다룹니다. 픽셀을 몇으로 하고 싶은지 말하면 그렇게 해 줍니다. [이미지 압축](https://abox.tools/ko/이미지-압축/)은 용량을 다룹니다. 몇 킬로바이트까지 허용되는지 말하면 거기 들어맞는 가장 높은 화질을 찾고, 화질만으로 닿지 못할 때만 크기를 줄입니다. "가로 1200픽셀"이라는 말을 들었다면 여기가 맞고, "500KB 이하"라는 말을 들었다면 저쪽이 더 가깝게 데려다줍니다.
### 무료인가요? 가입해야 하나요?
무료이고 계정도, 로그인도, 체험판도, 워터마크도 없습니다. 파일 개수나 용량 제한도 없습니다. 그 값을 치를 서버가 없으니까요. 작업은 내 기기에서 일어납니다. 이 사이트는 광고로 유지되는데, 그 광고에도 내 이미지에 관한 것은 넘어가지 않습니다.
### 오프라인에서도 되나요?
됩니다. 페이지를 한 번 불러온 다음 인터넷을 끊어도 계속 동작합니다. 아무것도 업로드되지 않는다는 가장 간단한 증명이기도 하고요. 이미지를 어딘가로 보내서 크기를 바꾸는 도구라면 선을 뽑는 순간 멈춰 버릴 테니까요.
## 이 약속을 직접 확인하는 방법
- **이미지는 나갈 곳이 없습니다.** 이 페이지가 연결해도 되는 주소는 Content-Security-Policy에 모두 적혀 있는데, 그중 이 사이트 것은 하나도 없습니다. 파일이 모일 만한 수신 지점이 없고, 설령 있더라도 거기로 파일을 보낼 코드가 없습니다.
- **여기서는 아무것도 가져오지 않습니다.** `src/` 어디에도 `fetch`도, `XMLHttpRequest`도, `sendBeacon`도 없습니다. 크기 조절은 캔버스 위의 `drawImage` 하나와 `canvas.toBlob` 하나가 전부입니다. 브라우저에 이미 설치되어 있는 스케일러와 인코더예요.
- **바꿔 달라고 하지 않은 파일은 바뀌지 않습니다.** 자르기도, 크기 조절도, 형식 변경도 없다면 고르신 파일이 다시 저장되지 않고 바이트 그대로 되돌아옵니다. 예의로 하는 일이 아닙니다. 이 도구가 사진을 몰래 다시 인코딩하거나, 그냥 들여다보려던 사진의 메타데이터를 슬쩍 떨어뜨릴 수 없는 이유입니다.
- **구글이 불러오는 것과, 구글에게 주지 않는 것.** 광고와 측정 스크립트는 구글에서, 후원 버튼은 Buy Me a Coffee에서 옵니다. 어느 쪽에도 내 사진에 관한 것은 넘어가지 않습니다. 파일을 읽고 자르고 크기를 바꾸고 쓰는 코드는 한 줄도 빠짐없이 이 출처에서 제공되고 저장소에 공개되어 있습니다.
- **오프라인에서도 동작합니다.** 네트워크를 끊어도 도구는 그대로입니다. 애초에 네트워크를 쓰는 단계가 없었으니까요. 가장 간단한 증거입니다.
**직접 확인해 보세요.** 위에 적은 어느 것도 그냥 믿으실 필요는 없습니다. 이 페이지는 저장소 안의 템플릿과 설정을 빌드 스크립트가 찍어 낸 결과이고, 그 스크립트는 누구나 읽고 직접 돌려 볼 수 있습니다. 결과물은 `dist` 브랜치에 그대로 올라가 있고요. 그래서 실제로 제공되는 파일과 소스를 빌드한 결과를 나란히 놓고 비교해 보실 수 있습니다: https://github.com/A-Box-of-Tools/website
먼저 읽어 볼 파일을 꼽자면, Content-Security-Policy는 `config/site.toml`, 무엇이 남고 얼마나 큰 결과가 나올지를 정하는 산술은 `src/geometry.js`, 자르기와 크기 조절을 한꺼번에 해내는 `drawImage` 호출 하나는 `src/codecs.js`에 있습니다.
업로드하지 않고 이미지 크기를 바꾸는 방법
이미지를 고릅니다. 선택 영역에 끌어다 놓거나 직접 골라 주세요. 브라우저가 디스크에서 곧바로 읽습니다. 그동안 어디로도 아무것도 나가지 않습니다.
원한다면 자릅니다. 상자는 사진 전체에서 시작하므로, 그대로 두면 아무것도 잘리지 않습니다. 끌어서 옮기거나 비율을 고정하세요. 프로필 사진이면 1:1, 스토리면 9:16, 썸네일이면 16:9입니다. "최대"를 누르면 들어맞는 가장 큰 상자가 잡히고요. 이미지마다 자기 상자를 따로 갖습니다. 목록의 아무 줄이나 누르면 그 이미지 위에 그리게 됩니다. 전부 같은 구도로 잡아야 한다면 버튼 하나가 그것도 해 줍니다.
어떤 크기로 나올지 말합니다. 너비만, 높이만, 또는 둘 다. 세로 사진과 가로 사진을 서로 같은 크기로 맞춰 주는 긴 변 기준. 아니면 그냥 퍼센트. 둘 중 한 칸을 비워 두면 사진이 자기 비율을 지킵니다.
형식을 고르고 버튼을 누릅니다. 파일이 들어온 형식을 그대로 두거나, 전부 JPEG나 PNG, WebP로 쓰세요. 결과마다 무엇이 되었고 얼마나 작아졌는지가 적힙니다. 하나를 누르면 원래 크기로 열리면서 뒤에 깔린 수치들과 비교할 원본이 함께 나옵니다. 여러 장은 zip 하나로 내려옵니다.
자세한 설명
이미지를 망치지 않고 크기를 바꾸는 방법픽셀 크기를 바꿀 때 사진에 무슨 일이 일어나는지. 줄이는 것은 안전하고 늘리는 것은 그렇지 않은 이유, 상자의 비율이 맞지 않을 때 할 일, 그리고 대신 잘라내야 할 때.
아닙니다. 파일을 디코딩하고 자르고 크기를 바꾸고 쓰는 일은 내 기기에서 도는 내 브라우저가 하고, 브라우저에 이미 들어 있는 JPEG, PNG, WebP 인코더를 씁니다. 이 도구에는 네트워크 기능이 하나도 없어서 무언가를 가져오지도, 보내지도 않습니다. 이 페이지의 Content-Security-Policy에 연결해도 되는 주소가 전부 적혀 있는데, 그중 이 사이트 것은 하나도 없습니다.
너비만 주고 높이를 주지 않으면 어떻게 되나요?
높이는 사진 자기 비율을 따라갑니다. 대개 그게 원하던 것이죠. "가로 1920"은 "가로 1920, 세로는 거기 맞춰서"라는 뜻이니까요. 둘 다 채우면 그 둘이 사진의 비율과 어긋날 수 있는데, "비율이 어긋나면" 선택지가 나타나는 것은 그때뿐입니다. 상자 안에 맞추기, 채우고 넘치는 부분 잘라내기, 배경으로 여백 채우기, 아니면 늘여서 찌그러짐을 감수하기 중에서 고르시면 됩니다.
크기를 줄이면 화질이 떨어지나요?
작게 만드는 것은 눈에 띄는 방식으로는 떨어지지 않습니다. 나가는 픽셀보다 들어오는 픽셀이 많으니 남는 디테일은 진짜 디테일이니까요. 크게 만드는 것은 애초에 찍히지 않은 것을 만들어 낼 수 없습니다. 결과는 더 선명한 사본이 아니라 더 흐릿한 사본이고요. 그래서 "원본보다 크게 만들지 않음"이 기본으로 켜져 있습니다. 대가를 조금 치르는 것은 그다음의 재인코딩인데, 형식이 JPEG나 WebP일 때이고 화질 슬라이더로 그만큼을 조절합니다.
이미지마다 다르게 자를 수 있나요?
됩니다. 그게 기본입니다. 목록의 모든 이미지가 자기 픽셀 기준의 자기 상자를 갖고, 줄을 누르면 그 이미지가 자기 상자와 자기 고정 비율을 달고 미리보기에 올라옵니다. 하나에 한 일이 다른 것에 영향을 주지 않습니다. 모든 상자는 사진 전체에서 시작하므로, 한 번도 그리지 않은 이미지는 전혀 잘리지 않습니다.
여러 장을 한 번에 똑같이 자를 수도 있나요?
됩니다. 미리보기 아래 버튼으로요. 다른 모든 이미지에 같은 상대 영역, 그러니까 자기 너비와 높이의 같은 비율을 줍니다. 크기가 다 같은 스크린샷이나 내보내기 묶음이라면 결과적으로 정확히 같은 상자이고, 페이지가 그렇다고 알려 줍니다. 비율을 고정해 두었다면 대신 그 영역 안에 들어가는 그 비율의 가장 큰 상자를 각자에게 줍니다. 그래서 1:1을 누르고 그 버튼을 누르면 세로와 가로가 섞인 폴더에서 정사각형이 나옵니다. 그 뒤에도 모든 상자는 계속 고칠 수 있습니다.
어떤 형식을 읽고 쓸 수 있나요?
브라우저가 디코딩할 수 있는 것은 다 읽습니다. 실제로는 JPEG, PNG, WebP, GIF, BMP이고, 요즘 브라우저 대부분에서는 AVIF까지 읽습니다. 쓰는 쪽은 JPEG, PNG, WebP인데, 브라우저에 들어 있는 인코더가 그것뿐이기 때문입니다. "형식 유지"에서는 JPEG는 JPEG로, PNG는 PNG로 남습니다. 브라우저가 쓰지 못하는 GIF나 BMP 같은 것은 PNG로 나오는데, 투명도와 단색 면을 온전히 지키는 쪽이 그것이기 때문입니다.
JPEG로 저장하면 투명한 부분은 어떻게 되나요?
배경색으로 채워집니다. JPEG에는 그걸 담을 알파 채널이 없기 때문입니다. 색은 직접 고르실 수 있고 기본값은 흰색인데, 대부분이 원하는 것이자 거의 모든 다른 도구가 말없이 하는 일이기도 합니다. 여백을 채울 때도 같은 색을 씁니다. PNG나 WebP로 저장하면 투명도가 손상 없이 그대로 넘어갑니다.
EXIF와 GPS 정보도 지워지나요?
실제로 손대는 파일에서는 부수적으로 지워집니다. 자르거나 크기를 바꾼다는 것은 사진을 픽셀로 디코딩했다가 그 픽셀을 다시 인코딩한다는 뜻인데, 픽셀로 가득한 캔버스에는 태그가 붙어 있지 않아서 위치와 카메라 모델, 촬영 시각이 새 파일에는 아예 쓰이지 않습니다. 전혀 바꾸지 않는 파일은 경우가 다릅니다. 태그까지 통째로, 바이트 그대로 돌아오니까요. 메타데이터만 없애고 사진은 그대로 두고 싶다면 EXIF 확인 및 제거를 쓰세요. 다시 압축하지 않고 컨테이너만 새로 씁니다.
이미지 압축 도구와는 무엇이 다른가요?
이 도구는 크기를 다룹니다. 픽셀을 몇으로 하고 싶은지 말하면 그렇게 해 줍니다. 이미지 압축은 용량을 다룹니다. 몇 킬로바이트까지 허용되는지 말하면 거기 들어맞는 가장 높은 화질을 찾고, 화질만으로 닿지 못할 때만 크기를 줄입니다. "가로 1200픽셀"이라는 말을 들었다면 여기가 맞고, "500KB 이하"라는 말을 들었다면 저쪽이 더 가깝게 데려다줍니다.
무료인가요? 가입해야 하나요?
무료이고 계정도, 로그인도, 체험판도, 워터마크도 없습니다. 파일 개수나 용량 제한도 없습니다. 그 값을 치를 서버가 없으니까요. 작업은 내 기기에서 일어납니다. 이 사이트는 광고로 유지되는데, 그 광고에도 내 이미지에 관한 것은 넘어가지 않습니다.
오프라인에서도 되나요?
됩니다. 페이지를 한 번 불러온 다음 인터넷을 끊어도 계속 동작합니다. 아무것도 업로드되지 않는다는 가장 간단한 증명이기도 하고요. 이미지를 어딘가로 보내서 크기를 바꾸는 도구라면 선을 뽑는 순간 멈춰 버릴 테니까요.