전단 이미지 변환base64, 포맷 변환,blob, 업로드 총결산

11646 단어

1. 그림 파일 변환 base64

<input accept="image/gif,image/jpeg,image/jpg,image/png" type="file" id="up" />

 
$(function() {
                $("#up").change(function() {
                    var file = this.files[0];
                    if(undefined == file){
                        return ;
                    }
                    r = new FileReader(); 
                    r.readAsDataURL(file); 
                    r.onload = function(e) {
                        var base64 = e.target.result;
                        
                    }
                });
            });

이렇게 하면 그림 파일의base64 인코딩을 얻을 수 있습니다
 
base64를 img의 src 속성에 직접 설정할 수 있으며, 그림으로 되돌려줍니다.

2. canvas 이미지 처리


2.1 canvas 그림 그리기 및 압축 이미지

var suofang = function(base64, bili, callback) {
    console.log(" ,bili=" + bili);
    //
    var _img = new Image();
    _img.src = base64;
    _img.onload = function() {
        var _canvas = document.createElement("canvas");
        var w = this.width / bili;
        var h = this.height / bili;
        _canvas.setAttribute("width", w);
        _canvas.setAttribute("height", h);
        _canvas.getContext("2d").drawImage(this, 0, 0, w, h);
    }
}

그림을 압축하는 것은 주로 긴 폭의 축소를 통해 그림을 축소하는 것이다
 

2.2 canvas base64

var base64 = canvas.toDataURL("image/png");

  
그림 품질의 설정을 위해 파라미터를 전달할 수 있습니다. 0-1

2.3 canvas 회전blob

_canvas.toBlob(function(blob) {
            console.log(blob.size);
        }, "image/jpeg");

2.4 base 회전blob

function dataURItoBlob(base64Data) {
    var byteString;
    if(base64Data.split(',')[0].indexOf('base64') >= 0)
        byteString = atob(base64Data.split(',')[1]);
    else
        byteString = unescape(base64Data.split(',')[1]);
    var mimeString = base64Data.split(',')[0].split(':')[1].split(';')[0];
    var ia = new Uint8Array(byteString.length);
    for(var i = 0; i < byteString.length; i++) {
        ia[i] = byteString.charCodeAt(i);
    }
    return new Blob([ia], {
        type: mimeString
    });
}

3. 파일 업로드


1. base64 업로드


aax 요청을 사용할 수 있습니다. 일반 요청을 보내면 됩니다.
주의해야 할 것은base64가 비교적 길기 때문에 테스트 후 자바 백엔드에서 받아들인 매개 변수는null이다.그래서 JSON을 사용합니다.stringify () 데이터 데이터를 json으로 바꾸고 백엔드에서 @requestBody로 받습니다.

2. 블로그 업로드

var fd = new FormData();
    fd.append("file", blob); //fileData    
    $.ajax({
        type: "post",
        url: "/file/upload",
        async: true,
        data: fd,
        processData: false,
        contentType: false,
        success: function(r) {
 
        }
    });

마지막으로 전체 코드 첨부
  • html
  • <input accept="image/gif,image/jpeg,image/jpg,image/png" type="file" id="up" />
  • 업무 코드
  • $(function() {
        $("#up").change(function() {
            imageDeal(this, dealChange);
        });
    })
    var dealChange = function(blob, base64) {
        var fd = new FormData();
        fd.append("file", blob); //fileData    
        $.ajax({
            type: "post",
            url: "/file/upload",
            async: true,
            data: fd,
            processData: false,
            contentType: false,
            success: function(r) {
     
            }
        });
    }
  • 코드 처리
  • var imageDeal = function(ele, returnBase64) {
        // file, base64
        var file = ele.files[0]; // 
        if(undefined == file) { // , , 
            return;
        }
        console.log("fileSize" + file.size);
        console.log(file.type);
     
        var r = new FileReader();
        r.readAsDataURL(file);
        r.onload = function(e) {
            var base64 = e.target.result;
            var bili = 1.5;
            console.log(" :" + base64.length);
            suofang(base64, bili, returnBase64);
        }
    }
    var suofang = function(base64, bili, callback) {
        console.log(" ,bili=" + bili);
        //
        var _img = new Image();
        _img.src = base64;
        _img.onload = function() {
            var _canvas = document.createElement("canvas");
            var w = this.width / bili;
            var h = this.height / bili;
            _canvas.setAttribute("width", w);
            _canvas.setAttribute("height", h);
            _canvas.getContext("2d").drawImage(this, 0, 0, w, h);
            var base64 = _canvas.toDataURL("image/jpeg");
            _canvas.toBlob(function(blob) {
                console.log(blob.size);
                
                if(blob.size > 1024*1024){
                    suofang(base64, bili, callback);
                }else{
                    callback(blob, base64);
                }
            }, "image/jpeg");
        }
    }

     



  • 다음으로 전송:https://www.cnblogs.com/ihuangjianxin/p/9405107.html

    좋은 웹페이지 즐겨찾기