我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Exif.js图片旋转修正的方法

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Exif.js图片旋转修正的方法

本文实例为大家分享了Exif.js图片旋转修正的具体方法,供大家参考,具体内容如下

上传后图片旋转修正

测试流程

上传 -> base64展示 -> 获取旋转值 -> 修正 -> 修正后展示 -> 转换blob和file文件供其他功能调用

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name='viewport' content='width=device-width,initial-scale=1.0'>
    <title>测试图片旋转</title>
</head>
<body>
<input type="file" id="test" onchange="upload(event)">
<hr>
图片展示:
<img class="lazy" data-src="" id="img">
<hr>
旋转值:
<div id="rotateval"></div>
<hr>
canvas(旋转修正后):
<canvas id="canvas" width="100%" height="80%"></canvas>
<script class="lazy" data-src="exif.js"></script>
<script>
    function upload(e) {
        var file = e.target.files;

        var reader = new FileReader();
        reader.onload = function(e) {
            var res = reader.result;

            document.getElementById("img").setAttribute('class="lazy" data-src', res);

            EXIF.getData(file[0],
                function() {
                    var Orientation = EXIF.getTag(this, 'Orientation');

                    document.getElementById('rotateval').innerHTML = Orientation;

                    if (Orientation) {

                        var image = new Image();
                        image.class="lazy" data-src = res;
                        image.onload = function() {
                            var expectWidth = this.naturalWidth;
                            var expectHeight = this.naturalHeight;

                            if (this.naturalWidth > this.naturalHeight && this.naturalWidth > 800) {
                                expectWidth = 800;
                                expectHeight = expectWidth * this.naturalHeight / this.naturalWidth;
                            } else if (this.naturalHeight > this.naturalWidth && this.naturalHeight > 1200) {
                                expectHeight = 1200;
                                expectWidth = expectHeight * this.naturalWidth / this.naturalHeight;
                            }

                            var canvas = document.getElementById("canvas");
                            var ctx = canvas.getContext("2d");
                            canvas.width = "800px"; //expectWidth;
                            canvas.height = expectHeight;
                            ctx.drawImage(this, 0, 0, expectWidth, expectHeight);

                            switch (Orientation) {
                            case 6: //需要顺时针(向左)90度旋转
                                rotateImg(this, 'left', canvas);
                                break;
                            case 8: //需要逆时针(向右)90度旋转
                                rotateImg(this, 'right', canvas);
                                break;
                            case 3: //需要180度旋转
                                rotateImg(this, 'right', canvas); //转两次
                                rotateImg(this, 'right', canvas);
                                break;
                            }

                            function rotateImg(img, direction, canvas) {
                                //alert(img);
                                //最小与最大旋转方向,图片旋转4次后回到原方向
                                var min_step = 0;
                                var max_step = 3;
                                //var img = document.getElementById(pid);
                                if (img == null) return;
                                //img的高度和宽度不能在img元素隐藏后获取,否则会出错
                                var height = img.height;
                                var width = img.width;
                                //var step = img.getAttribute('step');
                                var step = 2;
                                if (step == null) {
                                    step = min_step;
                                }
                                if (direction == 'right') {
                                    step++;
                                    //旋转到原位置,即超过最大值
                                    step > max_step && (step = min_step);
                                } else {
                                    step--;
                                    step < min_step && (step = max_step);
                                }
                                //旋转角度以弧度值为参数
                                var degree = step * 90 * Math.PI / 180;
                                var ctx = canvas.getContext('2d');
                                switch (step) {
                                case 0:
                                    canvas.width = width;
                                    canvas.height = height;
                                    ctx.drawImage(img, 0, 0);
                                    break;
                                case 1:
                                    canvas.width = height;
                                    canvas.height = width;
                                    ctx.rotate(degree);
                                    ctx.drawImage(img, 0, -height);
                                    break;
                                case 2:
                                    canvas.width = width;
                                    canvas.height = height;
                                    ctx.rotate(degree);
                                    ctx.drawImage(img, -width, -height);
                                    break;
                                case 3:
                                    canvas.width = height;
                                    canvas.height = width;
                                    ctx.rotate(degree);
                                    ctx.drawImage(img, -width, 0);
                                    break;
                                }

                                uploadfile(canvas);
                            }

                        }
                    }

                });

        }
        reader.readAsDataURL(file[0]);

    }

    function uploadfile(canvas) {
        let class="lazy" data-src = canvas.toDataURL("image/png"); //这里转成的是base64的地址,直接用到img标签的class="lazy" data-src是可以显示图片的

        //转成Blob对象
        function dataURItoBlob(dataURI) { //图片转成Buffer

            //atob() 方法用于解码使用 base-64 编码的字符串。
            //base-64 编码使用方法是 btoa() 。
            var byteString = atob(dataURI.split(',')[1]);
            var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];
            var ab = new ArrayBuffer(byteString.length);
            var ia = new Uint8Array(ab);
            for (var i = 0; i < byteString.length; i++) {
                ia[i] = byteString.charCodeAt(i);
            }
            return new Blob([ab], { type: mimeString });
        }

        var blob = dataURItoBlob(class="lazy" data-src);

        console.log('二进制对象:');
        console.log(blob);

        //转成File对象
        function dataURLtoFile(dataurl, filename) {
            var arr = dataurl.split(','),
                mime = arr[0].match(/:(.*?);/)[1],
                bstr = atob(arr[1]),
                n = bstr.length,
                u8arr = new Uint8Array(n);
            while (n--) {
                u8arr[n] = bstr.charCodeAt(n);
            }
            return new File([u8arr], filename, { type: mime });
        }

        var file_b = dataURLtoFile(class="lazy" data-src, 'test.png');

        var formData = new FormData();
        var columnName = 'img';
        formData.append(columnName, file_b);
        formData.append("filetype", file_b.type);

        console.log('文件对象:');
        console.log(file_b);

    }
