Convert blob to image file

后端 未结 2 1050
春和景丽
春和景丽 2021-01-15 06:39

I am trying to convert an image file captured from an input type=file element without success. Below is my javascript code

        var img = document.getEle         


        
相关标签:
2条回答
  • 2021-01-15 06:49

    You can't manipulate hard drive directly from the browser. What you can do though is create a link that can be downloaded.

    To do this change your var newfile = new File([theBlob], "c:files/myfile.jpg"); into:

    const a = document.createElement('a');
    a.setAttribute('download', "some image name");
    a.setAttribute('href', theBlob);
    
    a.click();
    
    0 讨论(0)
  • 2021-01-15 07:10

    This is how you can get a resized jpeg file from your "myimage" element using Canvas.

    I commented every line of code so you could understand what I was doing.

    // Set the Width and Height you want your resized image to be
    var width = 1920; 
    var height = 1080; 
    
    
    var canvas = document.createElement('canvas');  // Dynamically Create a Canvas Element
    canvas.width  = width;  // Set the width of the Canvas
    canvas.height = height;  // Set the height of the Canvas
    var ctx = canvas.getContext("2d");  // Get the "context" of the canvas 
    var img = document.getElementById("myimage");  // The id of your image container
    ctx.drawImage(img,0,0,width,height);  // Draw your image to the canvas
    
    
    var jpegFile = canvas.toDataURL("image/jpeg"); // This will save your image as a 
                                                   //jpeg file in the base64 format.
    

    The javascript variable "jpegFile" now contains your image encoded into a URL://Base64 format. Which looks something like this:

    // data:image/jpeg;base64,/9j/4AAQSkZJRgABAQ...9oADAMBAAIRAxEAPwD/AD/6AP/Z"
    

    You can put that variable as an image source in HTML code and it will display your image in the browser, or you can upload the Base64 encoded string to the server.

    Edit: How to convert the file to a blob (binary file) and upload it to the server

    // This function is used to convert base64 encoding to mime type (blob)
    function base64ToBlob(base64, mime) 
    {
        mime = mime || '';
        var sliceSize = 1024;
        var byteChars = window.atob(base64);
        var byteArrays = [];
    
        for (var offset = 0, len = byteChars.length; offset < len; offset += sliceSize) {
            var slice = byteChars.slice(offset, offset + sliceSize);
    
            var byteNumbers = new Array(slice.length);
            for (var i = 0; i < slice.length; i++) {
                byteNumbers[i] = slice.charCodeAt(i);
            }
    
            var byteArray = new Uint8Array(byteNumbers);
    
            byteArrays.push(byteArray);
        }
    
        return new Blob(byteArrays, {type: mime});
    }
    

    Now clean the base64 up and then pass it into the function above:

    var jpegFile64 = jpegFile.replace(/^data:image\/(png|jpeg);base64,/, "");
    var jpegBlob = base64ToBlob(jpegFile64, 'image/jpeg');  
    

    Now send the "jpegBlob" with ajax

    var oReq = new XMLHttpRequest();
    oReq.open("POST", url, true);
    oReq.onload = function (oEvent) {
      // Uploaded.
    };
    
    oReq.send(jpegBlob);
    
    0 讨论(0)
提交回复
热议问题