javascript - 使用 webcam.js 转换 Base64 图像时图像损坏

标签 javascript php mysql webcam

这是我使用 webcam.js 编写的带有 javascript 的 html。我刚刚关注了https://github.com/jhuckaby/webcamjs关于如何使用现有表单来实现它。

<html lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>WebcamJS Test Page</title>
    <style type="text/css">
        body { font-family: Helvetica, sans-serif; }
        h2, h3 { margin-top:0; }
        form { margin-top: 15px; }
        form > input { margin-right: 15px; }
        #results { float:right; margin:20px; padding:20px; border:1px solid; background:#ccc; }
    </style>
</head>
<body>
    <div id="results">Your captured image will appear here...</div>

    <h1>WebcamJS Test Page</h1>
    <h3>Demonstrates simple 320x240 capture &amp; display</h3>

    <div id="my_camera"></div>

    <!-- First, include the Webcam.js JavaScript Library -->
    <script type="text/javascript" src="../webcam.js"></script>

    <!-- Configure a few settings and attach camera -->
    <script language="JavaScript">
        Webcam.set({
            width: 320,
            height: 240,
            image_format: 'jpeg',
            jpeg_quality: 90
        });
        Webcam.attach( '#my_camera' );

         Webcam.snap( function(data_uri) {
        var raw_image_data = data_uri.replace(/^data\:image\/\w+\;base64\,/, '');
        document.getElementById('mydata').value = raw_image_data;
        document.getElementById('myform').submit();
    } );
    </script>

    <!-- A button for taking snaps -->
     <form id="myform" method="post" action="myscript.php">
        <input id="mydata" type="hidden" name="mydata" value=""/>
     <input type=button value="Take Snapshot" onClick="take_snapshot()">
     <input type="submit" value="submit">
    </form>

    <!-- Code to handle taking the snapshot and displaying it locally -->
    <script language="JavaScript">
        function take_snapshot() {
            // take snapshot and get image data
            Webcam.snap( function(data_uri) {
                // display results in page
                document.getElementById('results').innerHTML = 
                    '<h2>Here is your image:</h2>' + 
                    '<img src="'+data_uri+'"/>';
            } );
        }
    </script>

这是保存图像的 myscript.php。我成功地将 PATH 保存到数据库中,但得到了损坏的 .jpg 文件(文件大小始终为 7 字节)。

<?php
include 'connect.php';
  $encoded_data = $_POST['mydata'];  // to get the base 64 code image link
  $name = base64_decode($encoded_data); // to convert base 64 code
  $name = date('YmdHis');
$newname="images/".$name.".jpg";
$file = file_put_contents( $newname, file_get_contents('php://input') );
if (!$file) {
    print "Error occured here";
    exit();
}
else
{
    $sql="INSERT INTO image (images) VALUES('$newname')";
    $result=mysqli_query($con,$sql);
    $value=mysqli_insert_id($con);
    $_SESSION["myvalue"]=$value;

}

$url = 'http://' . $_SERVER['HTTP_HOST'] . dirname($_SERVER['REQUEST_URI']) . '/' . $newname;
print "$url\n";

?>

最佳答案

经过所有的跟踪和错误,我发现您需要将 base64 字符串转换为 blob,然后在发送之前附加到文件。

    var binaryImg = atob(base64string);
    var length = binaryImg.length;
    var ab = new ArrayBuffer(length);
    var ua = new Uint8Array(ab);
    for (var i = 0; i < length; i++) {
        ua[i] = binaryImg.charCodeAt(i);
    }

    var blob = new Blob([ab], {
        type: "image/jpeg"
    });enter code here

    var imgFile = new File([blob], 'photo.jpeg', {type: 'image/jpeg'});

现在您可以使用 imgFile 发送到远程服务器。

关于javascript - 使用 webcam.js 转换 Base64 图像时图像损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32586588/

相关文章:

php - PHPmyAdmin 中的 MySQL 命名

javascript - 使用 Angular JS 从运行 MySQL 的 PHP 服务器获取数据时出错

php - 多对多 vs 一行

javascript - 如何排除从它的子元素中冒出的事件?

Javascript对象创建方法

javascript - 如何使 div "margin-bottom"等于另一个 div 高度?

MySQL命令行不做任何事情

javascript - ASP.NET 表单验证 - JavaScript 中的成功事件?

PHP 绕过 jQuery 代码

php - Codeigniter RESTServer session