TopGit
Đánh giá repo GitHub

Sharp: xử lý ảnh hiệu năng cao cho Node.js

lovell/sharp
STopGit review image for lovell/sharp
Review by Topgit.dev for lovell/sharp, with GitHub repository stats and README context.
Nhận định nhanh

Sharp giải quyết đúng việc mà backend Node.js cần từ thư viện xử lý ảnh: chuyển JPEG hoặc PNG người dùng tải lên thành file nhỏ hơn, sẵn sàng cho web, nhanh chóng. Sharp chạy trên libvips, và nhóm phát triển nói resize nhanh hơn 4x-5x so với cấu hình nhanh nhất của ImageMagick hoặc GraphicsMagick. Đó là đánh đổi thật: dependency biên dịch native, đổi lại CPU rảnh hơn khi resize theo từng request thay vì theo lô.

Sao
★ 32.8k
Fork
⑂ 1.4k
Người đóng góp
👥 238
Ngôn ngữ
JavaScript
Giấy phép
Apache-2.0
Chủ đề
Image Tools
Cập nhật
Oct 2026
Trang chủ
GitHub

Sharp là gì?

Sharp là một module Node.js cho xử lý ảnh tốc độ cao, xây trên thư viện C libvips thay vì JavaScript thuần. Sharp chuyển đổi và resize ảnh JPEG, PNG, WebP, GIF, AVIF và TIFF, và chạy được trên bất kỳ runtime JavaScript nào hỗ trợ Node-API v9, gồm Node.js từ bản 20.9.0 trở lên, Deno và Bun. Hầu hết hệ thống macOS, Windows và Linux hiện đại có thể chạy Sharp mà không cần cài thêm dependency native nào khác.

Định dạng hỗ trợ và các thao tác cốt lõi

  • ✓Đọc và chuyển đổi JPEG, PNG, WebP, GIF, AVIF, TIFF, theo đúng danh sách định dạng mà README liệt kê
  • ✓Resize dựa trên Lanczos resampling, nên chất lượng ảnh vẫn giữ được khi thu nhỏ kích thước
  • ✓Xử lý đúng colour space, ICC profile nhúng trong ảnh, và kênh alpha transparency khi chuyển đổi
  • ✓Ngoài resize còn có xoay ảnh, crop/extraction, composite và gamma correction
  • ✓Nhận SVG làm input, hữu ích khi dùng làm mask hoặc overlay trong thao tác composite
  • ✓Hoạt động như một stream, cho phép pipe một nguồn ảnh readable qua transform rồi ra writable output
Số sao GitHub của repo này thay đổi thế nào theo thời gian. Nguồn: star-history.com.Xem lịch sử sao ↗

Các use case phổ biến của Sharp

  • •Tạo nhiều kích thước thumbnail cho pipeline upload trên web
  • •Chuyển ảnh người dùng tải lên sang WebP hoặc AVIF trước khi lưu trữ để giảm dung lượng file
  • •Resize ảnh sản phẩm ngay tại thời điểm gọi, phía sau một API route
  • •Ghép overlay lên ảnh phía server, ví dụ mask bo góc hoặc watermark

Cài đặt Sharp

Chạy `npm install sharp`. Đó là toàn bộ đường cài đặt mà README thể hiện — không cần bước build hay file config nào cho use case thông thường. Với những gì nằm ngoài một câu lệnh đó, dự án dẫn sang một hướng dẫn cài đặt riêng trên trang docs thay vì viết chi tiết theo từng nền tảng ngay trong README.

Resize và chuyển đổi ảnh với ví dụ code

Import Sharp rồi chain các thao tác lại với nhau; cả ESM lẫn CommonJS đều dùng được. ```javascript // ESM import sharp from 'sharp'; // CJS const sharp = require('sharp'); ``` Resize và chuyển định dạng trong một lần gọi: ```javascript const output = await sharp('input.jpg') .autoOrient() .resize({ width: 200 }) .jpeg({ mozjpeg: true }) .toBuffer(); ``` Hoặc resize thẳng ra file với định dạng khác: ```javascript await sharp(inputBuffer) .resize({ width: 320, height: 240 }) .toFile('output.webp', (err, info) => { ... }); ``` Sharp cũng hoạt động như stream. Ví dụ bo góc trong README pipe một nguồn readable qua một lệnh `.composite()` dùng SVG mask rồi ra writable destination, không cần buffer toàn bộ ảnh trong bộ nhớ: ```javascript const roundedCorners = Buffer.from( '<svg><rect x="0" y="0" width="200" height="200" rx="50" ry="50"/></svg>' ); const roundedCornerResizer = sharp() .resize(200, 200) .composite([{ input: roundedCorners, blend: 'dest-in' }]) .png(); readableStream .pipe(roundedCornerResizer) .pipe(writableStream); ```

Ưu điểm về hiệu năng và chất lượng

  • ✓Tốc độ resize mà chính README đem so trực tiếp với ImageMagick và GraphicsMagick, không chỉ so với việc không dùng công cụ nào
  • ✓Xử lý đúng ICC profile và kênh alpha thay vì âm thầm làm phẳng chúng
  • ✓Lanczos resampling giữ ảnh sắc nét khi thu nhỏ thay vì bị mờ nhòe
  • ✓Một API chainable duy nhất bao trọn resize, xoay ảnh, crop, composite và gamma correction
  • ✓Chạy được trên Node.js, Deno và Bun qua cùng một binding Node-API v9

