Exif.js 读取图像的元数据以及使用方法

Exif.js 读取图像的元数据

在最近的活动中,遇到了用户上传图片时图片方向偏转的问题。针对这个问题,通过google得到exif.js可以获取照片的元数据,例如:拍照方向、相机设备型号、拍摄时间、ISO 感光度、GPS 地理位置等数据。EXIF 数据主要来自拍摄的照片,多用于移动端开发,PC 端也会用到,兼容性良好,兼容主流浏览器,IE10 以下不支持。

Exif.js使用方法

EXIF.getData(document.getElementById('imgElement'), function(){
  EXIF.getAllTags(this);
  EXIF.getTag(this, 'Orientation');
});
  1. API 方法
名称说明
EXIF.getData(img, callback)获取图像的数据
EXIF.getTag(img, tag)获取图像的某个数据
EXIF.getAllTags(img)获取图像的全部数据,值以对象的方式返回
EXIF.pretty(img)获取图像的全部数据,值以字符串的方式返回

2. Tiff相关

名称说明
ImageWidth图像宽度
ImageHeight图像高度
BitsPerSample比特采样率
Compression压缩方法
PhotometricInterpretation像素合成
Orientation拍摄方向
SamplesPerPixel像素数
PlanarConfiguration数据排列
YCbCrSubSampling色相抽样比率
YCbCrPositioning色相配置
XResolutionX方向分辨率
YResolutionY方向分辨率
ResolutionUnit分辨率单位
StripOffsets图像资料位置
RowsPerStrip每带行数
StripByteCounts每压缩带比特数
JPEGInterchangeFormatJPEG SOI 偏移量
JPEGInterchangeFormatLengthJPEG 比特数
TransferFunction转移功能
WhitePoint白点色度
PrimaryChromaticities主要色度
YCbCrCoefficients颜色空间转换矩阵系数
ReferenceBlackWhite黑白参照值
DateTime日期和时间
ImageDescription图像描述、来源
Make生产者
Model型号
Software软件
Artist作者
Copyright版权信息

主要用到的就是以上的部分。

Exif.js代码部分

EXIF.getData(e.target.files['0'],
function() {
    EXIF.getAllTags(this);
    Orientation = EXIF.getTag(this, 'Orientation');
});
var file = e.target.files.item(0);
var freader = new FileReader();
freader.readAsDataURL(file);
freader.onload = function(e) {
    var i = new Image();
    i.src = e.target.result;
    i.onload = function() {
        if (i.width >= 560 && i.height >= 720) {
            if (i.width / i.hehight > 7 / 9) {
                i.width = i.width / i.height * 720;
                i.height = 720;
                if (i.width < 560) {
                    i.height = i.height / i.width * 560;
                    i.width = 560;
                }
            } else {
                i.height = i.height / i.width * 560;
                i.width = 560;
                if (i.height < 720) {
                    i.width = i.width / i.height * 720;
                    i.height = 720;
                }
            }
        } else {
            $(".problem-activity").addClass("pic-bigger");
            $(".problem").css("display", "block");
        }
        var dataURL = "";
        var canvas = document.createElement("canvas");
        var ctx = canvas.getContext("2d");
        if (Orientation != "") {
            switch (Orientation) {
            case 6:
                canvas.width = i.height;
                canvas.height = i.width;
                ctx.rotate(90 * Math.PI / 180);
                ctx.drawImage(i, 0, -i.height, i.width, i.height);
                break;
            case 8:
                canvas.width = i.height;
                canvas.height = i.width;
                ctx.rotate(270 * Math.PI / 180);
                ctx.drawImage(i, -i.width, 0, i.width, i.height);
                break;
            case 3:
                //需要180度旋转
                canvas.width = i.width;
                canvas.height = i.height;
                ctx.rotate(180 * Math.PI / 180);
                ctx.drawImage(i, -i.width, -i.height, i.width, i.height);
                break;
            default:
                canvas.width = i.width;
                canvas.height = i.height;
                ctx.drawImage(i, 0, 0, i.width, i.height);
                break;
            }
       }
   }

以上代码对用户上传的图片先进行大小限制后,再对有偏移的图片进行旋转,使图片恢复正常视角。

以上为exif.js的使用介绍。

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值