jepg图片上传后,换取的url在web的image标签上显示被旋转、

实例:iphone6ps竖拍图片原图上传显示

看图软件打开:

图片为正:

上传后,在image标签内显示为逆时针旋转90度。

此问题在移动端也会出现

因此,决定再上传文件后,由后端统一处理

解决思路:

1、使用exif工具,判断当前图片的Orientation值。

2、将被旋转图片改变其Orientation值后上传,并兑换图片链接,在各个平台显示。

Orientation参数含义:

参数 0行(未旋转上) 0列(未旋转左) 旋转(方法很多)
1
2 水平翻转
3 180°
4 垂直翻转
5 顺时针90°+水平翻转
6 顺时针90°
7 顺时针90°+垂直翻转
8 逆时针90°

package mainimport ("bytes""fmt""image""image/jpeg""io/ioutil""math""os""code.google.com/p/graphics-go/graphics""github.com/rwcarlsen/goexif/exif"
)// png图片没有Orientation信息
func ReadOrientation(filename string) int {file, err := os.Open(filename)if err != nil {fmt.Println("failed to open file, err: ", err)return 0}defer file.Close()x, err := exif.Decode(file)if err != nil {fmt.Println("failed to decode file, err: ", err)return 0}orientation, err := x.Get(exif.Orientation)if err != nil {fmt.Println("failed to get orientation, err: ", err)return 0}orientVal, err := orientation.Int(0)if err != nil {fmt.Println("failed to convert type of orientation, err: ", err)return 0}fmt.Println("the value of photo orientation is :", orientVal)return orientVal
}func RotateImage(src []byte, angle int) ([]byte, error) {var img, _, err = image.Decode(bytes.NewReader(src))//var img, err = GetImage(src)if err != nil {return src, err}angle = angle % 360//弧度转换radian := float64(angle) * math.Pi / 180.0cos := math.Cos(float64(radian))sin := math.Sin(radian)//原图的宽高w := float64(img.Bounds().Dx())h := float64(img.Bounds().Dy())//新图高宽W := int((math.Max(math.Abs(float64(w*cos-h*sin)), math.Abs(w*cos+h*sin))))H := int((math.Max(math.Abs(w*sin-h*cos), math.Abs(w*sin+h*cos))))dst := image.NewNRGBA(image.Rect(0, 0, W, H))err = graphics.Rotate(dst, img, &graphics.RotateOptions{radian})if err != nil {return src, err}file, err := os.Create("newImage.jpg")if err != nil {return src, err}defer file.Close()err = jpeg.Encode(file, dst, &jpeg.Options{50})if err != nil {return src, err}return nil, nil
}func main() {ori := ReadOrientation("bebRotated.jpg")//先读取该图片的原始方向,方向值参考上图,data, err := ioutil.ReadFile("bebRotated.jpg")根据方向值,旋转图片if err != nil {fmt.Println(err)return}fmt.Println(ori)//根据图片原始信息的Orientation判断需要转多少度if ori == 6 {RotateImage(data, 90)}if ori == 3 {RotateImage(data, 180)}if ori == 8 {RotateImage(data, 270)}}

其中使用到"code.google.com/p/graphics-go/graphics"

是翻墙后下载到本地的

资源

图片上传被旋转,golang Exif 判断.jepg图片原始信息Orientation方向,并旋转,相关推荐

  1. php网页中不能上传图片,为什么我的PHP图片上传代码可以实现插入数据库但图片不能插入文件夹中?...

    为什么我的PHP图片上传代码可以实现插入数据库但图片不能插入文件夹中? 关注:167  答案:4  mip版 解决时间 2021-01-19 00:58 提问者慢慢学会遗忘 2021-01-18 00 ...

  2. kindeditor扩展粘贴截图功能修改图片上传路径并通过webapi上传图片到图片服务器...

    2019独角兽企业重金招聘Python工程师标准>>> kindeditor是一个非常好用的富文本编辑器,它的简单使用我就不再介绍了. 而kindeditor却对图片的处理不够理想. ...

  3. 图片上传并保存到数据库以及显示图片

    图片上传并保存到数据库以及显示图片 此处是用保存图片相对路径的方法,上传图片. 1. 首先创建数据库表: create table images ( image_ID int primary key ...

  4. html结构转图片上传服务器并实现点击复制图片到剪贴板

    html结构转图片上传服务器并实现点击复制图片到剪贴板 总结 主要实现了将前端页面上某区域的页面html结构通过html2canvas插件转换成canvas对象,通过canvas对象的toDataUR ...

  5. java多图片上传插件,Bootstrap中的fileinput 多图片上传及编辑功能

    Bootstrap中的fileinput 多图片上传及编辑功能 2019-01-01 编程之家收集整理的这篇文章主要介绍了Bootstrap中的fileinput 多图片上传及编辑功能,编程之家小编觉 ...

  6. PS修改过图片上传服务器,富文本编辑器图片上传base64存数据库改为服务器图片路径...

    目录 一.安装依赖 npm install quill-image-super-solution-module --save PS:如果不想npm引入可以直接把quill-image-super-so ...

  7. java 二进制图片上传_Spring MVC上传图片,Java二进制图片写入数据库,生成略缩图...

    背景描述:最近做到一个项目,有个商品登记功能.登记的信息包括:基本信息若干(文字信息):图片信息,要求将图片保存到数据表中的image字段(sql server 数据库) 步骤:1.将图片上传到服务器 ...

  8. php flash 图片上传,Flash教程:flash+php实现图片上传

    本文主要向大家介绍了flash+php实现图片上传,通过具体的代码向大家展示,希望对大家学习Flash教程有所帮助. flash负责打开browser,浏览我的电脑: 这里我们需要的flash方法有: ...

  9. php多图片上传到数组,input type=file多图片上传 原生html传递的数组集合

    单个的input type="file"表单也是可以实现多图片上传的 代码如下: 这里要给file表单加上一个multiple属性 multiple="multiple& ...

最新文章

  1. 三十六、请求分页管理方式
  2. 智能车竞赛技术报告 | 智能车视觉 - 中国地质大学(武汉) - 2021 地大乘风队
  3. ASP.NET 2.0的编译模型
  4. 套接字选项SO_LINGER
  5. NAPTR和SRV记录
  6. SEGW activation check bypass via debugging
  7. 结构专业规范大全_1.2万篇 建筑行业规范大全套!速来!
  8. 安装openCV到VS2010,Win764位机时遇到的问题的解决办法
  9. 表变量是什么_DAX学习:使用VAR定义变量
  10. Windows Mobile 5.0
  11. 全部博文集锦第三期CHM文件,及十三个经典算法研究PDF文档
  12. 项目管理实践之版本控制工具SVN
  13. Redis结合Lua脚本实现高并发原子性操作
  14. 最小二乘法曲线拟合(c++实现)
  15. android模拟器中关闭应用进程
  16. 七甲川染料CY7标记海藻酸钠|CY7-海藻酸钠|alginate-peg-Cyanine7
  17. 硬件选型之如何看光耦器件的开关频率
  18. 如何确认RNA的质量?附RNA提取实验方法技巧分析
  19. cnpm安装淘宝镜像
  20. sh文件加密解密gzexe(Cannot decompress $0)

热门文章

  1. 你的声音价值百万,教你六个利用声音赚钱的方法
  2. excel快速自动填充空白单元格上一行的内容
  3. Android博通BCM libbt-vendor.so 分析蓝牙初始化流程
  4. 适用场景:All kinds of GCs
  5. 《30天自制操作系统》---第一天
  6. 数据结构之排序:直接插入排序
  7. 火星编年史_雷.布拉德伯里
  8. 使用浏览器保存账号密码并不安全,你的密码可能被坏人记下
  9. Flink入门系列05-时间语义
  10. php仿京东幸运大转盘抽奖,原生js vue 抽奖插件 仿京东大转盘抽京豆(原创)...