移动端h5页面拍照上传图片的时候图片旋转问题

本文介绍了在移动端H5页面中,针对iOS设备拍照上传图片时出现的旋转问题的解决方案。通过三个步骤:检查图片旋转情况、旋转图片以及上传旋转后的文件流,详细阐述了解决此问题的方法,包括使用第三方库获取图片信息、利用canvas处理图片旋转,并提供了完整代码的GitHub链接。
摘要由CSDN通过智能技术生成

0. 问题描述

在项目中有个图片上传的组件(vue项目)

<input
   ref="input"
   type="file"
   multiple="false"
   accept="image/*"
   @change="handleChange">

在ios中点击的时候会有一个拍照的选项,但是!!!拍照的时候手机拿的方向不同,上传的图片会出现不同角度的旋转,具体现象如下:
在这里插入图片描述
所以我们需要将旋转了的图片再转回来!!!

具体实现思路:
1. 知道图片文件当前的旋转情况
2. 将图片文件旋转指定角度
3. 上传旋转后的文件流


1. 步骤一:获取图片文件的旋转情况

每张图片文件都有其对应的数据信息,这里我们通过第三方库exif-js来获取图片的一些信息

(1) 安装依赖

npm i exif-js -D

(2) 写一个获取图片信息的通用方法

import Exif from 'exif-js';

/**
 * @desc 获取图片信息,使用exif.js库,具体用法请在github中搜索
 * @param {Object} file 上传的图片文件
 * @param {String} tag 需要获取的信息 例如:'Orientation'旋转信息
 * @return {Promise<Any>} 读取是个异步操作,返回指定的图片信息
 */
export const getImageTag = (file, tag) => {
   
    if (!file) return 0;
    return new Promise((resolve, reject) => {
   
        /* eslint-disable func-names */
        // 箭头函数会修改this,所以这里不能用箭头函数
        Exif.getData(file, function () {
   
            const o = Exif.getTag(this, tag);
            resolve(o);
        });
    });
};

(3) 调用该方法获取图片的旋转信息

...
// file是表单上传时通过e.target.file获取到的文件流
const or = await getImageTag(file, 
  • 5
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 24
    评论
评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值