更新 : 2019-01-02

refer

https://stackoverflow.com/questions/3129099/how-to-flip-images-horizontally-with-html5 (使用 canvas 做 flip)

https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/scale

之前没有说到关于 flip 的概念

当我们用手机自拍时, 屏幕中我们看见的是镜子中的自己,并不是别人眼中的自己哦.

那拍出来的图片也会有这个 exif information

按理说我们在拍摄时屏幕出现的结果就应该是最终图像的结果,但是自拍 = 镜子中的你,显然有点怪,自己看不起怪,别人看就怪怪的

所以一般上遇到这类的图片我们需要 flip, 反向回去.

上面 2 个 refer 是说 canvas 如果做到这个效果,  在 crop 图的时候可以用上.

asp.net core 用 Magick.NET 这个库,里头也是有 .flip() 这个功能.

注 :不同手机对图片的处理是不同的

比如 iphone 自拍是没有 2,4,5,7 的,iphone 会先 flip 然后在 rotate 然后修改掉 exif, 比如你自拍 2, iphone 输出的图片是 3 (很奇怪为什么不弄成 1 呢 ?)

华为则是直接 flip rotate 美美然后把 exif orientation 删除

小米很奇葩, 它虽然和华为一样, rotate 美美然后 exif 干掉 但是它不会 flip.... 所以自拍出来的图片是镜子中的人...

https://stackoverflow.com/questions/20600800/js-client-side-exif-orientation-rotate-and-mirror-jpeg-images

https://foobuzz.github.io/

https://www.thoughtco.com/why-is-my-picture-turned-sideways-1701398

http://cloudinary.com/blog/top_10_mistakes_in_handling_website_images_and_how_to_solve_them

市场上大部分的相机,手机拍摄出来的图片都是横的. 不管你怎么旋转你的手机, 最终的图片一定是横的.

但是呢, 手机会提供一个叫 Exif 的资料, 里头有表面你在拍摄时的手机方向.

这是标准方向

这是 90 度的方向

所有的图片展示软件都依据图片和旋转信息 Exif 来呈现图片最终的样子.

如果一张图的 Exif 丢失了, 或被串改了, 就有可能导致展示的结果出错. 这就是你经常会看见图片颠倒的原因.

然而当前的游览器在展示图片时, 都不参考 Exif 信息, 目前只有 IOS safari 会处理. 所以这种颠倒的画面在游览器更常见.

那么我们该i怎么处理呢?

如果网页的图片都是通过网页 upload 的,那么在 upload 的时候我们需要把带有 exif 信息的图片转换成没有 exif 的图片 ( 这里需要旋转到正确方向 )

exif.js 可以获取到图片信息, 然后通过 canvas 我们可以轻易的重绘一张图(要旋转到对的方向哦). 之后我们就可以把信息丢掉了.

注 :png 是没有 exif 的哦, 好像是只有 jpg jpeg 有罢了.

