首页 > 移动平台 > 详细

vue项目el-upload移动端ios手机拍照上传相册旋转90度的问题修复

时间:2019-07-29 14:00:53      阅读:489      评论:0      收藏:0      [点我收藏+]

vue项目兼容移动端,上传图片用到的是element的el-upload组件,ios手机端使用的时候,拍照上传照片会出现旋转90度的问题,以下为解决方案

 

需要在el-upload组件的beforePicUpload的方法中对ios拍照上传的图片进行处理

 

①,需要用到exif-js插件进行照片的处理:

npm install exif-js --save

 

②新建一个fileUtils.js文件,使用import引入exif-js

import EXIF from ‘exif-js’

 

然后export default出来以下几个方法:

import EXIF from ‘exif-js‘

export default {
    getOrientation: (file) => {
        return new Promise((resolve) => {
            EXIF.getData(file, function () {
                const orient = EXIF.getTag(this, ‘Orientation‘)
                resolve(orient)
            })
        })
    },
 
    dataURLtoFile: (dataurl, filename) => {
        const arr = dataurl.split(‘,‘)
        const mime = arr[0].match(/:(.*?);/)[1]
        const bstr = atob(arr[1])
        let n = bstr.length
        let u8arr = new Uint8Array(n);
        while (n--) {
            u8arr[n] = bstr.charCodeAt(n);
        }
        return new File([u8arr], filename, {type: mime});
    },
 
    rotateImage: (image, width, height) => {
        let canvas = document.createElement(‘canvas‘)
        let ctx = canvas.getContext(‘2d‘)
        ctx.save()
        canvas.width = height
        canvas.height = width
        ctx.rotate(90 * Math.PI / 180)
        ctx.drawImage(image, 0, -height)
        ctx.restore()
        return canvas.toDataURL("image/jpeg")
    },
}

 <fileUtils.js>

 

③在beforePicUpload的方法中调用修改图片的方法:

首先需要引入fileUtils.js

import fileUtils from ‘@/utils/fileUtils.js‘

 beforePicUpload方法:

beforePicUpload(file) {
        return new Promise((resolve) => {
          fileUtils.getOrientation(file).then((orient) => {
            if (orient && orient === 6) {
                let reader = new FileReader()
                let img = new Image()
                reader.onload = (e) => {
                    img.src = e.target.result
                    img.onload = function () {
                      const data = fileUtils.rotateImage(img, img.width, img.height)
                      const newFile = fileUtils.dataURLtoFile(data, file.name)
                      resolve(newFile)
                    }
                }
                reader.readAsDataURL(file)
            } else {
                resolve(file)
            }
          })
        })
    }

 

再上传图片即可,如有疑问可以留言!

 

vue项目el-upload移动端ios手机拍照上传相册旋转90度的问题修复

原文:https://www.cnblogs.com/yuanxinru321/p/11263019.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!