</script>
</body>
</html>

解决图片自动旋转问题

exif.js

用于从图像文件中读取EXIF元数据的JavaScript库。

您可以在浏览器中的图像上使用它,从图像或文件输入元素。
检索EXIF和IPTC元数据。这个包也可以在AMD或CommonJS环境中使用。

注意:EXIF标准仅适用于.jpg.tiff图像。
这个包中的EXIF逻辑基于EXIF标准v2.2 (JEITA CP-3451,包含在这个repo中)。

<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <title></title>
    <script class="lazy" data-src="./jquery-1.7.2.min.js"></script>
    <script class="lazy" data-src="./exif.min.js"></script>
</head>

<body>

<img class="lazy" data-src="1.jpg" id="J-logo"/>
<script type="text/javascript">
    var getor = function() {
        EXIF.getData(document.getElementById("J-logo"),
            function() {
                var aaa = EXIF.getAllTags(this);
                var orp = EXIF.getTag(this, 'Orientation');
                if (orp == 1) {
                    $("#J-logo").css("transform", "rotate(0deg)");
                } else if (orp == 3) {
                    $("#J-logo").css("transform", "rotate(180deg)");
                } else if (orp == 6) {
                    $("#J-logo").css("transform", "rotate(90deg)");
                } else if (orp == 8) {
                    $("#J-logo").css("transform", "rotate(270deg)");
                }
            });
    }
    setTimeout('getor()', 1);
</script>
</body>

</html>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Exif.js图片旋转修正的方法

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Exif.js图片旋转怎么修正

这篇文章主要介绍“Exif.js图片旋转怎么修正”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Exif.js图片旋转怎么修正”文章能帮助大家解决问题。上传后图片旋转修正测试流程上传 -> base6
2023-06-29

旋转图片两种方法

这两种方法在旋转图像时,可能会产生一些不同的效果: rotate_image_new()旋转后的图像完全包含旋转前的内容,并且填充边界尽可能小 rotate_image() 保持原始图像的大小,并根据填充选项决定是否填充边界为白色。如果 i
2023-08-30

PHP实现图片旋转的方法详解

这篇文章主要为大家详细介绍了PHP如何实现图片旋转功能,文中的示例代码讲解详细,对我们学习PHP有一定帮助,感兴趣的小伙伴可以了解一下
2022-11-13

