PerfectVector
Bởi Jay Lee

Vì sao SVG bị vỡ hạt và cách khắc phục

SVG thực sự vẫn có thể lộ pixel: ảnh nhúng trong tệp, trình xem raster hóa hoặc độ mềm ở kích thước biểu tượng. Đây là cách chẩn đoán nhanh và sửa từng nguyên nhân.

11 phút đọc
Trên trang này

SVG lẽ ra co giãn sạch, nên khi vẫn xuất hiện mép dạng khối, hãy bắt đầu với ba nguyên nhân phổ biến. Tệp có thể chứa pixel thực tế, ứng dụng có thể raster hóa bản xem trước hoặc bản nhập, hoặc vector thực sự chỉ kết xuất mềm trên lưới pixel tí hon. Mỗi nguyên nhân có cách sửa khác nhau và chẩn đoán ngắn cho biết bạn đang gặp loại nào. Bài này không nói về logo PNG hoặc JPG vỡ hạt khi phóng lớn. Tệp đó chưa từng là SVG và vấn đề đó có cách sửa riêng.

Chẩn đoán trong 30 giây
  • Phóng thật lớn (500%+) trong hai trình xem. Lộ khối ở mọi trình xem hướng đến nội dung raster. Nếu chỉ một ứng dụng lộ khối, ứng dụng đó có lẽ đang raster hóa bản xem trước.
  • Mở SVG trong trình sửa văn bản. Thẻ <image> với khối data:image/png;base64,… dài nghĩa là “vector” của bạn là bitmap được bọc lại.
  • Dùng kiểm tra tệp để quyết định. Phóng lớn gợi nghi ngờ; phần tử <image> hoặc đối tượng ảnh chữ nhật xác nhận pixel nhúng.

Nguyên nhân 1: có pixel bên trong SVG

Đây là bẫy ảnh nhúng. SVG là định dạng vỏ chứa và đặc tả SVG 2 cho phép phần tử <image> nhúng hoặc tham chiếu nội dung raster. Nếu cần phân biệt PNG liên kết với dữ liệu nhúng hoặc SVG lồng, dùng kiểm tra SVG nội dung kết hợp. Công cụ có thể dùng khả năng đó theo nhiều cách:

  • Chuyển đổi giả. Một số công cụ “PNG sang SVG” không đồ gì cả. Chúng bọc bitmap trong thẻ <image> và trả lại với phần mở rộng .svg. Nó co giãn tệ như PNG gốc vì chính là PNG gốc.
  • Bản xuất raster hóa phần khó. Ứng dụng thiết kế xuất phần làm được thành đường dẫn và âm thầm raster hóa phần không làm được: bóng đổ, làm mờ, lưới chuyển sắc, vùng tô ảnh. Đó là cách logo sắc ở mọi nơi trừ một đoạn cong hoặc hiệu ứng, bí ẩn “vỡ hạt một phần” thường gặp trên diễn đàn thiết kế.
  • Nội dung ảnh chụp. Ảnh chụp không thành đường dẫn sạch, nên công cụ “chuyển” ảnh chụp sang SVG thường nhúng hoặc tạo bản xấp xỉ giảm bậc màu. Công cụ bản đồ còn chủ động làm vậy cho lớp sắc độ, điều hợp lý vì sắc độ vốn liên tục.
  • Vỏ bọc định dạng. Tệp có thể chứa dữ liệu vector mà ứng dụng này đọc được, ứng dụng khác không. Khi gặp dữ liệu không hiểu, ứng dụng dùng bản xem trước raster có sẵn, khiến bạn thấy pixel trong một chương trình còn chương trình khác hiển thị vector sạch.

Cách xác nhận: mở .svg trong trình sửa văn bản bất kỳ và tìm <image. Khối base64 là thủ phạm. Trong Inkscape hoặc Illustrator, bấm vùng mờ: nếu vùng chọn là một đối tượng “ảnh” chữ nhật thay vì đường dẫn, kết luận giống vậy. Đây là cùng kiểm tra phát hiện SVG giả từ công cụ AI và công cụ xuất, chỉ mất chưa đến một phút.

Cách sửa: pixel cần trở thành đường dẫn, nghĩa là thực sự vector hóa nội dung raster. Chạy ảnh gốc hoặc ảnh nhúng qua chuyển ảnh sang vector thực sự và thay phần tử <image> bằng kết quả đã đồ. Nếu nội dung nhúng là ảnh chụp, vector hóa có giới hạn riêng; đôi khi cách sửa đúng là chấp nhận raster ở nơi raster phù hợp.

Dấu hiệu ngay trong tệp
Tệp SVG mở trong trình sửa văn bản cho thấy thẻ ảnh với khối dữ liệu base64 dài thay vì phần tử đường dẫn vector
Vector thực sự gồm phần tử đường dẫn. Thẻ ảnh với khối base64 là bitmap mang phần mở rộng .svg.

