1.需要加入 依赖

metadata-extractor.jar

依赖如下

com.drewnoakes

metadata-extractor

2.11.0

org.springframework.boot

spring-boot-starter-thymeleaf

org.springframework.boot

spring-boot-starter-web

org.springframework.boot

spring-boot-starter-test

test

2.主要看工具类,ImageUtil,因为是mvc上传图片,所以之前参数我参考别人代码 改了一下.

package com.huarui.util;

import java.awt.Dimension;

import java.awt.Graphics2D;

import java.awt.Rectangle;

import java.awt.RenderingHints;

import java.awt.image.BufferedImage;

import java.io.File;

import java.io.FileInputStream;

import java.io.IOException;

import java.io.InputStream;

import java.util.HashMap;

import java.util.Map;

import javax.imageio.ImageIO;

import com.drew.imaging.ImageMetadataReader;

import com.drew.imaging.ImageProcessingException;

import com.drew.metadata.Directory;

import com.drew.metadata.Metadata;

import com.drew.metadata.Tag;

public class ImageUtil {

public static Map getExif(InputStream inputStream) {

Map map = new HashMap();

try {

Metadata metadata = ImageMetadataReader.readMetadata(inputStream);

map = printExif(metadata);

} catch (ImageProcessingException e) {

System.out.println(e.getMessage());

} catch (IOException e) {

System.out.println(e.getMessage());

}

return map;

}

// 获取exif信息,将旋转角度信息拿到

private static Map printExif(Metadata metadata) {

Map map = new HashMap();

String tagName = null;

String desc = null;

for (Directory directory : metadata.getDirectories()) {

for (Tag tag : directory.getTags()) {

tagName = tag.getTagName();

desc = tag.getDescription();

if (tagName.equals("Orientation")) {

map.put("Orientation", desc);

}

}

}

return map;

}

public static int getAngle(Map map) {

int ro = 0;

if(map.get("Orientation")!=null) {

String ori = map.get("Orientation").toString();

if (ori.indexOf("90") >= 0) {

ro = 1;

} else if (ori.indexOf("180") >= 0) {

ro = 2;

} else if (ori.indexOf("270") >= 0) {

ro = 3;

}

}

return ro;

}

public static BufferedImage getBufferedImg(BufferedImage src,int width, int height, int ro) {

int angle = (int) (90 * ro);

int type = src.getColorModel().getTransparency();

int wid = width;

int hei = height;

if (ro % 2 != 0) {

int temp = width;

width = height;

height = temp;

}

Rectangle re = new Rectangle(new Dimension(width, height));

BufferedImage BfImg = null;

BfImg = new BufferedImage(re.width, re.height, type);

Graphics2D g2 = BfImg.createGraphics();

g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);

g2.rotate(Math.toRadians(angle), re.width / 2,re.height / 2);

g2.drawImage(src, (re.width - wid) / 2, (re.height - hei) / 2, null);

g2.dispose();

return BfImg;

}

//获得图片的高

public static int getHeight(InputStream is) {

BufferedImage src = null;

int height = -1;

try {

src = ImageIO.read(is);

height = src.getHeight();

} catch (Exception e) {

System.out.println(e.getMessage());

}

return height;

}

//获得图片的宽

public static int getWidth(InputStream is) {

BufferedImage src = null;

int width = -1;

try {

src = ImageIO.read(is);

width = src.getWidth();

} catch (Exception e) {

System.out.println(e.getMessage());

}

return width;

}

}

3.Ctroller

package com.huarui.action;

import com.huarui.util.ImageUtil;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestBody;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestParam;

import org.springframework.web.bind.annotation.ResponseBody;

import org.springframework.web.multipart.MultipartFile;

import javax.imageio.ImageIO;

import java.awt.image.BufferedImage;

import java.io.File;

import java.io.IOException;

@Controller

public class UploadController {

@RequestMapping("/upload")

public @ResponseBody String fileUpload(MultipartFile file) throws IOException {

File localFile = new File("e://a.jpg");

String ex = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));

//图片翻转90

int angle = ImageUtil.getAngle(ImageUtil.getExif(file.getInputStream()));

BufferedImage bf =ImageUtil.getBufferedImg(ImageIO.read(file.getInputStream()), ImageUtil.getWidth(file.getInputStream()), ImageUtil.getHeight(file.getInputStream()), angle);

ImageIO.write(bf, ex.substring(1), localFile);

//度问题

return localFile.getAbsolutePath();

}

@RequestMapping("/")

public String index(){

return "test";

}

}

亲测有效,附上链接->

