Как изменить размер в imageCapture.takePhoto ()? - PullRequest
0 голосов
/ 17 января 2019

Мне нужно изменить размер фотографии из imageCapture.takePhoto (), но она не работает. Мне нужно изменить размер на 320 высоту х 240 ширину, но в результате получается 640 высот х 480 ширина.

Здесь вы можете найти документацию. https://developer.mozilla.org/en-US/docs/Web/API/ImageCapture/takePhoto

navigator.getUserMedia(
{
 video:true,
 audio:true
},
function(localMediaStream) {
 const track = localMediaStream.getVideoTracks()[0];
 let imageCapture = new ImageCapture(track);
 imageCapture.takePhoto(
   {imageHeight:320,imageWidth:240}).then(function(blob) {
    //do somethingh with blob (photo)
 }).catch(function(error) {
  console.log(error);
 });
},
function(err) {
  console.log(err);
});

1 Ответ

0 голосов
/ 17 января 2019

Кажется, вам необходимо проверить 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 , и, таким образом, вам, возможно, придется изменить размер этого изображения самостоятельно на холсте.

...