Le redimensionnement UIimages tiré de la Caméra TOURNE aussi le UIimage?
Je suis UIimages de la caméra et de les assigner à UIImageViews à être affiché. Quand je fais cela, la caméra me donne une résolution de 1200 x 1600 pixels pour une image que j'ai ensuite affecter à une UIImageView dans mon Application. L'image est affichée comme prévu dans l'affichage de l'image sous cette condition. Cependant, quand j'essaye de REDIMENSIONNER l'extrait UIImage avant de l'affecter à la UIImageView, l'image est en cours de redimensionnement comme prévu, mais il y a un problème quelque part (dans le REDIMENSIONNEMENT de code?) mon UIImage est prise en ROTATION... Comme un résultat, quand j'assigne le redimensionnement UIImage à une UIImageView l'image est pivotée de 90 degrés et semble tendu que le rapport d'aspect (1200 x 1600 pixels) est inchangé...
Je suis en utilisant cette pour obtenir une UIImage de la Caméra:
- (void) imagePickerController:(UIImagePickerController*)picker didFinishPickingMediaWithInfo:(NSDictionary*)info
{
myImg = [info objectForKey:@"UIImagePickerControllerOriginalImage"];
myResizedImg = [self resizeImage:myImg width:400 height:533];
[myImageView setImage:myResizedImg];
}
Je me sers de ce pour la redimensionner:
-(UIImage *)resizeImage:(UIImage *)anImage width:(int)width height:(int)height
{
CGImageRef imageRef = [anImage CGImage];
CGImageAlphaInfo alphaInfo = CGImageGetAlphaInfo(imageRef);
if (alphaInfo == kCGImageAlphaNone)
alphaInfo = kCGImageAlphaNoneSkipLast;
CGContextRef bitmap = CGBitmapContextCreate(NULL, width, height, CGImageGetBitsPerComponent(imageRef), 4 * width, CGImageGetColorSpace(imageRef), alphaInfo);
CGContextDrawImage(bitmap, CGRectMake(0, 0, width, height), imageRef);
CGImageRef ref = CGBitmapContextCreateImage(bitmap);
UIImage *result = [UIImage imageWithCGImage:ref];
CGContextRelease(bitmap);
CGImageRelease(ref);
return result;
}
QUESTION: Comment REDIMENSIONNER une UIImage tiré de l'Appareil photo SANS faire pivoter les pixels?
Vous devez vous connecter pour publier un commentaire.
La raison que votre code ne fonctionne pas est parce que le imageOrientation sur le code que vous avez à faire est de ne pas être pris en compte. Plus précisément, si le imageOrientation est à droite/à gauche, puis vous le besoin à la fois de faire pivoter l'image et le swap largeur/hauteur. Voici un peu de code pour ce faire:
Cela permettra de redimensionner votre image et faites-la tourner pour l'orientation correcte. Si vous avez besoin de la définition du radian, c'est:
La réponse de Daniel a donné est également correct, mais il souffre du problème qu'il n'est pas thread-safe, depuis que vous utilisez UIGraphicsBeginImageContext(). Depuis le code ci-dessus utilise uniquement la CG fonctions, vous êtes tous ensemble. J'ai également une fonction similaire pour redimensionner et faire le bon aspect de remplissage sur les images - permettez-moi de savoir si c'est ce que vous cherchez.
Remarque: j'ai eu la fonction d'origine de ce post, et fait quelques modifications pour le faire fonctionner sur des fichiers Jpeg.
J'ai eu ce problème aussi avec le code là-bas, j'ai trouvé ce code qui fonctionne, vérifier, faites-moi savoir ce que vous trouver
newImage
est toujoursUIImageOrientationUp
peu importe ce que l'orientation deimage
est, mais le code est bon, parce quedrawInRect:
prendre l'orientation en compte et de faire une rotation à l'intérieur.Swift 3
Je ajouter à
didFinishPickingMediaWithInfo
méthode, puis utiliserimage
sans se soucier de sa rotation.Si vous voulez faire une image carrée à partir d'un rectangle de l'image (à l'horizontale ou à la verticale) par le recadrage par la largeur ou la hauteur des deux côtés, utiliser mon code. La différence est que je n'ai pas exagéré, mais je récolte. Je l'ai fait à partir du haut du code par la modification: