javascript - JavaScript - 如何使用 EXIF 数据在网络摄像头中拍照?
问题描述
我目前在网页上使用网络摄像头(不是本机摄像头)在用户的手机上拍照。像这样:
var video: HTMLVideoElement;
...
var context = canvas.getContext('2d');
context.drawImage(video, 0, 0, width, height);
var jpegData = canvas.toDataURL('image/jpeg', compression);
这样,我现在可以成功地从网络摄像头生成 JPEG 图像数据,并将其显示在网页上。
但是,我发现 EXIF 数据丢失了。据此:_
Canvas.drawImage()将忽略图像中的所有 EXIF 元数据,包括方向。这种行为在 iOS 设备上尤其麻烦。您应该自己检测方向并使用 rotate() 使其正确。
我希望 JPEG 图像包含 EXIF GPS 数据。是否有一种简单的方法可以在此过程中包含相机 EXIF 数据?
谢谢!
解决方案
在 Pixel 3 上测试 - 可以。请注意 - 有时它不适用于某些桌面网络摄像头。您将需要exif-js从示例中获取EXIF
对象。
const stream = await navigator.mediaDevices.getUserMedia({ video : true });
const track = stream.getVideoTracks()[0];
let imageCapture = new ImageCapture(track);
imageCapture.takePhoto().then((blob) => {
const newFile = new File([blob], "MyJPEG.jpg", { type: "image/jpeg" });
EXIF.getData(newFile, function () {
const make = EXIF.getAllTags(newFile);
console.log("All data", make);
});
});
推荐阅读
- c# - ASP.Net WepAPI - 我可以从 Get Methods 获取结果,但我不能发布
- php - 如何在信息之间添加换行符?
- tensorflow - 在 TensorFlow Cloud 中访问项目被拒绝
- django - 管理面板中的 Django 用户组选择器
- variables - 变量不能在函数内部改变
- linux - snowsql --authenticator=externalbrowser 使用 firefox+ubuntu 时出错
- scala - Scala 中的函数式编程 - 构建选项类型
- javascript - 通过solidity向Aave提供ETH
- python - Python 'HTTPConnection' 对象不可调用
- sequelize.js - sequelize-auto 创建的 ES6 中的模型不起作用