参考资料:https://www.jianshu.com/p/ad4501db178e/
https://github.com/think2011/localResizeIMG
前端图片校准:
这里贴出我使用的前端js,需要引入js
<script type="text/javascript" src="redsize/dist/lrz.bundle.js"></script>
//source是我前端进来的图片资源
var file = source.files[0];
lrz(file).then(function (rst) {
// 处理成功会执行
//res=rst;
//console.log(rst);
// console.log(rst.base64);
})
.catch(function (err) {
// 处理失败会执行
})
.always(function () {
// 不管是成功失败,都会执行
});
下面贴出需要的js下载地址:https://download.csdn.net/download/weixin_42102798/12026883
后端图片校准:
前端不保证完全都能成功,我尝试了一些,有些手机不行。比如手机把摄像头全部倒过来拍一张(人脸向下),发送倒服务器。发现服务器接收的是向右歪的(人脸向右)。前端好的,可以研究一下exif.js 源码。
保证决定性,所以后端也有调整歪斜图片,代码如下:
第一种方式:
import com.drew.imaging.ImageMetadataReader;
import com.drew.metadata.Directory;
import com.drew.metadata.Metadata;
import com.drew.metadata.exif.ExifIFD0Directory;
import com.sun.image.codec.jpeg.ImageFormatException;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGEncodeParam;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;
import java.nio.channels.FileChannel;
import java.util.Iterator;
/**
* 图片旋转工具类
*/
public class PicUtil {
public static void main(String args[]) {
String src = "C:/Users/Administrator/Desktop/5.jpg";
//获取图片旋转角度
int angel = getRotateAngleForPhoto(src);
System.out.println(">>>>>>>>>>>" + angel);
if (angel > 0) {
rotateImage(new File(src), angel);
}
}
/**
* 判断图片是否需要旋转
*/
public static void judgeRotate(String fileName) {
//获取图片旋转角度
int angel = getRotateAngleForPhoto(fileName);
if (angel > 0 && angel < 360) {
rotateImage(new File(fileName), angel);
}
}
/**
* 图片翻转时,计算图片翻转到正常显示需旋转角度
*/
public static int getRotateAngleForPhoto(String fileName) {
File file = new File(fileName);
int angel = 0;
try {
//核心对象操作对象
Metadata metadata = ImageMetadataReader.readMetadata(file);
//获取所有不同类型的Director