WebcamJS là một thư viện JavaScript nhẹ (khoảng 3KB sau khi nén) và độc lập, được thiết kế để chụp ảnh tĩnh từ webcam trên máy tính và trả về dưới dạng Data URI JPEG hoặc PNG. Nó sử dụng API HTML5 getUserMedia và có cơ chế dự phòng tự động sang Adobe Flash để đảm bảo hoạt động trên nhiều trình duyệt.
Bắt đầu nhanh
Các bước tích hợp cơ bản
- Tải tệp
webcam.jsvàwebcam.swflên máy chủ web (cả hai phải nằm trong cùng một thư mục). - Thêm đoạn mã HTML và JavaScript sau:
<script src="webcam.js"></script>
<div id="camera_view" style="width:320px; height:240px;"></div>
<div id="captured_image"></div>
<script language="JavaScript">
Webcam.attach( '#camera_view' );
function captureImage() {
Webcam.snap( function(imageData) {
document.getElementById('captured_image').innerHTML = '<img src="'+imageData+'"/>';
} );
}
</script>
<a href="javascript:void(captureImage())">Chụp ảnh</a>
Khi nhấn vào liên kết "Chụp ảnh", một bức ảnh tĩnh sẽ được chụp từ webcam, chuyển đổi sang định dạng JPEG, và Data URI tương ứng sẽ được chèn vào thẻ div có id là captured_image.
Cấu hình
WebcamJS cung cấp nhiều tùy chọn cấu hình thông qua phương thức Webcam.set().
| Tên tham số | Giá trị mặc định | Mô tả |
|---|---|---|
width | (tự động) | Chiều rộng (px) của khung nhìn webcam trực tiếp |
height | (tự động) | Chiều cao (px) của khung nhìn webcam trực tiếp |
dest_width | (tự động) | Chiều rộng (px) của ảnh được chụp |
dest_height | (tự động) | Chiều cao (px) của ảnh được chụp |
crop_width | (tắt) | Chiều rộng (px) của ảnh sau khi cắt |
crop_height | (tắt) | Chiều cao (px) của ảnh sau khi cắt |
image_format | jpeg | Định dạng ảnh đầu ra: "jpeg" hoặc "png" |
jpeg_quality | 90 | Chất lượng ảnh JPEG (0 đến 100) |
enable_flash | true | Bật/tắt cơ chế dự phòng Flash |
force_flash | false | Luôn chạy ở chế độ Flash |
flip_horiz | false | Lật ảnh theo chiều ngang (chế độ gương) |
fps | 30 | Tốc độ khung hình mong muốn (fps) |
Ví dụ cấu hình
Thiết lập một tham số:
Webcam.set('flip_horiz', true);
Thiết lập nhiều tham số cùng lúc:
Webcam.set({
width: 640,
height: 480,
dest_width: 320,
dest_height: 240,
image_format: 'jpeg',
jpeg_quality: 85,
force_flash: false,
flip_horiz: true,
fps: 45
});
Chức năng chính
Khởi tạo webcam
Sử dụng Webcam.attach() để gắn luồng webcam vào một phần tử DOM đã tồn tại:
Webcam.attach( '#camera_view' );
Chụp ảnh
Gọi Webcam.snap() với một hàm callback để nhận dữ liệu ảnh:
Webcam.snap( function(imageData) {
document.getElementById('captured_image').innerHTML = '<img src="'+imageData+'"/>';
} );
Cắt ảnh
Bạn có thể cắt ảnh đến kích thước mong muốn, ví dụ tạo ảnh vuông từ nguồn 4:3:
Webcam.set({
width: 320,
height: 240,
crop_width: 240,
crop_height: 240
});
Chế độ gương (lật ngang)
Webcam.set({
width: 320,
height: 240,
flip_horiz: true
});
Đóng băng/xem trước ảnh
Sử dụng Webcam.freeze() để tạm dừng luồng webcam và xem trước ảnh. Sau đó, có thể chụp bằng Webcam.snap() hoặc hủy bằng Webcam.unfreeze().
Tham chiếu API
| Phương thức | Mô tả |
|---|---|
Webcam.set() | Thiết lập tham số cấu hình |
Webcam.on() | Đăng ký lắng nghe sự kiện |
Webcam.off() | Loại bỏ lắng nghe sự kiện |
Webcam.attach() | Khởi tạo và gắn webcam vào phần tử DOM |
Webcam.reset() | Đóng webcam và reset trạng thái |
Webcam.freeze() | Đóng băng khung hình hiện tại |
Webcam.unfreeze() | Hủy đóng băng và quay lại luồng trực tiếp |
Webcam.snap() | Chụp ảnh từ webcam (hoặc ảnh đã đóng băng) |
Webcam.upload() | Tải ảnh lên máy chủ qua AJAX nhị phân |
Tải ảnh lên máy chủ
Ví dụ tải ảnh qua AJAX:
Webcam.snap( function(imageData) {
Webcam.upload( imageData, 'upload.php', function(statusCode, responseText) {
console.log('Mã trạng thái: ' + statusCode);
console.log('Phản hồi: ' + responseText);
} );
} );
Để theo dõi tiến trình tải lên:
Webcam.snap( function(imageData) {
Webcam.on( 'uploadProgress', function(progress) {
// progress nằm trong khoảng 0.0 đến 1.0
console.log('Đã tải: ' + (progress * 100) + '%');
} );
Webcam.on( 'uploadComplete', function(statusCode, responseText) {
console.log('Hoàn tất!');
} );
Webcam.upload( imageData, 'upload.php' );
} );
Tương thích trình duyệt
| Hệ điều hành | Trình duyệt | Ghi chú |
|---|---|---|
| Mac OS X | Chrome 30+ | Hoạt động tốt – Chrome 47+ yêu cầu HTTPS |
| Mac OS X | Firefox 20+ | Hoạt động tốt |
| Mac OS X | Safari 6+ | Yêu cầu Adobe Flash Player |
| Windows | Chrome 30+ | Hoạt động tốt – Chrome 47+ yêu cầu HTTPS |
| Windows | Firefox 20+ | Hoạt động tốt |
| Windows | IE 9, 10, 11 | Yêu cầu Adobe Flash Player |
Tính năng nâng cao
Ràng buộc luồng đa phương tiện tùy chỉnh
Bạn có thể chỉ định các ràng buộc cho API getUserMedia:
Webcam.set( 'constraints', {
mandatory: {
minWidth: 1280,
minHeight: 720,
minFrameRate: 30
},
optional: [
{ minFrameRate: 60 }
]
} );
Lưu ý quan trọng
- Chrome 47+ yêu cầu trang web phải sử dụng HTTPS để truy cập webcam.
- Localhost/127.0.0.1 không cần HTTPS.
- Thư viện tự động chuyển đổi giữa HTML5 và Flash, giúp mã nguồn của bạn không phải xử lý vấn đề tương thích trình duyệt.
Tải dự án
Sử dụng lệnh git để clone kho lưu trữ:
git clone https://gitcode.com/gh_mirrors/we/webcamjs
Thư mục demos/ chứa các tệp mẫu minh họa đầy đủ các tính năng của WebcamJS như chụp ảnh cơ bản, chụp ảnh kích thước lớn, cắt ảnh, chế độ gương, v.v.