呼啦一阵风
import React, { Component } from 'react';import { render } from 'react-dom';import Webcam from "react-webcam";class App extends Component { state = { url: '', }; setRef = webcam => { this.webcam = webcam; }; capture = () => { const imageSrc = this.webcam.getScreenshot(); this.rotateImage(imageSrc, 180, (url) => { this.setState({ url}); console.log(url, imageSrc); }); }; rotateImage = (imageBase64, rotation, cb) => { var img = new Image(); img.src = imageBase64; img.onload = () => { var canvas = document.createElement("canvas"); // var canvas = document.createElement("canvas"); canvas.width = img.width; canvas.height = img.height; var ctx = canvas.getContext("2d"); ctx.setTransform(1, 0, 0, 1, img.width / 2, img.height / 2); ctx.rotate(rotation * (Math.PI / 180)); ctx.drawImage(img, -img.width / 2, -img.height / 2); cb(canvas.toDataURL("image/jpeg")) };}; render() { const videoConstraints = { width: 1280, height: 720, facingMode: "user" }; return ( <div> <Webcam audio={false} height={350} ref={this.setRef} screenshotFormat="image/jpeg" width={350} videoConstraints={videoConstraints} /> <button onClick={this.capture}>Capture photo</button> <img src={this.state.url} width="200" height="100" /> <canvas id="canvas" style={{display: 'none'}}></canvas> </div> ); }}render(<App />, document.getElementById('root'));更新 以下代码适用于任何维度,只需要在 this.dim 中调整以反映您的需要import React, { Component } from 'react';import { render } from 'react-dom';import Webcam from "react-webcam";class App extends Component { state = { url: '', }; dim = { height: 300, // adjust your original height width: 200, // adjust your original width }; setRef = webcam => { this.webcam = webcam; }; capture = () => { const imageSrc = this.webcam.getScreenshot(); this.rotateImage(imageSrc, (url) => { this.setState({ url}); console.log(url, imageSrc); }); }; rotateImage = (imageBase64, cb) => { var img = new Image(); img.src = imageBase64; img.onload = () => { var canvas = document.createElement("canvas"); const maxDim = Math.max(img.height, img.width); canvas.width = img.height; canvas.height = img.width; var ctx = canvas.getContext("2d"); ctx.setTransform(1, 0, 0, 1, maxDim / 2, maxDim / 2); ctx.rotate(90 * (Math.PI / 180)); ctx.drawImage(img, -maxDim / 2, -maxDim / 2); cb(canvas.toDataURL("image/jpeg")) };}; render() { const videoConstraints = { width: this.dim.width, height: this.dim.height, facingMode: "user" }; return ( <div> <Webcam audio={false} height={this.dim.height} ref={this.setRef} screenshotFormat="image/jpeg" width={this.dim.width} videoConstraints={videoConstraints} /> <button onClick={this.capture}>Capture photo</button> <img src={this.state.url} width={this.dim.height} height={this.dim.width} /> <canvas id="canvas" style={{display: 'none'}}></canvas> </div> ); }}render(<App />, document.getElementById('root'));