Để làm điều này, bạn nên làm quen với HTML5 Canvas API và API tệp. Và tất nhiên, tính năng này có sẵn trong các trình duyệt chỉ hỗ trợ cả API HTML5.
Quá trình này để làm điều này là:
- Công văn một sự kiện
change
nộp yếu tố đầu vào.
- Tải tệp được tải lên từ trình xử lý sự kiện và nhận URL dữ liệu bằng cách sử dụng đối tượng FileReader .
- Tạo thành phần
img
với URL dữ liệu và vẽ nó trên canvas.
Tôi đã tạo đơn giản example trên jsfiddle. Mã này trông như thế này:
<canvas id="canvas"></canvas>
<input type="file" id="file-input">
<script>
$(function() {
$('#file-input').change(function(e) {
var file = e.target.files[0],
imageType = /image.*/;
if (!file.type.match(imageType))
return;
var reader = new FileReader();
reader.onload = fileOnload;
reader.readAsDataURL(file);
});
function fileOnload(e) {
var $img = $('<img>', { src: e.target.result });
$img.load(function() {
var canvas = $('#canvas')[0];
var context = canvas.getContext('2d');
canvas.width = this.naturalWidth;
canvas.height = this.naturalHeight;
context.drawImage(this, 0, 0);
});
}
});
</script>
Có rất nhiều bài hướng dẫn tốt về API file như this hoặc this.
Nguồn
2011-08-04 17:50:21
Ồ, bạn là wiki trực tiếp. Cảm ơn bạn! –
Thông tin tốt, chỉ content.drawimage nên chạy trên $ img.load (funciton() {...}); - một số hình ảnh lớn hơn phải tải trước khi chúng có thể được vẽ chính xác đến canvas. – wesbos
@Wes Cảm ơn! Tôi sửa rồi. –