相机图像改变方向 [英] Camera image changes orientation

查看:112
本文介绍了相机图像改变方向的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直试图将相机图像从iPhone上传到我的网络服务器,但有些图像会在病房后改变它的方向。这只发生在相机图像上,而不是从我的机器上传到设备的简单图像。

I been trying to upload camera images from iPhone to my web server but some how the images change it's orientation after wards. This only happens with camera images and not simple images uploaded to device from my machine.

以下是代码:

    NSData *imgdataRepresentation = UIImageJPEGRepresentation(imgTemp, 0.5);


    ///////**********************************************
    // setting up the URL to post to
    NSString *addPhotoURL = [NSString stringWithFormat:@"%@%@%@",HTTP_HOST,ADD_PHOTO_URL,[userInfo.userDetail objectForKey:@"id"]];

    // setting up the request object now
    NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease];
    [request setURL:[NSURL URLWithString:addPhotoURL]];
    [request setHTTPMethod:@"POST"];

    /*
     add some header info now
     we always need a boundary when we post a file
     also we need to set the content type

     You might want to generate a random boundary.. this is just the same
     as my output from wireshark on a valid html post
     */
    NSString *boundary = [NSString stringWithString:@"---------------------------14737809831466499882746641449"];
    NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary];
    [request addValue:contentType forHTTPHeaderField: @"Content-Type"];

    /*
     now lets create the body of the post
     */
    NSMutableData *body = [NSMutableData data];
    [body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:[[NSString stringWithString:@"Content-Disposition: form-data; name=\"Album\"; filename=\"ipodfile.jpg\"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:[[NSString stringWithString:@"Content-Type: application/octet-stream\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:[NSData dataWithData:imgdataRepresentation ]];
    [body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
    // setting the body of the post to the reqeust
    [request setHTTPBody:body];

    // now lets make the connection to the web
    NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
    NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding];


推荐答案

无论如何,iPhone图像始终以相同的方式存储手机被保留,但EXIF数据中设置了一个标志,指定图像应该在哪个方向。几乎所有本机OSX应用程序(如iPhoto和Preview)都可以正确读取此EXIF方向标签并自动旋转图像,但几乎所有Windows应用程序和Web浏览器不考虑方向EXIF标记。在保存之前,您必须手动旋转Web服务器上的图像。我不知道您使用哪种Web服务器技术,但执行此操作的C#代码是:

iPhone images are always stored the same way regardless of how the phone is held, but a flag is set in the EXIF data that specifies which orientation the image should be in. Almost all native OSX applications such as iPhoto and Preview can read this EXIF orientation tag correctly and rotates the image automatically, but almost all Windows applications and web browsers don't take the orientation EXIF tag into account. You'll have to manually rotate the image on the web server before saving it. I don't know which web server technology you use, but the C# code to do this is:

public static void FixOrientation(this Image image)
{
    // 0x0112 is the EXIF byte address for the orientation tag
    if (!image.PropertyIdList.Contains(0x0112))
    {
        return;
    }

    // get the first byte from the orientation tag and convert it to an integer
    var orientationNumber = image.GetPropertyItem(0x0112).Value[0];

    switch (orientationNumber)
    {
        // up is pointing to the right
        case 8:
            image.RotateFlip(RotateFlipType.Rotate270FlipNone);
            break;
        // up is pointing to the bottom (image is upside-down)
        case 3:
            image.RotateFlip(RotateFlipType.Rotate180FlipNone);
            break;
        // up is pointing to the left
        case 6:
            image.RotateFlip(RotateFlipType.Rotate90FlipNone);
            break;
        // up is pointing up (correct orientation)
        case 1:
            break;
    }
}

这篇关于相机图像改变方向的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