Vài ngày trước, tôi đang tìm cách nhanh chóng đặt một hình ảnh dưới dạng một chuỗi để gửi nó trong một tin nhắn. Tôi nhớ rằng có thể sử dụng base64 cho việc đó nhưng tôi không nhớ chính xác quy trình
Tôi đã phải lấy các bit từ các câu trả lời stackoverflow khác nhau để nó hoạt động. Tôi quyết định viết bài này để giúp bạn tiết kiệm một vài phút
function imgToBase64[img] {
const canvas = document.createElement['canvas'];
const ctx = canvas.getContext['2d'];
canvas.width = img.width;
canvas.height = img.height;
// I think this won't work inside the function from the console
img.crossOrigin = 'anonymous';
ctx.drawImage[img, 0, 0];
return canvas.toDataURL[];
}
Vào chế độ toàn màn hình Thoát chế độ toàn màn hình
Hãy thử nó
- Đây là một bức ảnh tuyệt đẹp về Xochimilco, ở Mexico City, Mexico được chụp bởi Jeremy Lishner trên Bapt. Bạn có thể theo liên kết, nếu bạn muốn, nhưng tôi đã bao gồm hình ảnh để bạn không phải rời khỏi trang này
- Mở bảng điều khiển [Ctrl + Shift + I]
- Dán mã. Chúng tôi sẽ có sẵn
imgToBase64
dưới dạng một chức năng - Nhấp vào biểu tượng chọn ở trên cùng bên trái [Ctrl + Shift + C] và chọn hình ảnh. Bây giờ bạn sẽ có một tham chiếu đến DOMElement với
0btoa[stringToEncode]
- Loại
1. Bây giờ bạn đã có chuỗi hình ảnh trong khay nhớ tạm, sẵn sàng dán vào nơi khácbtoa[stringToEncode]
Đôi khi bạn gặp lỗi
btoa[stringToEncode]
2, lỗi này liên quan đến thuộc tính btoa[stringToEncode]
3, bạn có thể thay đổi giá trị thành btoa[stringToEncode]
4 ẩn danh theo cách thủ công và lặp lại bước 4 Phương thức
btoa[stringToEncode]
5 tạo một chuỗi ASCII được mã hóa Base64 từ một chuỗi nhị phân [i. e. , một chuỗi trong đó mỗi ký tự trong chuỗi được coi là một byte dữ liệu nhị phân]Bạn có thể sử dụng phương pháp này để mã hóa dữ liệu có thể gây ra sự cố giao tiếp, hãy truyền nó, sau đó sử dụng phương pháp
btoa[stringToEncode]
6 để giải mã lại dữ liệu. Ví dụ: bạn có thể mã hóa các ký tự điều khiển chẳng hạn như các giá trị ASCII từ 0 đến 31btoa[stringToEncode]
btoa[stringToEncode]
7Chuỗi nhị phân để mã hóa
Một chuỗi ASCII chứa biểu diễn Base64 của
btoa[stringToEncode]
7btoa[stringToEncode]
9 const encodedData = btoa["Hello, world"]; // encode a string
const decodedData = atob[encodedData]; // decode the string
0Chuỗi chứa một ký tự không vừa trong một byte. Xem "Chuỗi Unicode" bên dưới để biết thêm chi tiết
const encodedData = btoa["Hello, world"]; // encode a string
const decodedData = atob[encodedData]; // decode the string
Hàm
btoa[stringToEncode]
5 lấy một chuỗi JavaScript làm tham số. Trong các chuỗi JavaScript được biểu diễn bằng mã hóa ký tự UTF-16. trong cách mã hóa này, các chuỗi được biểu diễn dưới dạng một chuỗi các đơn vị 16 bit [2 byte]. Mỗi ký tự ASCII phù hợp với byte đầu tiên của một trong các đơn vị này, nhưng nhiều ký tự khác thì khôngBase64, theo thiết kế, mong đợi dữ liệu nhị phân làm đầu vào của nó. Về chuỗi JavaScript, điều này có nghĩa là các chuỗi trong đó mỗi ký tự chỉ chiếm một byte. Vì vậy, nếu bạn chuyển một chuỗi vào
btoa[stringToEncode]
5 chứa các ký tự chiếm nhiều hơn một byte, bạn sẽ gặp lỗi vì đây không được coi là dữ liệu nhị phânconst ok = "a";
console.log[ok.codePointAt[0].toString[16]]; // 61: occupies < 1 byte
const notOK = "✓";
console.log[notOK.codePointAt[0].toString[16]]; // 2713: occupies > 1 byte
console.log[btoa[ok]]; // YQ==
console.log[btoa[notOK]]; // error
Nếu bạn cần mã hóa văn bản Unicode dưới dạng ASCII bằng cách sử dụng
btoa[stringToEncode]
5, một tùy chọn là chuyển đổi chuỗi sao cho mỗi đơn vị 16 bit chỉ chiếm một byte. Ví dụ// convert a Unicode string to a string in which
// each 16-bit unit occupies only one byte
function toBinary[string] {
const codeUnits = Uint16Array.from[
{ length: string.length },
[element, index] => string.charCodeAt[index]
];
const charCodes = new Uint8Array[codeUnits.buffer];
let result = "";
charCodes.forEach[[char] => {
result += String.fromCharCode[char];
}];
return result;
}
// a string that contains characters occupying > 1 byte
const myString = "☸☹☺☻☼☾☿";
const converted = toBinary[myString];
const encoded = btoa[converted];
console.log[encoded]; // OCY5JjomOyY8Jj4mPyY=
Nếu bạn làm điều này, tất nhiên bạn sẽ phải đảo ngược chuyển đổi trên chuỗi đã giải mã
function fromBinary[binary] {
const bytes = Uint8Array.from[{ length: binary.length }, [element, index] =>
binary.charCodeAt[index]
];
const charCodes = new Uint16Array[bytes.buffer];
let result = "";
charCodes.forEach[[char] => {
result += String.fromCharCode[char];
}];
return result;
}
const decoded = atob[encoded];
const original = fromBinary[decoded];
console.log[original]; // ☸☹☺☻☼☾☿
Xem thêm ví dụ về hàm
const encodedData = btoa["Hello, world"]; // encode a string
const decodedData = atob[encodedData]; // decode the string
4 và const encodedData = btoa["Hello, world"]; // encode a string
const decodedData = atob[encodedData]; // decode the string
5 trong mục thuật ngữ Base64