Trình tạo sprite sheet

Đang khôi phục tệp đã chọn...

Thả một loạt hình ảnh và trình tạo sẽ sắp chúng trên một lưới đều rồi vẽ một PNG sprite sheet duy nhất ngay trong trình duyệt, sau đó xuất CSS với một offset background-position cho mỗi sprite. Mọi thứ chạy cục bộ trên canvas, nên không có gì được tải lên máy chủ. Hữu ích cho bộ biểu tượng, khung hình game retro và các trạng thái giao diện khi bạn muốn một tệp duy nhất thay vì nhiều hình ảnh rời. Bạn kiểm soát số cột, kích thước ô, khoảng đệm giữa các ô và nền (trong suốt, trắng hoặc đen).

Sprite sheet được dựng như thế nào

  1. 1

    Thả hình ảnh của bạn

    Thêm tệp PNG, JPG hoặc WebP. Sắp lại thứ tự bằng nút lên/xuống hoặc xóa khung bất kỳ; bảng được dựng lại ngay lập tức.

  2. 2

    Thiết lập lưới

    Chọn số cột; số hàng suy ra từ số hình bạn đã thêm. Mỗi hình được co giãn để vừa một ô vuông, giữ nguyên tỉ lệ và căn giữa.

  3. 3

    Chỉnh kích thước ô và khoảng đệm

    Chọn kích thước ô tính bằng pixel và thêm khoảng đệm giữa các ô để các sprite kề nhau không lấn sang nhau khi co giãn.

  4. 4

    Tải PNG và sao chép CSS

    Lưu sprite sheet thành một PNG duy nhất và sao chép các lớp CSS được tạo, mỗi hình một quy tắc `.spr-ten` với chiều rộng, chiều cao và background-position.

Cách bố cục hoạt động

Trình tạo dùng một bố cục duy nhất và dễ đoán: lưới đều. Bạn đặt số cột, còn số hàng là làm_tròn_lên(hình / cột). Mỗi ô có cùng kích thước vuông (kích thước ô bạn chọn), nên mỗi hình được co giãn để vừa ô của nó, giữ nguyên tỉ lệ, rồi căn giữa. Hình có kích thước khác nhau đều nằm trong các ô bằng nhau, đúng như sprite CSS với background-position mong đợi.

Điều khiển Phạm vi Tác dụng
Số cột 1 đến 16 Sprite trên mỗi hàng; số hàng tính tự động
Kích thước ô 32 đến 512 px Ô vuông mà mỗi hình được đưa vừa vào
Khoảng đệm 0 đến 64 px Khoảng trống trong suốt giữa các ô để tránh lấn khi co giãn
Nền Trong suốt / Trắng / Đen Phần tô phía sau sprite trong PNG đầu ra

Dạng CSS được tạo

Mỗi hình trở thành một lớp mang tên tệp (.spr-<ten>), kích thước bằng ô và dịch tới ô của nó. Với bốn cột, kích thước ô 128 px và không khoảng đệm, bảng trông như sau:

.spr-idle  { width: 128px; height: 128px; background: url(spritesheet.png) -0px -0px; }
.spr-walk  { width: 128px; height: 128px; background: url(spritesheet.png) -128px -0px; }
.spr-run   { width: 128px; height: 128px; background: url(spritesheet.png) -256px -0px; }
.spr-jump  { width: 128px; height: 128px; background: url(spritesheet.png) -384px -0px; }
.spr-fall  { width: 128px; height: 128px; background: url(spritesheet.png) -0px -128px; }

Offset dịch chuyển theo hai chiều: các sprite lấp đầy từng hàng từ trái sang phải, rồi xuống hàng kế tiếp. Lưu PNG là spritesheet.png cạnh CSS của bạn (hoặc sửa url(...) cho khớp đường dẫn của bạn).

Khoảng đệm và lấn màu

Các sprite xếp sát cạnh nhau có thể lấn sang nhau khi trình duyệt co giãn bảng (tỉ lệ pixel không nguyên, biến đổi CSS). Thêm 2 đến 4 pixel khoảng đệm giữa các ô để pixel lân cận không rò sang.

Màn hình mật độ cao (retina)

Không có xuất 2x tự động, nhưng bạn có thể tạo bảng sắc nét hơn một cách đơn giản: chọn kích thước ô lớn hơn (ví dụ 256 px thay vì 128 px) để mỗi sprite mang nhiều pixel hơn, rồi hiển thị nó ở một nửa kích thước CSS. Nhờ đó bạn có sprite sắc nét trên màn hình mật độ cao mà không cần một lượt riêng.

Sprite sheet hay lựa chọn thay thế

  • Sprite sheet: bộ biểu tượng cổ điển trong CSS, khung hình game HTML5 và các trang được lợi khi gộp nhiều hình nhỏ vào một tệp.
  • Sprite SVG (symbol): tốt hơn cho biểu tượng giao diện hiện đại, co giãn không mất chất lượng, nhận fill của CSS, không phải xoay xở với background-position.
  • Phông biểu tượng: hạn chế, nhưng vẫn dùng cho biểu tượng một màu cỡ nhỏ xíu.
  • Tệp riêng lẻ với HTTP/2 hoặc HTTP/3: ghép kênh khiến số lượng yêu cầu ít quan trọng hơn trước.

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

Hình ảnh của bạn ở lại trong trình duyệt. Trong luồng nhiều bước, trình duyệt này tạm giữ các tệp hình ảnh đã chọn và bố cục trong thẻ này tối đa 30 phút. Không có gì được gửi đến máy chủ hay thêm vào URL.

Có, nhưng SVG nội tuyến hoặc sprite SVG <symbol> thường hợp hơn với các framework theo thành phần. Sprite sheet CSS phát huy tốt khi nhiều hình được hiển thị cùng lúc trên trang tĩnh.

Đặt số cột bằng số khung để mỗi khung nằm trên một hàng, rồi điều khiển bằng animation-timing-function: steps(N) của CSS và một background-position nhảy từng ô. Phù hợp cho hoạt ảnh lặp ngắn (biểu tượng tải, trạng thái nghỉ).

Mỗi ô của lưới có cùng kích thước vuông (kích thước ô bạn chọn), nên mỗi hình được đưa vừa vào ô của nó và căn giữa. Nếu các sprite của bạn đã là hình vuông giống nhau, hãy đặt kích thước ô tương ứng và chúng sẽ đi qua nguyên vẹn.

Công cụ liên quan