Изображение вращается при отправке только в составном почтовом запросе на внутренний сервер

Я делаю почтовый запрос, используя составные данные формы. со следующим кодом я могу отправить изображение, но когда я иду на внутренний сервер и проверяю, изображение, которое я отправил, вращается там. кто-нибудь знает, почему это происходит?

NSURL *reqUrl = [NSURL URLWithString:self.dataModel.apiUrl];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:reqUrl];
NSString *boundary = @"---------------------------14737809831466499882746641449";
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary];
[request addValue:contentType forHTTPHeaderField: @"Content-Type"];
[request setHTTPMethod:@"POST"];


NSDictionary *requestBody = self.dataModel.requestParams2;
UIImage *imageToUpload = [requestBody objectForKey:keyUploadImage];
    if(requestBody){
        NSMutableData *body = [NSMutableData data];
          float low_bound = 0;
    float high_bound =5000;
    float rndValue = (((float)arc4random()/0x100000000)*(high_bound-low_bound)+low_bound);//image1
    int intRndValue = (int)(rndValue + 0.5);
    NSString *str_image1 = [@(intRndValue) stringValue];


    NSData *imageData = UIImageJPEGRepresentation(imageToUpload, 0);
    [body appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"uploadedfile1\"; filename=\"%@.jpeg\"\n",str_image1] dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:[@"Content-Type: application/octet-stream\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:imageData];
    [body appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:[[NSString stringWithFormat:@"--%@--\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];

    [request setHTTPBody:body];
}
   [request setHTTPShouldHandleCookies:NO];
   [request setTimeoutInterval:30];
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue]
                       completionHandler:^(NSURLResponse *response, NSData *data, NSError *error)

 {
              NSLog(@"completionHandler with response:%@",[NSHTTPURLResponse localizedStringForStatusCode:[(NSHTTPURLResponse*)response statusCode]]);
     NSLog(@"reponse: %ld",(long)[(NSHTTPURLResponse*)response statusCode]);

     NSInteger status = [(NSHTTPURLResponse*)response statusCode];

     if(error){
         NSLog(@"http request error: %@", error.localizedDescription);
         // handle the error
     }
     else{
         if (status == 200){
             // handle the success
         }
         else{
             NSLog(@"error");
         }   // handle the error
     }


     }];

[1]: https://i.stack.imgur.com/FAMJy.png --- Это образ на сервере

[1]: https://i.stack.imgur.com/7NGSK.png --- Это изображение, которое я хочу


person iVJ    schedule 23.01.2018    source источник
comment
@AndreasOetjen, пожалуйста, внимательно прочитайте мой вопрос, здесь я отправляю почтовый запрос, используя multipart, но не используя контроллер выбора изображений. И это происходит правильно для обычного почтового запроса только в том случае, если составное изображение вращается.   -  person iVJ    schedule 23.01.2018
comment
Я прочитал это, но предполагаю, что исходное изображение JPEG как-то повернуто. JPEG сохраняет ориентацию изображения в метаданных EXIF, а PNG — нет. Для проверки вы можете просто сохранить PNG в локальной файловой системе и посмотреть, не повернулось ли оно неправильно. Или просто отправьте на сервер PNG, а не JPEG.   -  person Andreas Oetjen    schedule 23.01.2018
comment
Бэкэнд-сервер принимает только формат jpeg, что для этого делать, и те же данные изображения jpeg правильно передаются в почтовом запросе.   -  person iVJ    schedule 23.01.2018
comment
Может быть, я неправильно прочитал это. Тем не менее, вы должны проверить флаг ориентации в данных exif как для шрифта, так и для бэкенда.   -  person Andreas Oetjen    schedule 23.01.2018
comment
но как вы можете комментировать как дубликат, не читая его должным образом ??странно   -  person iVJ    schedule 23.01.2018
comment
@AndreasOetjen??   -  person iVJ    schedule 23.01.2018
comment
извините за это, я удалил запрос.   -  person Andreas Oetjen    schedule 23.01.2018


Ответы (2)


вы должны удалить данные об ориентации из UIImage перед загрузкой на сервер.

UIImage *originalImage = [requestBody objectForKey:keyUploadImage];

UIImage *imageToUpload =
[UIImage imageWithCGImage:[originalImage CGImage]
                    scale:[originalImage scale]
              orientation: UIImageOrientationUp];

Вы должны использовать imageToUpload для загрузки на сервер.

person Milan Manwar    schedule 24.01.2018
comment
Не могли бы вы просто как-то прислать ссылку и на оригинал, и на серверный образ? - person Andreas Oetjen; 24.01.2018
comment
моя ориентация изображения уже вверху, но после загрузки она поворачивается, и это происходит только тогда, когда я обрезаю изображение - person iVJ; 24.01.2018
comment
обрезать? Где вы обрезаете изображение, я не вижу этого в вашем коде. - person Andreas Oetjen; 24.01.2018
comment
урожай, который я делаю до этого - person iVJ; 24.01.2018
comment
Это именно то, что я сказал вам в самом начале. И вы используете не jpeg, а формат png, который не поддерживает ориентацию изображения. - person Andreas Oetjen; 24.01.2018
comment
Я использую только jpeg - person iVJ; 24.01.2018
comment
Изображения, которые вы загрузили на imgur, имеют формат png; может быть полезно увидеть изображения в формате jpeg, точно так же, как они были отправлены и получены сервером - person Andreas Oetjen; 24.01.2018
comment
там я просто добавил скриншоты, чтобы показать вращение - person iVJ; 24.01.2018
comment
К сожалению, скриншоты совсем не помогают; Мне понадобится исходное (обрезанное) изображение в формате jpeg (imageToUpload) и изображение, хранящееся на сервере. - person Andreas Oetjen; 25.01.2018

вращение изображения происходит, когда я обрезаю изображение, тогда я использовал это https://stackoverflow.com/a/14231694/7636194 после обрезки моя проблема исправлена.

person iVJ    schedule 26.01.2018