Android实现旋转,放大,缩小图片的方法

本文实例讲述了Android实现旋转,放大,缩小图片的方法。分享给大家供大家参考,具体如下: 项目中需要做到一个预览图片的功能 最初设想自定义个一个view,在onDraw中用的是生成新的Bitmap,来放大,缩小 但由于手机内存是有限制的
2022-06-06

C++实现旋转图像的方法

这篇文章主要讲解了“C++实现旋转图像的方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++实现旋转图像的方法”吧!Rotate Image 旋转图像You are given an n
2023-06-20

Win7系统中让画图工具输入的文字旋转90°的修正方法图文介绍

最近小编在使用Win7系统自带的画图软件添加文字时,每个文字都向左旋转90度,如图denaRDrOg所示,所有的字都是旋转90°的,如下:细心分析了下,找到了答案: 出现旋转的字,是js因为在写字的字体选择时javascript,选
2023-06-01

Android开发之图片旋转功能实现方法【基于Matrix】

本文实例讲述了Android开发之图片旋转功能实现方法。分享给大家供大家参考,具体如下:在Android中进行图像旋转需要使用Matrix,它包含了一个3*3的矩阵,专门用于进行图像变换匹配。Matrix ,中文里叫矩阵,高等数学里有介绍,
2023-05-30

VB.NET中心旋转图像的实现方法

这篇文章主要讲解了“VB.NET中心旋转图像的实现方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“VB.NET中心旋转图像的实现方法”吧!我们在学习一门编程语言的时候,需要通过不断的实践去
2023-06-17

计算机中旋转图片的快捷方式是什么

小编给大家分享一下计算机中旋转图片的快捷方式是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!旋转图片的快捷方式是:1、从左向右顺时针旋转的快捷键是“Ctrl+
2023-06-20

Android开发实现图片平移、缩放、倒影及旋转功能的方法

本文实例讲述了Android开发实现图片平移、缩放、倒影及旋转功能的方法。分享给大家供大家参考,具体如下:解析:1)根据原来的图片创建新的图片Bitmap modBm = Bitmap.createBitmap(bm.getWidth()+
2023-05-30

如何通过纯CSS实现图片的缩放旋转效果的方法和技巧

如何通过纯CSS实现图片的缩放旋转效果的方法和技巧CSS是前端开发中常用的一种样式语言,它可以用来定义网页的布局、颜色、字体等样式。除了这些基础功能之外,CSS还可以实现一些令人惊叹的效果,比如图片的缩放旋转。本文将介绍如何通过纯CSS实现
2023-10-26

如何通过纯CSS实现图片的旋转平移效果的方法和技巧

在现代web设计中,动画效果已经成为了吸引用户注意力和提升用户体验的重要组成部分。而图片的旋转平移效果是其中一个较为常见的动画效果。在本文中,我将介绍如何通过纯CSS来实现这个效果,并提供具体的代码示例。让我们一起来学习吧!首先,我们需要一
2023-10-21

Android部分手机拍照后获取的图片被旋转问题的解决方法

调用Android系统拍照功能后,三星手机拍摄后的照片被旋转了90度,横着拍给你变成竖的,竖的拍给你变成横的。其它品牌的手机都是正常的,就三星出现这个怪事。在Android适配上,我原来一直以为国内的小米手机够奇葩了,结果还有更奇葩的!你说
2022-06-06

python webp图片格式转化的方法

本文实例为大家分享了python webp图片格式转化的具体代码,供大家参考,具体内容如下 1、将本地的webp图片转换为jpg 2、将下载的webp格式图片直接保存为jpg 代码如下: 1、将本地的webp图片转换为jpgfrom PIL
2022-06-02

如何通过纯CSS实现图片的3D立体旋转效果的方法和技巧

如何通过纯CSS实现图片的3D立体旋转效果的方法和技巧,需要具体代码示例随着Web技术的发展,我们可以通过CSS实现各种令人惊叹的效果,其中包括图片的3D立体旋转效果。本文将介绍如何通过纯CSS实现这样的效果,并提供具体的代码示例,帮助读者
2023-10-24

编程热搜

目录