Nguyên nhân 2: tệp ổn, trình xem đang raster hóa

Nếu trình duyệt hoặc Inkscape hiển thị đường dẫn sắc còn một ứng dụng lộ khối, hãy dừng chỉnh tệp. Quy trình nhập hoặc xem trước của ứng dụng đó là vấn đề:

  • Một số quy trình nhập ứng dụng raster hóa SVG ở kích thước nhập hoặc xem trước. Phóng ảnh đệm sau đó là phóng bitmap. Cách sửa phía ứng dụng là nhập hoặc kết xuất ở độ phân giải đích.
  • After Effects có thể liên tục raster hóa lớp vector khi lớp biến đổi; Adobe ghi nhận nút Continuously Rasterize cho lớp vector. Nếu chỉ bản xem trước composition trông thô, kiểm tra độ phân giải xem trước và nút lớp trước khi đổi SVG.
  • Illustrator có thể chủ động hiển thị tác phẩm qua Pixel Preview. Tắt View > Pixel Preview trước khi kết luận bản thân đường dẫn bị vỡ hạt.
  • Ảnh thu nhỏ và xem trước. Ảnh thu nhỏ trong trình quản lý tệp và xem nhanh là bản raster độ phân giải thấp. Chúng không nói gì về tệp.

Phép thử chung: mở cùng tệp trong trình duyệt hoặc Inkscape. Sắc ở đó nghĩa là SVG hợp lệ và cách sửa nằm ở thiết lập nhập, xem trước của ứng dụng khác.

Với tài nguyên trò chơi, kiểm tra quy trình nhập và raster hóa SVG trong Godot hoặc quy trình nhập SVG Unity cho trình biên tập và hệ thống UI của bạn trước khi cho rằng nguồn thiếu đường dẫn vector.

Nguyên nhân 3: vector thực sự mềm ở kích thước nhỏ

Biểu tượng thường ở 16 đến 24 pixel; ở kích thước đó, đường cong hoàn hảo về toán học phải rơi lên lưới pixel thô. Khử răng cưa chia pixel mép thành sắc xám và kết quả trông “hơi mờ”, đặc biệt với nét nhỏ, vị trí nửa pixel. Phóng lớn cho thấy mép vector hoàn toàn sắc, giúp biết đây không phải bẫy ảnh nhúng.

Cách sửa ở phía thiết kế: căn mép ngang, dọc vào pixel nguyên ở kích thước đích, giữ độ rộng nét theo pixel nguyên và ưu tiên bộ biểu tượng vẽ cho kích thước đang dùng. Dữ liệu đường dẫn quá chi tiết từ công cụ thiết kế có thể làm độ mềm tệ hơn ở kích thước tí hon; đường dẫn đơn giản hóa kết xuất dễ dự đoán hơn.

Nhìn nhanh nguyên nhân và cách sửa

Bạn thấy gìNguyên nhânCách sửa
Lộ khối ở mọi trình xem, tệp có phần tử <image>Ảnh raster nhúng trong SVGThực sự vector hóa nội dung, thay <image>
Sắc ở một đoạn cong, vỡ hạt ở đoạn khácBản xuất raster hóa hiệu ứng hoặc vùng tôDựng lại phần đó bằng đường dẫn hoặc vector hóa cả đồ họa
Sắc trong trình duyệt, vỡ hạt trong một ứng dụngỨng dụng raster hóa khi nhập hoặc xem trướcSửa thiết lập nhập/xem trước của ứng dụng, không sửa tệp
Sắc ở 100%, mờ khi làm biểu tượng nhỏĐộ mềm lưới pixel trên vector thựcCăn mép và nét theo pixel ở kích thước đích
Chỉ “vỡ hạt” trong ảnh thu nhỏRaster hóa xem trước độ phân giải thấpBỏ qua; kiểm tra bản kết xuất thực

Cách giữ SVG không chứa pixel

Phòng tránh chủ yếu ở thời điểm chuyển đổi hoặc xuất. Trước khi dựa vào SVG, kiểm tra bằng trình sửa văn bản một lần: phần tử <path> là tốt; khối <image> không phải vector. Khi chuyển ảnh, dùng công cụ đồ thay vì bọc và xác nhận bằng chọn từng hình. Khi xuất từ công cụ thiết kế, gộp hoặc mở rộng hiệu ứng thành đường dẫn trước, vì phần công cụ xuất không thể biểu diễn bằng vector sẽ được gửi dưới dạng pixel. Nhớ SVG thực sự là gì: phần mở rộng cam kết định dạng, không cam kết nội dung.

Quy trình này trong PerfectVector

