본문 바로가기
C.W.K.
Stream
Lesson 01 of 05 · published

Icon과 branding — 실제로 중요한 네 PNG

~9 min · icons, branding, manifest, assets

Level 0Extension 입덕
0 XP0/56 lessons0/13 achievements
0/100 XP to next level100 XP to go0% complete
"Chrome은 icon을 다섯 자리에 네 가지 크기로 띄워. 128 짜리 하나를 16으로 줄이면 잡음처럼 뭉개지고. 이 lesson에서 제대로 된 PNG 넷을 만들고, 곁다리로 꺼진 상태의 회색 처리, 다크 모드, Web Store 용 이미지까지 짚을게."

Chrome이 요청하는 네 size

  • 16 — chrome://extensions URL 옆 toolbar favicon, 관련 시 URL bar.
  • 32 — Windows scaling과 일부 platform-specific surface.
  • 48 — extension 관리 page (chrome://extensions card).
  • 128 — Chrome Web Store listing, install prompt, 가끔 New Tab page에서.

네 크기를 각각 따로 만들어 줘. Chrome이 한 장을 줄여 쓸 수도 있지만, 눈에 띄게 못생겨져. 특히 128의 부드럽게 다듬은 디테일이 16으로 가면 죽처럼 뭉개지거든.

크기마다 다르게 그려

16이 제일 어려워. 다 합쳐 250 픽셀도 안 되는데, 어두운 UI 옆에 놓이는 일도 잦고. 현실적인 제약이 이래:

  • 또렷한 실루엣 하나로 가. 요소가 여럿인 로고는 16에서 그냥 사라져. 제일 알아보기 쉬운 형태 하나만 골라.
  • 흰 바탕에서도 어두운 바탕에서도 대비가 세야 해. Chrome UI는 다크 모드를 따라 뒤집히니까.
  • 가는 선은 피해. 16에서 1 픽셀 선은 회색 얼룩으로 뭉개져. 최소 2 픽셀로 가.
  • 진짜 자리에서 확인해. 다크 모드 Mac에서 chrome://extensions를 열어 봐. icon이 배경에 묻히면 실루엣을 더 세게 잡아야 해.

128은 자리가 제일 넉넉한 대신 제일 많이 노출돼. Web Store 화면에서 원래 크기로 보이거든. 이걸 기준 그림으로 삼고, 작은 크기들은 여기서 파생시켜.

Manifest 선언

icon을 적는 자리가 둘이야:

  • icons (맨 바깥) — chrome://extensions 랑 Web Store가 봐. 크기별로 key를 나눈 object 야.
  • action.default_icon — toolbar가 봐. 보통 바깥 icons 랑 똑같이 적어.

둘 다 같은 경로를 적어도 돼. Chrome이 항목을 따로 읽을 뿐이지 파일까지 두 벌 필요한 건 아니야.

꺼진 상태

chrome.action.disable(tabId)를 부르면 Chrome이 icon을 알아서 흑백으로 만들어 줘. 꺼진 상태용 그림을 따로 준비할 필요가 없어. 기본 변환이 웬만한 icon 에는 잘 먹거든. 다만 대비가 약한 색을 써서 흑백으로 가면 형태가 사라지는 icon 이라면, 손으로 다듬은 회색 버전을 만들어 setIcon으로 직접 갈아 줘.

Dark mode

Chrome은 다크 모드라고 icon을 알아서 뒤집어 주지 않아. 투명 배경에 어두운 그림을 얹어 놨다면 어두운 toolbar 에선 그냥 안 보여. 방법은 둘이야:

  • 선으로 그리기 — 면을 꽉 채우지 말고 주로 선으로 그려. 그러면 밝은 데서도 어두운 데서도 통해.
  • Package variant — extension page가 자기 color scheme을 보고 worker에 packaged icon 교체를 요청할 수는 있어. 하지만 service worker 자체에는 window.matchMedia가 없고, extension page의 scheme도 toolbar theme를 오래 대표하는 API가 아니야. 한 벌로 양쪽에서 읽히는 adaptive icon을 우선해.

ClipDeck v1은 16에 선으로 그리는 쪽을 택할 거야. 클립 모양 윤곽선에 브랜드 색만 얹고 안은 비워 둬. 밝은 Chrome 에서도 어두운 Chrome 에서도 깔끔하게 읽혀.

Web Store asset pack

Chrome Web Store는 extension icon 말고도 따로 올릴 그림을 더 달라고 해:

  • 128 × 128 store icon — manifest의 128 이랑 같은 거.
  • 440 × 280 작은 홍보 타일 — store 검색 결과에 뜨는 그림.
  • 1400 × 560 큰 홍보 배너 — 추천 자리에 쓰여. 개인이 만든 extension이 거기 걸릴 일은 드물지만 그래도 만들어 둬.
  • 스크린샷 — 1280 × 800 이나 640 × 400. 최소 하나, 최대 다섯 장. 사람들이 제일 많이 보는 그림이니까 마케팅이라고 생각하고 만들어.

제출하기 전에 스크린샷부터 챙겨 둬. Web Store 심사자는 스크린샷 품질을 '이게 진짜 굴러가는 software 인가' 를 재는 잣대로 써. manifest만 달랑 올린 등록은 이 extension이 뭘 하는지 아무것도 전하지 못해서 반려돼.

PNG 넷 (16 / 32 / 48 / 128), 또렷한 실루엣 하나, 밝은 데서도 어두운 데서도 살아남는 대비. 128이 기준 그림이고, 16은 그 디자인이 toolbar 크기에서도 버티는지 재는 시험대야.
원본 하나에서 네 크기를 뽑아. 벡터 도구 (Figma, Sketch, Illustrator)에서 128 이상으로 한 번만 그려. 그다음 캔버스 크기를 네 번 지정해서 각각 내보내고, 하나씩 따로 다듬어. 16은 보통 실루엣을 손으로 좀 만져 줘야 읽혀. 픽셀까지 맞춘 16을 만드는 데 10 분이면 돼. "그냥 128을 줄이지 뭐" 로는 그 10 분도 못 아껴.

Code

manifest.json — top-level과 action icon 선언 둘 다·json
{
  "icons": {
    "16": "icons/16.png",
    "32": "icons/32.png",
    "48": "icons/48.png",
    "128": "icons/128.png"
  },
  "action": {
    "default_icon": {
      "16": "icons/16.png",
      "32": "icons/32.png",
      "48": "icons/48.png",
      "128": "icons/128.png"
    },
    "default_title": "ClipDeck",
    "default_popup": "popup.html"
  }
}
Shell — icon variant 빠른 생성 (16은 따로 손-tune)·bash
# ImageMagick 통해 1024 master 에서 네 PNG size 생성
magick clipdeck-master.png -resize 128x128 icons/128.png
magick clipdeck-master.png -resize 48x48 icons/48.png
magick clipdeck-master.png -resize 32x32 icons/32.png
magick clipdeck-master.png -resize 16x16 icons/16.png

# 더 똑똑: 16 을 따로 design (손-tune silhouette), 다음 preview 위해서만 scale up
# magick clipdeck-master-16-hand.png icons/16.png

External links

Exercise

갖고 있는 원본에서 16/32/48/128 PNG를 뽑아 (없으면 저작권 자유로운 favicon으로 임시본을 만들어도 돼). clipdeck/icons/에 넣고, manifest.json의 맨 바깥 icons 랑 action.default_icon 양쪽에 적어 (첫 번째 code block). Reload 하고 크기가 제자리에 잘 들어갔는지 네 군데서 확인해 — (1) toolbar는 16/32를 쓰고, (2) chrome://extensions 카드는 48을, (3) 그 Details 화면은 128을, (4) chrome://extensions/?id=... 를 열었을 때 주소창은 16을 써. 이 중 하나라도 흐릿하거나 늘어나 보이면 엉뚱한 크기가 올라간 거야. manifest 경로를 다시 보고, 각 PNG가 정말 그 해상도로 저장돼 있는지 확인해.
Hint
고해상도 Mac에서 toolbar icon이 흐릿하면 32 자리에 16을 키워 넣었을 가능성이 커. 원본에서 32를 다시 뽑아. chrome://extensions 카드가 계단처럼 보이면 48이 문제고. Chrome은 자리마다 어떤 크기를 쓸지 정해 놓고 고르니까, 이상한 자리를 짚은 다음 manifest가 거기 쓰겠다고 적어 둔 파일을 찾아가면 돼. Chrome Web Store는 적어 둔 크기랑 실제 픽셀이 안 맞는 제출을 반려해. 결국 제출까지 가려면 크기를 정직하게 맞춰 두는 게 중요해.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.