java图片像素90翻转_java后台解决上传图片翻转90的问题,有demo,经过测试可用...相关推荐

  1. java 图片服务器 上传_Java向服务器上传图片

    在比较绚丽多彩的网站或者业务逻辑比较丰富的程序设计过程中,图片的相关操作时必不少的,尤其时图片的上传.还没有彻底摆脱纸质办公可能需要将纸质的文件备份上传,网站的建设可能需要上传用户头像.图片描述等等, ...

  2. java 图片批量上传_java实现批量上传图片,还要保证每个图片的顺序号,疑问求教!...

    rt 我要一次性同时上传n张照片,并且每张照片的顺序号还不一样,第一张的serialno是1,第二张是2.. 一开始我做单张图片上传, 代码如下 @RequestMapping("/picU ...

  3. C#也能PS图片,还能为网站Ajax上传图片同时生成微缩图(附Demo)

    C#也能PS图片,还能为网站Ajax上传图片同时生成微缩图(附Demo) 本文旨在与各位朋友们分享我是如何在项目中用C# "ps图片" 为网站生成同比例微缩图的解决方案.如有不足之 ...

  4. java 跨域上传_java后台图片跨域上传图片 文件

    发送方 @ResponseBody @RequestMapping(value="/imgUpLoadNewOneKuaYu")public String imgUpLoadNew ...

  5. java 图片合成 红色失真_java 图片合成 解决图片失真问题

    源代码/** * * @param filesrc * @param logosrc * @param outsrc * @param x 位置 * @param y 位置 */ public voi ...

  6. java 图片合成 工具类_Java实现的微信图片处理工具类【裁剪,合并,等比例缩放等】...

    本文实例讲述了Java实现的微信图片处理工具类.分享给大家供大家参考,具体如下: 现在 外面核心,图片文章比较少,看了拷贝代码,而用不了,用相应jar包处理,很多等比例缩放,达不到 想要的给予的期望: ...

  7. java图片转成字符串_JAVA将图片(本地或者网络资源)转为Base64字符串,将base64字符串存储为本地图片...

    网络资源代码 import java.io.ByteArrayOutputStream; import java.io.FileOutputStream; import java.io.IOExcep ...

  8. java 图片合成 红色失真_Java - 处理某些图片泛红

    参考博文: http://blog.csdn.net/kobejayandy/article/details/44346809 http://blog.csdn.net/shixing_11/arti ...

  9. java图片查看器下载_java照片查看器源代码

    java照片查看器源代码 package ioStream;import java.awt.AWTEvent;import java.awt.Color;import java.awt.Graphic ...

  10. java 像素值_(java)图片像素的操作

    因为做个游戏,需要一些图片资源,而获取到的图片资源都是jpg格式的,不是透明的,例如下面样式的: 为了取出其中的蓝光部分,透明化黑色背景,我开始了图片处理探索之路. 这篇文章的内容包含以下部分: 1. ...

最新文章

  1. 通过 for 循环,比较 Python 与 Ruby 编程思想的差别
  2. 【计算理论】计算理论总结 ( 上下文无关文法 CFG 转为下推自动机 PDA 示例 2 ) ★★
  3. 太阳表面是怎样的呢?
  4. CVPR 2019 | PoolNet:基于池化技术的显著性目标检测
  5. Linux常用的(个人用)
  6. 黄健翔让赛场上出现大个中文字
  7. why I cannot set SAP UI5 dropdown list as not selected
  8. c语言for循环的省略写法,C语言两种for循环写法分析
  9. 时间同步失败_关于同步、异常处理的思考
  10. [python] 对于arcpy的简单使用。
  11. Shader Graph 护盾
  12. Java JavaEE JavaSE JavaME JavaWEB 之间的区别与联系
  13. python简单语法题_Python练习+简单语法摘要,习题,总结
  14. 常见系统安全漏洞及解决方案
  15. 阿里云---云开发平台的创建与部署
  16. 关于遥感图像解译的思考
  17. 小四川#TPP#谭平平越南游记谭之二 国穷民富
  18. 基于Twitter数据的情感预测与案例分析
  19. 华为路由器:WLAN直连式三层组网实验
  20. 14015.xilinx-芯片手册阅读笔记

热门文章

  1. STM32——HAL库函数版——AD7656驱动程序
  2. selenium报错 : WebDriverException: ‘chromedriver‘ executable needs to be in PATH解决方案
  3. Jupyter Notebook从入门到精通
  4. 解决XCode运行app在模拟器上,提示模拟器不存在
  5. 汇编程序实现快速排序_用Python 3实现快速排序和插入排序代码详解
  6. async python两个_Python多线程一览
  7. 2021-09-1427. 移除元素
  8. #include <iostream> C++ Hello World!
  9. 115.不同的子序列
  10. 从单向链表中删除指定值的节点