123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- // 将 File 对象转为 buffer
- function convertFileToBuffer(file: File) {
- return new Promise((resolve, reject) => {
- const fileReader = new FileReader()
- fileReader.onload = () => {
- const uint8Array = new Uint8Array(fileReader.result as ArrayBuffer)
- resolve(uint8Array)
- }
- fileReader.onerror = () => {
- reject(fileReader.error)
- }
- fileReader.readAsArrayBuffer(file)
- })
- }
- // 将 base64 转为字节码
- function convertBase64ToBytes(imageBase64: string): Uint8Array {
- const dataUrl = imageBase64.split(';base64,')[1]
- const imageData = atob(dataUrl)
- const bytes = new Uint8Array(imageData.length)
- for (let i = 0; i < imageData.length; i++) {
- bytes[i] = imageData.charCodeAt(i)
- }
- return bytes
- }
- // 根据 base64 获取图片的格式
- function getImageFormateFromBase64(imageBase64: string): string {
- const dataArray = imageBase64.split(';base64,')
- if (dataArray.length !== 2) {
- throw new Error('Invalid base64 image')
- }
- const mimeType = dataArray[0].split(':')[1]
- return mimeType.split('/')[1]
- }
- function convertbase64ToJpgBuffer(imageBase64: string, width: number, height: number): Promise<Uint8Array> {
- return new Promise((resolve, reject) => {
- const mimeType = getImageFormateFromBase64(imageBase64)
- if (mimeType === 'jpeg' || mimeType === 'jpg') {
- const bytes = convertBase64ToBytes(imageBase64)
- resolve(bytes)
- return
- }
- const image = new Image()
- image.src = imageBase64
- image.onload = () => {
- const width = image.width
- const height = image.height
- const canvas = document.createElement('canvas')
- canvas.width = width
- canvas.height = height
- const ctx = canvas.getContext('2d')
- if (!ctx) {
- reject(new Error('Invalid canvas context'))
- return
- }
- ctx.drawImage(image, 0, 0, width, height)
- const jpgBuffer = canvas.toDataURL('image/jpeg')
- const bytes = convertBase64ToBytes(jpgBuffer)
- resolve(bytes)
- }
- })
- }
- export {
- convertFileToBuffer,
- convertbase64ToJpgBuffer
- }
|