简体   繁体   English

将 base64 图像转换为 jpeg

[英]convert base64 image to jpeg

Struggling to convert a base64 image captured using a webcam into a jpeg for upload.努力将使用网络摄像头捕获的 base64 图像转换为 jpeg 以进行上传。

The following capture / display photo works (note that I am using webcam.min.js (which returns base64) and not webcam.js (which returns jpeg but relies on Flash) -以下捕获/显示照片有效(请注意,我使用的是 webcam.min.js(返回 base64)而不是 webcam.js(返回 jpeg 但依赖于 Flash)-

function take_snapshot() {
Webcam.snap( function(data_uri) {
// display results in page
document.getElementById('upload_results').innerHTML = 
'<img id="imageprev" src="'+data_uri+'"/>';
} );
}

I have tried the following, which may or may not be converting the base 64image to a blob -我尝试了以下方法,可能会将base 64image 转换为blob,也可能不会-

function saveSnap(){
var base64image = document.getElementById("imageprev").src;
alert(base64image)
                                
                                                               
    // convert base64 to raw binary data held in a string
    var byteString = atob(base64image.split(',')[1]);
    // separate out the mime component
    var mimeString = base64image.split(',')[0].split(':')[1].split(';')[0];
    // write the bytes of the string to an ArrayBuffer
    var ab = new ArrayBuffer(byteString.length);
    var dw = new DataView(ab);
    for(var i = 0; i < byteString.length; i++) {
    dw.setUint8(i, byteString.charCodeAt(i));
                                                                    alert("arrived here");
                                                                    
    // write the ArrayBuffer to a blob, and you're done
    return new Blob([ab], {type: mimeString});
    }

And this doesn't do anything, except halt the jsp这没有任何作用,除了停止 jsp

let image = new Image();
image.src = base64image;
document.body.appendChild(image);

How do I get / see / extract the actual jpeg file so I can then upload it (it must be something like number.jpeg)如何获取/查看/提取实际的 jpeg 文件,以便我可以上传它(它必须类似于 number.jpeg)

JDK6 / Javascript (no php please) JDK6 / Javascript(请不要 php)

Any thoughts appreciated.任何想法表示赞赏。

Regards Ralph问候拉尔夫

Create an image object and put the base64 as its source.创建一个图像对象并将 base64 作为其源。

let image = new Image();
image.src = 'data:image/png;base64,iVBORw0K...';
document.body.appendChild(image);

var aFilePartss = [image];
var oMyBlob = new Blob(aFileParts, {type : 'image/png'});
// window.open(URL.createObjectURL(oMyBlob));

var fd = new FormData();
fd.append('data', oMyBlob);
$.ajax({
    type: 'POST',
    url: '/upload.php',
    data: fd,
}).done(function(data) {
    console.log(data);
});

Here is the basics you need to convert to blob and upload.这是转换为 blob 和上传所需的基础知识。

 const MOCK_DATA_URL = `data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAYAAADE6YVjAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+/PjjUmssAAAGASURBVHjatJaxTsMwEIbpIzDA6FaMMPYJkDKzVYU+QFeEGPIKfYU8AETkCYI6wANkZQwIKRNDB1hA0Jrf0rk6WXZ8BvWkb4kv99vn89kDrfVexBSYgVNwDA7AN+jAK3gEd+AlGMGIBFDgFvzouK3JV/lihQTOwLtOtw9wIRG5pJn91Tbgqk9kSk7GViADrTD4HCyZ0NQnomi51sb0fUyCMQEbp2WpU67IjfNjwcYyoUDhjJVcZBjYBy40j4wXgaobWoe8Z6Y80CJBwFpunepIzt2AUgFjtXXshNXjVmMh+K+zzp/CMs0CqeuzrxSRpbOKfdCkiMTS1VBQ41uxMyQR2qbrXiiwYN3ACh1FDmsdK2Eu4J6Tlo31dYVtCY88h5ELZIJJ+IRMzBHfyJINrigNkt5VsRiub9nXICdsYyVd2NcVvA3ScE5t2rb5JuEeyZnAhmLt9NK63vX1O5Pe8XaPSuGq1uTrfUgMEp9EJ+CQvr+BJ/AAKvAcCiAR+bf9CjAAluzmdX4AEIIAAAAASUVORK5CYII=` function takeSnapshotThenUpload() { //get datauri let blob = convertToBlob(MOCK_DATA_URL) return uploadFile(blob) } function convertToBlob(base64image) { // convert base64 to raw binary data held in a string var byteString = atob(base64image.split(',')[1]); // separate out the mime component var mimeString = base64image.split(',')[0].split(':')[1].split(';')[0]; // write the bytes of the string to an ArrayBuffer var ab = new ArrayBuffer(byteString.length); var dw = new DataView(ab); for (var i = 0; i < byteString.length; i++) { dw.setUint8(i, byteString.charCodeAt(i)); alert("arrived here"); // write the ArrayBuffer to a blob, and you're done return new Blob([ab], { type: mimeString }); } } function uploadFile(blob) { const formData = new FormData() formData.append('cancel.jpeg', blob) fetch('/saveImage', { method: 'POST', body: formData }) .then(response => response.json()) .then(data => { console.log(data) }) .catch(error => { console.error(error) }) }
 <button onclick="takeSnapshotThenUpload()">Take screenshot then upload</button>
Remember to fix your takeSnapshotThenUpload to something like: 请记住将您的takeSnapshotThenUpload修复为以下内容:

 <script src="webcam.js"></script> <div id="my_camera" style="width:320px; height:240px;"></div> <div id="my_result"></div> <script language="JavaScript"> Webcam.attach( '#my_camera' ); function take_snapshot() { Webcam.snap( function(data_uri) { takeSnapshotThenUpload(data_uri) } ); } </script> <a href="javascript:void(take_snapshot())">Take Snapshot</a>

base64 to file (image/jpeg) base64 到文件(图像/jpeg)

        async base64ToFile(base64){
            const res = await fetch(base64)
            const buf = await res.arrayBuffer()
            const file = new File([buf], "capture_camera.jpeg", {
                type: 'image/jpeg',
            })
            return file;
        },

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM