ImageUtils.java 5.43 KB
package com.sincere.weigeng;

import com.drew.imaging.ImageMetadataReader;
import com.drew.imaging.jpeg.JpegMetadataReader;
import com.drew.metadata.Directory;
import com.drew.metadata.Metadata;
import com.drew.metadata.Tag;
import com.sun.imageio.plugins.png.PNGImageReader;
import org.apache.commons.lang.StringUtils;

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Iterator;

public class ImageUtils {


   /* *//**
     * 获取图片正确显示需要旋转的角度(顺时针)
     * @return
     *//*
    public static int getRotateAngleForPhoto(String filePath){
        File file = new File(filePath);
        int angle = 0;
        Metadata metadata;
        try {
            metadata = JpegMetadataReader.readMetadata(file);
            Directory directory = metadata.getDirectory(ExifDirectory.class);
            if(directory.containsTag(ExifDirectory.TAG_ORIENTATION)){

                // Exif信息中方向  
                int orientation = directory.getInt(ExifDirectory.TAG_ORIENTATION);
                // 原图片的方向信息
                if(6 == orientation ){
                    //6旋转90
                    angle = 90;
                }else if( 3 == orientation){
                    //3旋转180
                    angle = 180;
                }else if( 8 == orientation){
                    //8旋转90
                    angle = 270;
                }
            }
        } catch (JpegProcessingException e) {
            e.printStackTrace();
        } catch (MetadataException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return angle;
    }*/


    /**
     * 获得图片调整角度
     * make by dongxh 2017年11月1日下午3:40:20
     * @param imgFile
     * @return
     */
    public static Integer getImgRotateAngle(String imgFile){
        return 0;
        /*int angel = 0;
        try {
            File file = new File(imgFile);
            Metadata metadata = ImageMetadataReader.readMetadata(file);
            for (Directory directory : metadata.getDirectories()) {
                for (Tag tag : directory.getTags()) {
                    if (tag.getTagType() == ExifDirectoryBase.TAG_ORIENTATION) {
                        String description = tag.getDescription();
//						System.out.println(description);
                        if (description.contains("90")) {
                            // 顺时针旋转90度
                            angel = 90;
                        } else if (description.contains("180")) {
                            // 顺时针旋转180度
                            angel = 180;
                        } else if (description.contains("270")) {
                            // 顺时针旋转270度
                            angel = 270;
                        }
                    }
                }
            }
//			System.out.println(angel);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return angel;*/
        /*Integer angel = 0;
        Metadata metadata = null;
        try{
            if(StringUtils.isBlank(imgFile))return angel;
            File _img_file_ = new File(imgFile);
            if(!_img_file_.exists())return angel;
            metadata = JpegMetadataReader.readMetadata(_img_file_);
            Directory directory = metadata.getDirectory(ExifDirectory.class);
            Iterator iterator =directory.getTagIterator();
            while (iterator.hasNext()){
                System.out.println("directory:"+iterator.next().toString());
            }
            if(directory != null && directory.containsTag(ExifDirectory.TAG_ORIENTATION)){
                int orientation = directory.getInt(ExifDirectory.TAG_ORIENTATION);
                // 原图片的方向信息
                if(6 == orientation ){
                    //6旋转90
                    angel = 90;
                }else if( 3 == orientation){
                    //3旋转180
                    angel = 180;
                }else if( 8 == orientation){
                    //8旋转90
                    angel = 270;
                }
            }
        }catch(Exception e){
            e.printStackTrace();
        }
        return angel;*/
    }

    /**
     * 旋转照片
     * @return
     */
    public static String rotatePhonePhoto(String fullPath, int angel){

        BufferedImage src;
        try {
            src = ImageIO.read(new File(fullPath));
            int src_width = src.getWidth(null);
            int src_height = src.getHeight(null);

            int swidth=src_width;
            int sheight=src_height;

            if(angel==90||angel==270){
                swidth = src_height;
                sheight= src_width;
            }

            Rectangle rect_des = new Rectangle(new Dimension(swidth,sheight));

            BufferedImage res = new BufferedImage(rect_des.width, rect_des.height,BufferedImage.TYPE_INT_RGB);
            Graphics2D g2 = res.createGraphics();

            g2.translate((rect_des.width - src_width) / 2,
                    (rect_des.height - src_height) / 2);
            g2.rotate(Math.toRadians(angel), src_width / 2, src_height / 2);

            g2.drawImage(src, null, null);

            ImageIO.write(res, "jpg", new File(fullPath));

        } catch (IOException e) {

            e.printStackTrace();
        }

        return fullPath;

    }

}