移动系统liao
3 天以前 0a4e5fc3bdfca328feb574f1564011abf2a35b76
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
/**
 * @description: base64 to blob
 */
export function dataURLtoBlob(base64Buf: string): Blob {
    const arr = base64Buf.split(',');
    const typeItem = arr[0];
    const mime = typeItem.match(/:(.*?);/)![1];
    const bstr = window.atob(arr[1]);
    let n = bstr.length;
    const u8arr = new Uint8Array(n);
    while (n--) {
        u8arr[n] = bstr.charCodeAt(n);
    }
    return new Blob([u8arr], { type: mime });
}
 
/**
 * img url to base64
 * @param url
 */
export function urlToBase64(url: string, mineType?: string): Promise<string> {
    return new Promise((resolve, reject) => {
        let canvas = document.createElement('CANVAS') as Nullable<HTMLCanvasElement>;
        const ctx = canvas!.getContext('2d');
 
        const img = new Image();
        img.crossOrigin = '';
        img.onload = function () {
            if (!canvas || !ctx) {
                return reject();
            }
            canvas.height = img.height;
            canvas.width = img.width;
            ctx.drawImage(img, 0, 0);
            const dataURL = canvas.toDataURL(mineType || 'image/png');
            canvas = null;
            resolve(dataURL);
        };
        img.src = url;
    });
}
 
/**
 * File转Base64
 * @param file
 */
export function fileToBase64(file: Blob) {
    return new Promise((resolve, reject) => {
        const reader = new FileReader();
        reader.readAsDataURL(file);
        reader.onload = () => resolve(reader.result);
        reader.onerror = (error) => reject(error);
    });
}
 
/**
 * Base64转File
 * @param dataURL   {String}  base64
 * @param fileName    {String}  文件名
 * @param mimeType    {String}  [可选]文件类型,默认为base64中的类型
 * @returns {File}
 */
export function base64ToFile(dataURL: string, fileName: string, mimeType = null) {
    var arr = dataURL.split(',');
    var defaultMimeType = arr[0].match(/:(.*?);/)[1];
    var bStr = atob(arr[1]);
    let n = bStr.length;
    var u8arr = new Uint8Array(n);
    while (n--) {
        u8arr[n] = bStr.charCodeAt(n);
    }
    return new File([u8arr], fileName, { type: mimeType || defaultMimeType });
}
 
/**
 * Blob转File
 * @param blob     {Blob}   blob
 * @param fileName {String} 文件名
 * @param mimeType {String} 文件类型
 * @return {File}
 */
export function blobToFile(blob: Blob, fileName: string, mimeType?: string) {
    if (mimeType == null) mimeType = blob.type;
    return new File([blob], fileName, { type: mimeType });
}