Cách Tôi Xây Dựng Hệ Thống VI — Sự Hòa Quyện Bất Đối Xứng Giữa Thiết Kế và Code
Bắt đầu từ hai file PNG, đây là toàn bộ quá trình tự động tạo ra một hệ thống nhận diện thương hiệu hoàn chỉnh bằng Python.
1. VI Là Gì? Tại Sao Cần Làm?
VI (Visual Identity — Hệ thống nhận diện thương hiệu) là "bộ quy chuẩn ngôn ngữ hình ảnh" mà thương hiệu dùng để giao tiếp ra bên ngoài. Nó trả lời một câu hỏi cốt lõi: Khi thương hiệu này xuất hiện ở bất kỳ đâu, nó phải trông như thế nào?
Một bộ VI hoàn chỉnh tối thiểu bao gồm:
| Hạng mục | Nội dung |
|---|---|
| Logo gốc | Phiên bản nền trong suốt, các phiên bản nền màu |
| Biến thể logo | Ngang, dọc, vuông, tròn |
| Bảng màu | Thông số HEX / RGB / CMYK |
| Quy chuẩn font | Font chính/phụ, gợi ý cỡ chữ |
| Quy tắc sử dụng | Vùng bảo vệ, các hành vi bị cấm |
| Ví dụ ứng dụng | Danh thiếp, tiêu đề thư, avatar mạng xã hội |
Không có VI, mỗi designer, kỹ sư, nhân viên marketing "tự do sáng tạo", thương hiệu dần mất đi hình dạng nhất quán. Có VI, chỉ cần một thư mục là ai cũng có thể tạo ra những ứng dụng thương hiệu đồng nhất.
2. Xuất Phát Điểm: Hai File PNG
Nguyên liệu thô của dự án này chỉ là hai file PNG:

Cả hai đều là logo thương hiệu Ascentek — nội dung giống nhau nhưng kích thước hơi khác nhau.
Phân tích cấu trúc Logo:
- Bên trái: Biểu tượng máy bay giấy / mũi tên hình chữ A, tạo từ hai tam giác
- Tam giác chính: màu Teal (
#03dcd0) - Tam giác tối: gần đen (
#181c20), tạo chiều sâu/khối lượng
- Tam giác chính: màu Teal (
- Bên phải: Tên thương hiệu "Ascentek" bằng font sans-serif màu tối
- Nền: Trong suốt (RGBA)
3. Trích Xuất Yếu Tố Thương Hiệu
3.1 Trích xuất bảng màu
python
def get_dominant_colors(img, k=3):
pixels = [px[:3] for px in img.getdata() if px[3] > 0]
small = Image.new('RGB', (len(pixels), 1))
small.putdata(pixels)
pal = small.convert('P', palette=Image.ADAPTIVE, colors=k)
return pal.getpalette()[:k*3]Kết quả:
| Vai trò | HEX | RGB |
|---|---|---|
| Primary | #03dcd0 | 3, 220, 208 |
| Secondary | #204b4c | 32, 75, 76 |
| Dark / Text | #181c20 | 24, 28, 32 |
3.2 Phát hiện ranh giới Icon
Thách thức: Tự động tìm ra điểm kết thúc của biểu tượng và điểm bắt đầu của chữ.
Phương pháp đúng: Tìm khoảng cách rộng nhất
python
def find_icon_right(img):
# Khoảng cách giữa icon và chữ luôn rộng hơn bất kỳ khe hở nào bên trong icon
return max(gaps, key=width)[start_x]4. Lựa Chọn Công Cụ
| Công cụ | Mục đích | Lý do chọn |
|---|---|---|
| Python 3 | Ngôn ngữ script | Đa nền tảng, hệ sinh thái phong phú |
| Pillow (PIL) | Xử lý hình ảnh | Thuần Python, hỗ trợ RGBA đầy đủ |
| Montserrat | Font thương hiệu | Phong cách khớp logo gốc, giấy phép SIL |
5. Kỹ Thuật Cốt Lõi: Thích Ứng Màu Sắc
5.1 Thích ứng nền tối
python
def adapt_dark(img):
for r, g, b, a in data:
if a < 10:
out.append((0, 0, 0, 0)) # Trong suốt: giữ nguyên
elif r < 80 and g < 80 and b < 80:
out.append((255, 255, 255, a)) # Tối: đổi thành trắng
else:
out.append((r, g, b, a)) # Teal: giữ nguyên5.2 Bóng đơn sắc
python
def silhouette(img, color_rgb):
alpha = img.split()[3]
base = Image.new('RGBA', img.size, color_rgb + (255,))
base.putalpha(alpha)
return base6. Logic Tạo Biến Thể Logo


7. Thiết Kế Ứng Dụng
7.1 Danh thiếp


Danh thiếp đã được tạo ra, nhưng kích thước và bố cục là chuyện chủ quan — mỗi người có quan điểm khác nhau nên không bàn thêm ở đây.
7.2 Tiêu đề thư (Letterhead)
Quy cách: A4 @ 300 dpi = 2480×3508 px. Logo trong header cần dùng phiên bản thích ứng nền tối (adapt_dark).
8. Những Cạm Bẫy Khi Làm Việc Với AI
Bẫy 1: Chữ ma (Ghost Text)
Giải pháp: Không thêm chữ lên logo đã có chữ sẵn.
Bẫy 2: Logo vô hình trên nền tối
Giải pháp: Hàm adapt_dark — chuyển pixel tối thành trắng, giữ nguyên teal.
Bẫy 3: Cắt icon không hoàn chỉnh
Giải pháp: Tìm khoảng cách rộng nhất thay vì khoảng trống đầu tiên.
Bẫy 4: Circle Primary vô hình
Giải pháp: Chuyển icon thành bóng trắng trước, rồi đặt lên nền teal.
Bẫy 5: Thẩm mỹ là điều khó phán xét tuyệt đối
Cái đẹp là chủ quan — hãy tự phán xét theo gu của mình. Cá nhân tôi thấy logo trên danh thiếp được tạo ra hơi lớn so với tổng thể.
9. Cấu Trúc Output Cuối Cùng
VI-ClaudeVersion/
├── logo/ # Tất cả biến thể Logo (PNG + SVG)
├── applications/ # Ví dụ ứng dụng
├── palette.txt
├── VI_GUIDELINES.md
└── generate_vi.py10. Workflow Này Có Thể Tái Sử Dụng Ở Đâu?
Chỉ cần sửa hai dòng đầu trong generate_vi.py:
python
LOGO_SRC = 'logo_moi_cua_ban.png'
BRAND = 'TenThuongHieu'Chạy python generate_vi.py — toàn bộ 28 file được tạo ra trong một lần.
11. Tổng Kết Tư Duy Cốt Lõi
Bản chất của việc xây dựng VI không phải là "vẽ hình đẹp", mà là đặt ra các quy tắc và làm cho chúng có thể được thực thi.
- Đừng làm thủ công những gì có thể tự động hóa
- Đọc sự thật từ pixel
- Viết các quyết định thiết kế thành hàm
- Code là tài liệu
- Một lệnh là tái tạo được
Hệ thống VI tốt nhất là hệ thống mà bất kỳ ai cũng có thể sử dụng đúng cách mà không cần tác giả gốc có mặt.
Bí mật thú vị: Logo gốc cũng được AI tạo ra nhiều phiên bản, rồi sếp chọn một cái…