Also habe ich versucht, herauszufinden, was ich jetzt falsch mache, und ich kann es nicht herausfinden. Was ich versuche, dies zu erreichen:UIImage Größenanpassung funktioniert nicht richtig
- Nehmen Sie ein Foto mit
UIImagePickerController
- das resultierende Foto aufnehmen und die oberen und unteren Ernte ab, so dass es ein Quadrat (ähnlich wie Instagram)
- Anzeige wird, dass Bild innerhalb eines
UIButton
Aus irgendeinem Grund nehmen jedes Mal, wenn ich das Foto in der UIButton
verzerrt endet und es scheint, als ob das Beschneiden richtig funktionierte nicht. Hier ist was ich mache. Im didFinishPickingMediaWithInfo
Methode habe ich den folgenden Code:
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
//Copy the image to the userImage variable
[picker dismissModalViewControllerAnimated:YES];
userImage = nil;
//Rotate & resize image
userImage = [self resizeAndRotatePhoto:(UIImage *)[info objectForKey:UIImagePickerControllerOriginalImage]];
NSLog(@"Userimage size, width: %f , height: %f", userImage.size.width , userImage.size.height);
//Update the image form field with the image and set the image in the controller
NSLog(@"Button size is height: %f , width: %f" , userImageAvatarButton.frame.size.height , userImageAvatarButton.frame.size.width);
[userImageAvatarButton.layer setMasksToBounds:YES];
[userImageAvatarButton.layer setCornerRadius:3.0];
[userImageAvatarButton setImage:userImage forState:UIControlStateNormal];
}
ich die resizeAndRotatePhoto Methode vorübergehend schließen würde, aber das Ergebnis ist unten. Außerdem ist @property (strong) (UIImage *)userImage;
im obigen Code in der Headerdatei des ViewControllers definiert. Die Protokollausgabe ergibt sich auch:
2012-05-07 17:38:07.995 NewApp[10666:707] Userimage size, width: 1936.000000 , height: 1936.000000
2012-05-07 17:38:08.000 NewApp[10666:707] Button size is height: 60.000000 , width: 60.000000
Wie Sie im Bild unten sehen, es verzerrt landet.
Was die resizeAndRotate Methode, hier ist es:
- (UIImage *)resizeAndRotatePhoto:(UIImage *)source
{
if(source.imageOrientation == UIImageOrientationRight)
{
source = [self rotateImage:source byDegrees:90];
}
if(userImage.imageOrientation == UIImageOrientationLeft)
{
source = [self rotateImage:source byDegrees:-90];
}
CGFloat x,y;
CGFloat size;
if(source.size.width > source.size.height){
size = source.size.height;
x = (source.size.width - source.size.height)/2;
y = 0;
}
else {
size = source.size.width;
x = 0;
y = (source.size.height - source.size.width)/2;
}
CGImageRef imageRef = CGImageCreateWithImageInRect([source CGImage], CGRectMake(x,y,size,size));
return [UIImage imageWithCGImage:imageRef];
}
An dieser Stelle habe ich keine Ahnung, wie dieses Bild bekommen unverfälscht zu zeigen. Es scheint, dass es falsch abgeschnitten und falsch angezeigt wird, obwohl das System sagt, dass das Bild tatsächlich ein Quadrat ist.
DANKE. Nach stundenlanger Frustration und Online-Suche mit fast 20 vorgeschlagenen Lösungen ist dies die EINZIGE Lösung, die funktioniert hat. Vielen Dank. – thephatp
yup. ersparte mir auch Stunden Arbeit. Ich schätze die Kategorie! – kevinl