Кажется, вам необходимо проверить PhotoCapabilities вашего ImageCapture, прежде чем вы сможете использовать photoSettings для ImageCapture.takePhoto (photoSettings) .
Для этого вы вызовете метод getPhotoCapabilities()
вашего ImageCapture , а затем проверьте диапазоны, установленные как imageHeight
и imageWidth
.
const capture = new ImageCapture(track);
const { imageWidth, imageHeight } = await capture.getPhotoCapabilities();
const width = setInRange(required_width, imageWidth);
const height = setInRange(required_height, imageHeight);
const photoSettings = (width && height) ? {
imageWidth: width,
imageHeight: height
} : null;
const pic = await capture.takePhoto(photoSettings);
function setInRange(value, range) {
if(!range) return NaN;
let x = Math.min(range.max, Math.max(range.min, value));
x = Math.round(x / range.step) * range.step; // take `step` into account
return x;
}
https://jsfiddle.net/bLrvyet5/
Но вполне может случиться, что ваши требуемые ширина и высота не входят в эти MediaSettingsRange , и, таким образом, вам, возможно, придется изменить размер этого изображения самостоятельно на холсте.