java图片像素90翻转_java后台解决上传图片翻转90的问题,有demo,经过测试可用...
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,经过测试可用...相关推荐
- java 图片服务器 上传_Java向服务器上传图片
在比较绚丽多彩的网站或者业务逻辑比较丰富的程序设计过程中,图片的相关操作时必不少的,尤其时图片的上传.还没有彻底摆脱纸质办公可能需要将纸质的文件备份上传,网站的建设可能需要上传用户头像.图片描述等等, ...
- java 图片批量上传_java实现批量上传图片,还要保证每个图片的顺序号,疑问求教!...
rt 我要一次性同时上传n张照片,并且每张照片的顺序号还不一样,第一张的serialno是1,第二张是2.. 一开始我做单张图片上传, 代码如下 @RequestMapping("/picU ...
- C#也能PS图片,还能为网站Ajax上传图片同时生成微缩图(附Demo)
C#也能PS图片,还能为网站Ajax上传图片同时生成微缩图(附Demo) 本文旨在与各位朋友们分享我是如何在项目中用C# "ps图片" 为网站生成同比例微缩图的解决方案.如有不足之 ...
- java 跨域上传_java后台图片跨域上传图片 文件
发送方 @ResponseBody @RequestMapping(value="/imgUpLoadNewOneKuaYu")public String imgUpLoadNew ...
- java 图片合成 红色失真_java 图片合成 解决图片失真问题
源代码/** * * @param filesrc * @param logosrc * @param outsrc * @param x 位置 * @param y 位置 */ public voi ...
- java 图片合成 工具类_Java实现的微信图片处理工具类【裁剪,合并,等比例缩放等】...
本文实例讲述了Java实现的微信图片处理工具类.分享给大家供大家参考,具体如下: 现在 外面核心,图片文章比较少,看了拷贝代码,而用不了,用相应jar包处理,很多等比例缩放,达不到 想要的给予的期望: ...
- java图片转成字符串_JAVA将图片(本地或者网络资源)转为Base64字符串,将base64字符串存储为本地图片...
网络资源代码 import java.io.ByteArrayOutputStream; import java.io.FileOutputStream; import java.io.IOExcep ...
- java 图片合成 红色失真_Java - 处理某些图片泛红
参考博文: http://blog.csdn.net/kobejayandy/article/details/44346809 http://blog.csdn.net/shixing_11/arti ...
- java图片查看器下载_java照片查看器源代码
java照片查看器源代码 package ioStream;import java.awt.AWTEvent;import java.awt.Color;import java.awt.Graphic ...
- java 像素值_(java)图片像素的操作
因为做个游戏,需要一些图片资源,而获取到的图片资源都是jpg格式的,不是透明的,例如下面样式的: 为了取出其中的蓝光部分,透明化黑色背景,我开始了图片处理探索之路. 这篇文章的内容包含以下部分: 1. ...
最新文章
- 通过 for 循环,比较 Python 与 Ruby 编程思想的差别
- 【计算理论】计算理论总结 ( 上下文无关文法 CFG 转为下推自动机 PDA 示例 2 ) ★★
- 太阳表面是怎样的呢?
- CVPR 2019 | PoolNet:基于池化技术的显著性目标检测
- Linux常用的(个人用)
- 黄健翔让赛场上出现大个中文字
- why I cannot set SAP UI5 dropdown list as not selected
- c语言for循环的省略写法,C语言两种for循环写法分析
- 时间同步失败_关于同步、异常处理的思考
- [python] 对于arcpy的简单使用。
- Shader Graph 护盾
- Java JavaEE JavaSE JavaME JavaWEB 之间的区别与联系
- python简单语法题_Python练习+简单语法摘要,习题,总结
- 常见系统安全漏洞及解决方案
- 阿里云---云开发平台的创建与部署
- 关于遥感图像解译的思考
- 小四川#TPP#谭平平越南游记谭之二 国穷民富
- 基于Twitter数据的情感预测与案例分析
- 华为路由器:WLAN直连式三层组网实验
- 14015.xilinx-芯片手册阅读笔记
热门文章
- STM32——HAL库函数版——AD7656驱动程序
- selenium报错 : WebDriverException: ‘chromedriver‘ executable needs to be in PATH解决方案
- Jupyter Notebook从入门到精通
- 解决XCode运行app在模拟器上,提示模拟器不存在
- 汇编程序实现快速排序_用Python 3实现快速排序和插入排序代码详解
- async python两个_Python多线程一览
- 2021-09-1427. 移除元素
- #include <iostream> C++ Hello World!
- 115.不同的子序列
- 从单向链表中删除指定值的节点