PerfectVector tránh bẫy này: đồ ảnh thành đường dẫn thực sự, không bao giờ chỉ bọc ảnh. Tải PNG hoặc JPG và kết quả là hình chọn, đổi màu, phóng lớn được, mỗi màu là đối tượng chỉnh sửa riêng và không có phần tử <image> ở đâu trong tệp. Nếu vừa phát hiện “SVG” là bitmap bọc lại, hãy chuyển ảnh gốc đúng cách và kiểm tra đầu ra bằng cùng trình sửa văn bản. Thấy khác biệt một lần là cách nhanh nhất để tránh vướng lại. Những lần chuyển đầu miễn phí, không cần thẻ tín dụng.

Ảnh nhúng khi phóng lớn
Logo trong tệp SVG được phóng rất lớn, lộ khối pixel vì tệp chứa bitmap nhúng
Pixel bọc lại: phóng lớn lộ bitmap ẩn trong tệp .svg.
Vector thực khi phóng lớn
Cùng logo dưới dạng SVG thực sự vector hóa ở cùng mức phóng, có mép đường dẫn hoàn toàn sắc
Cùng logo thực sự được đồ thành đường dẫn: sắc ở mọi mức phóng, mép vẫn là hình học toán học.

Câu hỏi thường gặp

Vì sao SVG bị vỡ hạt khi phóng lớn? Chỉ phóng lớn không chứng minh SVG chứa pixel vì một số ứng dụng raster hóa bản xem trước. Mở trong trình duyệt hoặc Inkscape rồi kiểm tra nguồn có phần tử <image> hoặc chọn vùng mờ xem có phải đối tượng ảnh chữ nhật. Nếu xác nhận raster nhúng, vector hóa nội dung đó và thay phần tử ảnh.

Làm sao biết SVG có ảnh nhúng? Mở trong trình sửa văn bản bất kỳ và tìm <image. Chuỗi data:image/png;base64 dài là bitmap nhúng trong tệp. Bạn cũng có thể bấm vùng mờ trong Inkscape hoặc Illustrator: nếu chọn như một đối tượng ảnh chữ nhật thay vì đường dẫn, đó là ảnh nhúng.

Vì sao SVG vỡ hạt trong một ứng dụng nhưng ổn trong trình duyệt? Ứng dụng đang raster hóa. Bộ máy trò chơi raster hóa SVG ở kích thước nhập, bản xem trước After Effects raster hóa ở độ phân giải bố cục và một số ứng dụng mặc định kết xuất ảnh nhúng bằng nội suy dạng khối. Nếu trình duyệt hoặc Inkscape hiển thị sắc, tệp ổn; điều chỉnh thiết lập ứng dụng.

Tôi có thể sửa SVG chứa ảnh nhúng không? Có. Lấy raster gốc hoặc trích xuất ảnh nhúng, chạy qua công cụ vector hóa thực rồi thay phần tử ảnh bằng kết quả đã đồ. Nếu nội dung nhúng là ảnh chụp, hãy mong bản xấp xỉ vector cách điệu thay vì bản sao trung thực vì ảnh chụp không giảm thành đường dẫn sạch.

Vì sao biểu tượng SVG mờ ở kích thước nhỏ? Thường là độ mềm lưới pixel, không phải ảnh nhúng. Ở 16 đến 24 pixel, khử răng cưa biến mép lệch thành pixel xám. Căn mép và độ rộng nét theo pixel nguyên ở kích thước đích để biểu tượng sắc hơn. Phóng lớn để xác nhận bản thân đường dẫn sắc.

Chuyển PNG sang SVG có luôn tạo vector thực sự không? Không. Một số công cụ thực sự đồ ảnh thành đường dẫn, một số chỉ bọc PNG trong vỏ SVG. Đầu ra chỉ co giãn sạch trong trường hợp đầu. Kiểm tra mọi tệp chuyển đổi về thẻ ảnh và ưu tiên công cụ cho thấy hình chỉnh sửa được trong kết quả.

Nguồn tham khảo

  1. W3C: Nội dung nhúng SVG 2 — Định nghĩa phần tử <image> SVG và nội dung raster trong tài liệu SVG.
  2. Adobe Illustrator: Xem tác phẩm — Ghi nhận Pixel Preview và chế độ hiển thị khác.
  3. Adobe After Effects: Lớp — Ghi nhận nút Continuously Rasterize cho lớp vector.
  4. Adobe Illustrator: Tạo tác phẩm khớp pixel — Giải thích căn theo lưới pixel cho tác phẩm kích thước nhỏ.

Bạn nghi ngờ tệp đang làm? Thử phóng lớn rồi chuyển ảnh gốc thành SVG thực sự dựa trên đường dẫn và so sánh. Pixel có thể ẩn; đường dẫn thì không.

Thêm từ blog

PerfectVector

Bắt đầu với SVG gọn sạch hơn
và dễ chỉnh sửa hơn

Không cần thẻ tín dụng