图片方向 image orientation Exif的更多相关文章

  1. 使用WebUploader使用,及使用后测试横拍或竖拍图片图片方向不对等解决方案

    WebUploader是由Baidu WebFE(FEX)团队开发的一个简单的以HTML5为主,FLASH为辅的现代文件上传组件.在现代的浏览器里面能充分发挥HTML5的优势,同时又不摒弃主流IE浏览 ...

  2. Java读取图片exif信息实现图片方向自动纠正

    起因 一个对试卷进行OCR识别需求,需要实现一个功能,一个章节下的题目图片需要上下拼接合成一张大图,起初写了一个工具实现图片的合并,程序一直很稳定的运行着,有一反馈合成的图片方向不对,起初怀疑是本身图 ...

  3. 修正ios h5上传图时的图片方向问题

     .ios上传会在exif中带一个 Orientation的属性,这个属性在windows中不会生效,在ios浏览器中会生效,造成图片在windows资源管理器中与ios浏览器中方向不一致  为了用户 ...

  4. 前端手势控制图片插件书写四(图片上传及Ios图片方向问题)

    1.在图片上传中,使用的input的type为File的属性.使用filereader的Api let that = this; var file = document.getElementById( ...

  5. 修正iOS从照相机和相册中获取的图片 方向

    修正iOS从照相机和相册中获取的图片 方向   修正iOS从照相机和相册中获取的图片 方向 使用系统相机拍照得到的图片的默认方向有时不是ImageOrientationDown,而是ImageOrie ...

  6. iOS 上传的图片在HTML上显示时,图片方向信息(EXIF Orientation)异常

    将iPhone 6s拍摄的照片上传到服务器之后, 在Web网页上看到图片被逆时针旋转了90度, 这让我很惆怅呐! 出现这个问题其实是因为上传的图片为.jpg格式,.jpg文件含有EXIF信息, 其中E ...

  7. 在web中如何调整上传过的图片方向 (exif)

    前提: 相机中拍的照片放到web上不会自动识别方向,如有些竖向显示的照片放到web上横向显示.这些照片在windows上是正确显示的.但是web不会自动旋转照片到正确方向.下面我们通过两种方法来实现这 ...

  8. 修正iOS从照相机和相册中获取的图片方向(转)

    - (UIImage *)fixOrientation { // No-op if the orientation is already correct if (self.imageOrientati ...

  9. 修正iOS从照相机和相册中获取的图片方向

    使用系统相机拍照得到的图片的默认方向有时不是ImageOrientationDown,而是ImageOrientationLeft,在使用的时候会出现图片顺时针偏转90°.使用fixOrientati ...

随机推荐

  1. 一次 Java 内存泄漏排查过程,涨姿势

    人人都会犯错,但一些错误是如此的荒谬,我想不通怎么会有人犯这种错误.更没想到的是,这种事竟发生在了我们身上.当然,这种东西只有事后才能发现真相.接下来,我将讲述一系列最近在我们一个应用上犯过的这种错误 ...

  2. openstack components internal relations

    1.  各个组件之间可以互相调用(都是common sense) conductor 负责DB的操作. 各个组件之间通过RPC, 序列化通过oslo_versionedobjects. 2. 具体调用 ...

  3. vue 学习一些好的文档网址推荐

    相关文章   1. vue.js 2.x 文档  http://cn.vuejs.org https://vue.docschina.org/ 2. npm https://www.npmjs.com ...

  4. Docker基础学习-尚硅谷

    视频地址:链接: https://pan.baidu.com/s/15sJuEh5cVTJ7-vWSH7vffw 提取码: zf25 笔记:

  5. ERROR: please install the following Perl modules before executing ./mysql_install_db

    centos7.5 安装mysql数据库报错 问题: [root@db02-52 scripts]# ./mysql_install_db --user=mysql --basedir=/applic ...

  6. 关于 RabbitMQ 的 Dead-Letters-Queue “死信队列”

      来自一个队列的消息可以被当做‘死信’,即被重新发布到另外一个“exchange”去,这样的情况有: 消息被拒绝 (basic.reject or basic.nack) 且带 requeue=fa ...

  7. 今天的任务--git练习

    克隆远程仓库项目 从版本控制中选择git 填写地址和本地目录,test测试成功后点击clone 克隆完成回到主界面,点击open打开刚才克隆的项目 git操作 添加文件py1.html 打开命令行 新 ...

  8. 高级定时器TIM1&TIM8

                                               高级定时器 初识stm32高级定时器:      (1)高级控制定时器(TIM1 和 TIM8)和通用定时器在基本 ...

  9. Python 安装与环境变量配置

    一.软件下载 Python安装包下载地址:https://www.python.org/ 二.安装过程(略) 三.环境变量配置: 方法一:使用cmd命令添加path环境变量 在cmd下输入: path ...

  10. jQuery实现Marquee

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <meta na ...