`
lvxing607
  • 浏览: 79006 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

ios图片上传翻转问题解决

 
阅读更多
开发微信服务,有个上传头像的功能,前端用html5的方法来上传头像
<img id="babyHead"src="$session.getAttribute('picUrl')"style="width:74px;height:74px;border-radius:37px;"/>
<label class="camera"><i class="fa fa-camera"aria-hidden="true"></i>
<input id="f1"name="f1"class="weui_uploader_input"type="file"capture="camera"accept="image/*"multiple="">
                       
.on("change", "#f1", function(){
        $("#loadingToast").show()
        var fileName = $(this).val();
        if (fileName.length > -1) {
        jQuery.ajaxFileUpload({
    url:jQuery("#confirmUrl").val(),
    type: 'post',
    secureuri:false,
    fileElementId:'f1',
    data:{
    type:'5'},
    dataType:"json",
    success: function(data, status){
    $('#babyHead').attr('src',data.url);
  $('#headUrl').val(data.url);
  $("#loadingToast").hide();
              },error:function(data,status,e){
  alert(e);
  }
  });
        } else {
            alert("请选择图片上传!");
        }
    });
上传到后端的头像竟然会出现各种翻转,基本就是90度的倍数。
查找后得知是ios的拍照片时记录了拍摄的翻转角度。为了把这个角度纠正过来,在java中需要调用metadata-extractor
maven引用如下
<dependency><groupId>com.drewnoakes</groupId><artifactId>metadata-extractor</artifactId><version>2.9.1</version></dependency>
网上很多引用2.3.1的做法,实际上已经不能用了,在2.9.1中原先老的ExifDirector变成了n个directory,我通过for循环挨个试出来,当ExifDirector为ExifIFD0Directory时,才可以调用ExifDirectoryBase.TAG_ORIENTATION来判断翻转的角度,具体方法如下面的代码,我的思路是得到翻转的数值:6,3,8来得到需要右转的角度:90,180,270,然后调用Graphics2D的rotate方法来翻转
1.得到角度
privateintgetRotateAngleForPhoto(String filePath){
        int angle = 0;
        File imgFile = new File(filePath);
        try {
            Metadata metadata = ImageMetadataReader.readMetadata(imgFile);
            for (Directory directory : metadata.getDirectories()) {
                if ("ExifIFD0Directory".equalsIgnoreCase(directory.getClass()
                        .getSimpleName())) {
                    if (directory
                            .containsTag(ExifDirectoryBase.TAG_ORIENTATION)) {
                        // Exif信息中方向  int orientation = directory
                                .getInt(ExifDirectoryBase.TAG_ORIENTATION);
                        logger.info("orientation=" + orientation);
                        switch (orientation) {
                        case6:
                            angle = 90;
                            break;
                        case3:
                            angle = 180;
                            break;
                        case8:
                            angle = 270;
                            break;
                        default:
                            return 0;
                        }

                    }
                }

            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return angle;
    }
2.调用的翻转方法
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Transparency;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

import javax.imageio.ImageIO;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
     * 向右旋转angle角度
     * @param img
     * @param angle
     * @return
     */
    public static void rotate(File image, int angle,String targetFolderPath,String targetFileName) throws IOException {
        BufferedImage img = ImageIO.read(image);
        int w = img.getWidth();
        int h = img.getHeight();
        BufferedImage dimg = new BufferedImage(w, h, img.getType());
        Graphics2D g = dimg.createGraphics();
        g.rotate(Math.toRadians(angle), w / 2, h / 2);
        g.drawImage(img, null, 0, 0);
        commonIoWrite(targetFolderPath, targetFileName, dimg, g);
    }

3.根据翻转的角度来调用对应的rotate方法
intangle = getRotateAngleForPhoto(sourcePath);
if (getRotateAngleForPhoto(sourcePath) > 0) {
    ImageUtil.rotate(new File(smallPath),angle, path, smallFileName);
}
其中smallPath是源文件地址,angle是向右翻转角度,path是目标文件夹,smallFileName是最终的文件名
分享到:
评论

相关推荐

    iOS图片上传到服务器

    **一、使用NSURLSession上传图片** 1. **创建请求对象**: 使用`NSMutableURLRequest`创建一个POST请求,设置URL、HTTP方法("POST")以及Content-Type(一般设为"multipart/form-data",用于上传二进制数据)。 2. ...

    解决ios拍照上传图片被旋转

    总结来说,解决iOS拍照上传图片被旋转的问题,关键在于理解和处理图片的Exif元数据,尤其是Orientation字段。在Java后端处理图片时,我们可以通过读取元数据,判断图片的旋转方向,然后进行适当的旋转操作,确保图片...

    仿IOS activity界面翻转3D动画

    在Android开发中,为了提供与iOS类似的用户体验,开发者有时会尝试实现类似iOS界面翻转3D的动画效果。本教程将深入探讨如何在Android中创建一个仿iOS的Activity间翻转3D动画,以增强应用的视觉吸引力和交互性。 ...

    IOS图片翻转

    在iOS开发中,图片翻转是一项常见的操作,用于实现用户界面中的各种动态效果,比如照片查看器中的旋转、动画中的变换等。这个“IOS图片翻转”涉及到的主要知识点包括UIKit框架中的UIImageView类、CGAffineTransform...

    ios-图片翻转 旋转.zip

    UIImageOrientationUp, UIImageOrientationDown, UIImageOrientationLeft, UIImageOrientationRight, UIImageOrientationUpMirrored, UIImageOrientationDownMirrored, ... ...

    iOS图片上传

    在iOS开发中,图片上传是一项常见的任务,尤其是在社交媒体应用或者任何需要用户分享个人内容的应用中。本篇将详细讲解如何使用著名的网络库AFNetworking实现单张图片的上传操作。 AFNetworking是Objective-C编写的...

    iOS图片翻转

    在iOS开发中,图片翻转是一种常见的动画效果,可以用于创建引人入胜的用户界面。这个Demo展示了如何实现图片的翻转效果,这通常涉及到视图(UIView)的过渡和变换(CGAffineTransform)。让我们深入探讨一下这个话题...

    ios图片上传源码

    上传图片通常先从相册选取或通过相机拍摄得到`UIImage`对象。 - 图片上传过程一般包括:选择图片 -&gt; 图片处理(如压缩) -&gt; 构建请求 -&gt; 发送网络请求 -&gt; 处理响应。 2. **图片压缩**: - 图片压缩可以减少数据...

    IOS上传图片到服务器

    下面是一个基本的Swift示例,展示如何在iOS端上传图片: ```swift import UIKit import Foundation func uploadImage(image: UIImage) { guard let imageData = image.jpegData(compressionQuality: 0.8) else { ...

    IOS上传图片,头像

    在iOS开发中,上传图片和头像是一项常见的任务,特别是在社交应用、个人资料管理或在线服务中。这个过程涉及到图像处理、网络请求以及用户交互等多个环节。以下将详细阐述这一过程中涉及的关键知识点: 1. 图像处理...

    iOS 开发, 本地上传图片

    在iOS开发中,本地上传图片是一项常见的功能,它涉及到用户从设备的相册或相机获取图片,然后将这些图片保存到本地,以便在需要时能够快速读取和展示。这个过程涵盖了许多关键技术点,包括权限管理、图片选择、图片...

    ios-图片上传.zip

    在iOS开发中,图片上传是一项常见的功能,尤其是在社交媒体、电商应用等场景中。这个名为"ios-图片上传.zip"的压缩包很可能包含了一个示例项目,演示如何利用第三方库AFNetworking(简称AFN)实现从相册选择图片或...

    纠正IOS,adroid 上传图片,图片旋转问题

    总的来说,解决iOS和Android上传图片旋转问题的关键在于正确读取和应用Exif元数据中的方向信息。无论是服务器端还是客户端处理,都需要考虑到不同设备和图片格式的差异,确保图片始终能以正确的方式展示。

    iOS上传任意张图片方法封装

    这里定义了一个名为`UpImageByAFNetWorking`的类,它有一个静态方法`uploadImages:withURL:parameters:progress:success:failure:`用于上传图片。方法接受一个UIImage数组、服务器URL、请求参数、上传进度回调、成功...

    php作为服务器接收iOS/Android上传的图片

    2. **iOS和Android上传图片**:移动应用开发者通常使用HTTP或HTTPS协议通过网络发送图片数据。在iOS上,可以使用`NSURLSession`或`Alamofire`库进行网络请求,而在Android中,可以选择`HttpURLConnection`或`...

    web移动端《图片上传》解决ios手机图片横向 模仿微信图片上传 一键式封装

    在Web移动端开发中,图片上传是一项常见的功能,尤其在社交应用和内容分享平台中不可或缺。...通过这样的方式,我们可以为web移动端提供一个类似于微信的图片上传体验,同时解决iOS设备图片方向问题。

    ios多张图片选择上传

    在iOS平台上,开发一款应用允许用户从相册中选择多张图片进行上传是一项常见的功能需求。这个场景通常涉及到多媒体处理、图像选取以及网络上传等多个技术领域。标题"ios多张图片选择上传"和描述"ios 从相册选择多张...

    ios图片上传服务器前的压缩处理

    总之,iOS图片上传服务器前的压缩处理是一项重要的优化工作,它涉及到图片的格式转换、质量调整以及性能优化等多个方面。通过合理地运用系统提供的API和第三方库,可以有效地减小图片大小,满足服务器要求,同时保证...

    ios UIView翻转动画效果

    在iOS开发中,UIView的动画效果是提升用户体验的重要手段之一,尤其在视图切换时,翻转动画可以带来富有立体感和平滑过渡的视觉效果。本主题将详细讲解如何实现"ios UIView翻转动画效果",以及如何在实际项目中应用...

    IOS 七牛上传图片

    本文将详细讲解如何利用七牛SDK在iOS应用中实现图片上传功能,以及如何进行多图上传和获取上传图片的URL。 首先,我们需要在七牛云平台注册账号,创建空间(Bucket),并获取到Access Key和Secret Key,这是进行...

Global site tag (gtag.js) - Google Analytics