手機上傳的圖片翻轉90度問題
網上程式碼整理了下:
public static void main(String[] args) { try { BufferedImage src = ImageIO.read(new File("XXXX.jpeg")); BufferedImage des = RotateImage.Rotate(src, getRotateAngleForPhoto("XXXX.jpeg")); ImageIO.write(des,"jpg",new File("C:\\Users\\xu.haifeng\\Desktop\\aaa.jpg")); } catch (IOException e) { e.printStackTrace(); } }
public class RotateImage { public static BufferedImage Rotate(Image src, int angel) { int src_width = src.getWidth(null); int src_height = src.getHeight(null); // calculate the new image size Rectangle rect_des = CalcRotatedSize(new Rectangle(new Dimension( src_width, src_height)), angel); BufferedImage res = null; res = new BufferedImage(rect_des.width, rect_des.height, BufferedImage.TYPE_INT_RGB); Graphics2D g2 = res.createGraphics(); // transform 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); return res; } public static Rectangle CalcRotatedSize(Rectangle src, int angel) { // if angel is greater than 90 degree, we need to do some conversion if (angel >= 90) { if(angel / 90 % 2 == 1){ int temp = src.height; src.height = src.width; src.width = temp; } angel = angel % 90; } double r = Math.sqrt(src.height * src.height + src.width * src.width) / 2; double len = 2 * Math.sin(Math.toRadians(angel) / 2) * r; double angel_alpha = (Math.PI - Math.toRadians(angel)) / 2; double angel_dalta_width = Math.atan((double) src.height / src.width); double angel_dalta_height = Math.atan((double) src.width / src.height); int len_dalta_width = (int) (len * Math.cos(Math.PI - angel_alpha - angel_dalta_width)); int len_dalta_height = (int) (len * Math.cos(Math.PI - angel_alpha - angel_dalta_height)); int des_width = src.width + len_dalta_width * 2; int des_height = src.height + len_dalta_height * 2; return new Rectangle(new Dimension(des_width, des_height)); }
public static Rectangle CalcRotatedSize(Rectangle src, int angel) { if (angel >= 90) { if (angel / 90 % 2 == 1) { int temp = src.height; src.height = src.width; src.width = temp; } angel = angel % 90; } double r = Math.sqrt(src.height * src.height + src.width * src.width) / 2; double len = 2 * Math.sin(Math.toRadians(angel) / 2) * r; double angel_alpha = (Math.PI - Math.toRadians(angel)) / 2; double angel_dalta_width = Math.atan((double) src.height / src.width); double angel_dalta_height = Math.atan((double) src.width / src.height); int len_dalta_width = (int) (len * Math.cos(Math.PI - angel_alpha - angel_dalta_width)); int len_dalta_height = (int) (len * Math.cos(Math.PI - angel_alpha - angel_dalta_height)); int des_width = src.width + len_dalta_width * 2; int des_height = src.height + len_dalta_height * 2; return new Rectangle(new Dimension(des_width, des_height)); } 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(); } return angle; }}
需要
mediautil-1.0.jar
metadata-extractor-2.3.1.jar相關文章
- wangEditor上傳圖片問題
- laravel上傳圖片路徑問題Laravel
- 跨域CORS圖片上傳問題跨域CORS
- 前端手勢控制圖片外掛書寫四(圖片上傳及Ios圖片方向問題)前端iOS
- 有關laravel 上傳圖片訪問404的問題Laravel
- 手機直播原始碼,前端圖片壓縮上傳需顧及清晰度問題原始碼前端
- canvas簽名圖片上傳及入庫問題Canvas
- 用exfe.js和canvas解決移動端 IOS 拍照上傳圖片翻轉問題JSCanvasiOS
- 求一個手機多選上傳圖片的好外掛
- 上傳圖片
- PbootCMS上傳圖片變模糊、上傳圖片尺寸受限的解決方案boot
- 上傳圖片jsJS
- 裁剪上傳圖片
- electron上傳圖片
- [文件教程]解決sae下編輯器圖片上傳問題
- 圖片上傳及圖片處理
- word轉html用到的圖片路徑替換上傳HTML
- java,springboot + thymeleaf 上傳圖片、刪除圖片到伺服器、本地,壓縮圖片上傳(有些圖片會失真),原圖上傳JavaSpring Boot伺服器
- CSS 例項之翻轉圖片CSS
- 測試圖片上傳
- spring boot 圖片上傳Spring Boot
- 本地Markdown上傳圖片
- 多圖片formpost上傳ORM
- input file圖片上傳
- 圖片問題
- golang對接阿里雲私有Bucket上傳圖片、授權訪問圖片Golang阿里
- mino如何上傳同名的圖片
- ci框架中的圖片上傳框架
- 基於SpringMVC的上傳圖片SpringMVC
- 基於WebUploader的圖片上傳Web
- Flutter 圖片裁剪旋轉翻轉編輯器Flutter
- [提問交流]多圖上傳外掛和系統自帶的圖片上傳不能共存嗎?
- 使用 JavaScript 壓縮和翻轉圖片JavaScript
- 上傳圖片 以及做成縮圖
- vue 上傳圖片進行壓縮圖片Vue
- vue+springboot實現圖片的上傳及回顯失敗問題的解決VueSpring Boot
- Ueditor 上傳圖片自動新增水印(只能上傳圖片,上傳檔案報錯)
- 手機圖片轉換成excel怎麼操作?Excel