Estou testando meu aplicativo do iPhone em um iPhone iOS 3.1.3. Estou selecionando / capturando uma imagem usando UIImagePickerController
:
UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
[imagePicker setSourceType:UIImagePickerControllerSourceTypeCamera];
[imagePicker setDelegate:self];
[self.navigationController presentModalViewController:imagePicker animated:YES];
[imagePicker release];
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
self.image = [info objectForKey:UIImagePickerControllerOriginalImage];
imageView.image = self.image;
[self.navigationController dismissModalViewControllerAnimated:YES];
submitButton.enabled = YES;
}
Em algum momento, eu o envio ao meu servidor da web usando as classes ASI:
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:@"http://example.com/myscript.php"]];
[request setDelegate:self];
[request setStringEncoding:NSUTF8StringEncoding];
[request setShouldContinueWhenAppEntersBackground:YES];
//other post keys/values
[request setFile:UIImageJPEGRepresentation(self.image, 100.0f) withFileName:[NSString stringWithFormat:@"%d.jpg", [[NSDate date] timeIntervalSinceNow]] andContentType:@"image/jpg" forKey:@"imageFile"];
[request startAsynchronous];
o problema: quando tiro uma foto com o iphone, mantendo-a em paisagem, a imagem é carregada no servidor e visualizada como seria de esperar. ao tirar uma foto segurando o telefone em retrato, a imagem é carregada e visualizada como girada 90 graus.
meu aplicativo está definido para funcionar apenas nos modos retrato (voltado para baixo e regular).
Como posso fazer com que a imagem sempre mostre a orientação correta após o upload?
a imagem parece estar correta como exibida em um UIImageView (diretamente após tirar a foto), mas a visualização no servidor diz o contrário.
Eu descobri um muito mais simples:
BTW: @ O código da Anomie não leva
scale
em consideração, portanto não funcionará para imagens 2x.fonte
self
pelo seu objeto UIImage.Aqui está uma versão rápida da resposta de @ an0:
Também em uma função mais geral:
Versão Swift 3:
fonte
Solução para o Swift 3.1 por questões de orientação ao capturar a imagem da câmera.
Atualizei a solução dada por jake e Metal Heart
Extensão UIImage
Swift 2.0
Uso desta extensão UIImage no seu código:
deixe fixOrientationImage = selectedImage.fixOrientation ()
coloque isso nos métodos delegados do seletor de imagens como este
Swift 3.1
Swift 2.0
fonte
em rápido;)
ATUALIZAÇÃO SWIFT 3.0: D
fonte
Versão Swift 4.x / 5.0 da
@an0
solução:fonte
Usei esta página ao projetar meu aplicativo que tira fotos e descobri que o método a seguir corrige a orientação e usa menos memória e processador do que as respostas anteriores:
Isso basicamente apenas reorganiza os dados da imagem real com uma nova orientação. Eu estava usando o código do @ an0, mas ele cria uma nova imagem na memória, que pode sobrecarregar uma imagem de 3264x2448 que você pode obter de uma câmera.
fonte
Se você ativar a edição, a imagem editada (em oposição ao original) será orientada conforme o esperado:
A ativação da edição permite ao usuário redimensionar e mover a imagem antes de tocar em "Usar foto"
fonte
Isso que eu encontrei para corrigir o problema de orientação
EDITAR:
fonte
Atualização para o Swift 3.1 com base na
Sourabh Sharma
resposta, com a limpeza do código.Exemplo de método de delegação do selecionador:
fonte
Aqui está uma solução que não altera o espaço de cores da imagem original. Se você deseja normalizar a orientação de uma imagem em escala de cinza, está sem sorte com todas as soluções baseadas em,
UIGraphicsBeginImageContextWithOptions
porque ela cria um contexto no espaço de cores RGB. Em vez disso, você deve criar um contexto com as mesmas propriedades da imagem original e desenhar:fonte
Aqui está a extensão UIImage para swift:
Baseado no trabalho anterior do MetalHeart2003.
fonte
Aqui está uma extensão UIImage no Swift 2 com base na resposta aceita por @Anomie. Ele usa um gabinete de switch mais claro. Também leva
CGBitmapContextCreateImage()
em consideração o valor opcional retornado por .fonte
Esse problema ocorreu com imagens tiradas da câmera ou salvas no rolo da câmera tiradas da câmera. As imagens baixadas na biblioteca de fotos do navegador safari não rodam quando carregadas.
Consegui resolver esse problema criando os dados da imagem como JPEG antes de fazer o upload.
Agora, podemos usar os dados para o upload e a imagem não será girada após o upload.
Espero que isso funcione.
fonte
Consigo isso escrevendo abaixo algumas linhas de código
fonte
Se eu entendi, o que você quer fazer é desconsiderar a orientação da UIImage? Nesse caso, você pode fazer o seguinte: -
ou em Swift: -
Ele resolveu meu problema de cultivo. Espero que seja isso que você está procurando.
fonte
Versão Swift 3 baseada em @ jake1981, que a retirou do @ MetalHeart2003
fonte
fonte
Aqui está o código Swift-4.2 para corrigir automaticamente a orientação da imagem.
fonte
Transpus isso para o Xamarin:
fonte