Giới hạn và yêu cầu hệ thống

  • △Đây là một native binding bọc quanh libvips, không phải JavaScript thuần — nghĩa là có binary theo từng nền tảng và bước cài đặt nặng hơn một package JS thuần
  • △README không mô tả kịch bản chạy trên browser hay edge runtime; Sharp được xây quanh các runtime hỗ trợ Node-API (Node.js, Deno, Bun) trên macOS, Windows và Linux
  • △Chi tiết đầy đủ về cài đặt và API nằm ở trang docs bên ngoài, không nằm trong README, nên bạn sẽ phải rời GitHub để nắm được đầy đủ
Xem trên GitHub ↗Trang chủ ↗

Lựa chọn thay thế cho Sharp

ImageMagick — bộ công cụ xử lý ảnh đa năng mà chính README của Sharp đem ra benchmark trực tiếp; hỗ trợ định dạng và công cụ dòng lệnh rộng hơn, đổi lại tốc độ như README của Sharp mô tảGraphicsMagick — bản fork của ImageMagick hướng tới tốc độ và đa luồng phía server, là thư viện còn lại được nhắc tên trong phần so sánh hiệu năng của SharpJimp — thư viện xử lý ảnh JavaScript thuần, không có binary native nào cần biên dịch hay đóng gói, đổi lại mất đi tốc độ mà libvips mang lại cho Sharp

Khi nào nên chọn Sharp

Sharp phù hợp với đội đã dùng Node.js, Deno hoặc Bun và cần resize, chuyển đổi hoặc nén ảnh ngay trong luồng xử lý request của mình — một handler upload, một job tạo thumbnail, một API xử lý ảnh theo thời gian thực — và muốn việc đó chạy ngay trong tiến trình thay vì gọi ra binary ImageMagick. Sharp không hợp nếu bạn cần một thư viện xử lý ảnh JavaScript thuần, không phụ thuộc native, chẳng hạn cho một môi trường deploy giới hạn không cho phép biên dịch hay đóng gói binary native.

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

Sharp hỗ trợ những định dạng ảnh nào?

Sharp đọc và chuyển đổi ảnh JPEG, PNG, WebP, GIF, AVIF và TIFF. Sharp cũng nhận SVG làm input, ví dụ khi ghép mask hoặc overlay lên một ảnh khác. Chuyển định dạng và resize đều chạy qua cùng một API chainable.

Sharp nhanh hơn ImageMagick bao nhiêu?

README của Sharp nói rằng resize ảnh bằng Sharp thường nhanh hơn 4x-5x so với cấu hình nhanh nhất của ImageMagick hoặc GraphicsMagick. Khoảng cách này đến từ backend libvips, vốn bỏ qua chi phí khởi tạo của một lệnh gọi ImageMagick đầy đủ.

Sharp có chạy được trên Deno và Bun như trên Node.js không?

Sharp chạy được trên cả Deno và Bun bên cạnh Node.js, vì cả ba runtime đều hỗ trợ giao diện Node-API v9 mà Sharp dựa vào. Riêng trên Node.js, Sharp yêu cầu bản 20.9.0 trở lên.

Yêu cầu hệ thống của Sharp là gì?

Sharp cần một runtime JavaScript hỗ trợ Node-API v9: Node.js từ bản 20.9.0 trở lên, Deno, hoặc Bun. README nói rằng hầu hết hệ thống macOS, Windows và Linux hiện đại không cần cài thêm dependency runtime nào khác ngoài điều kiện đó.

Sharp có thể tạo ảnh mới từ đầu không?

Sharp có thể tạo một ảnh mới từ đầu thay vì chỉ biến đổi file có sẵn — bạn truyền config `create` gồm width, height, channels và màu nền thay vì một file input. Ví dụ trong README dùng cách này để tạo một ảnh PNG đỏ bán trong suốt.

Sharp có được cấp phép để dùng thương mại không?

Sharp dùng giấy phép Apache-2.0, cho phép sử dụng thương mại, chỉnh sửa và phân phối lại. Bản quyền thuộc về Lovell Fuller và những người đóng góp khác, như ghi trong phần licensing của dự án.

Vấn đề mà Sharp giải quyết

Resize hoặc chuyển đổi ảnh trong một tiến trình Node.js thường nghĩa là gọi ra binary ImageMagick và chịu chi phí khởi động của nó, hoặc dùng một bộ giải mã thuần JavaScript vốn chậm hẳn với ảnh lớn hơn kích thước thumbnail. Chi phí đó tăng nhanh khi có nhiều request thật. Sharp bọc trực tiếp libvips trong một module Node-API native, nên resize, chuyển định dạng và ghép ảnh diễn ra ngay trong tiến trình với tốc độ của libvips, thay vì qua một tiến trình con hay một codec JS thuần chậm chạp.

Repo liên quan

Nguồn & ghi công

Dựa trên repository GitHub lovell/sharp (https://github.com/lovell/sharp) và README của dự án.

Dữ liệu GitHub · đồng bộ lần cuối 15 thg 8, 2026Đánh giá bởi Henry
← Về TopGit

Vẫn đang phân vân về sharp?

Một cú bấm sẽ gửi câu hỏi kèm trang này cho AI — xem AI nói gì về sharp.

GitHub