In meiner iPhone-App nehme ich ein Bild mit der Kamera auf und möchte es dann auf 290*390 Pixel verkleinern. Ich habe diese Methode verwendet, um die Größe des Bildes zu ändern:
UIImage *newImage = [image _imageScaledToSize:CGSizeMake(290, 390)
interpolationQuality:1];
Es funktioniert perfekt, aber es ist eine undokumentierte Funktion, so dass ich sie unter iPhone OS4 nicht mehr verwenden kann.
Also... was ist der einfachste Weg, um die Größe eines UIImage zu ändern?
Der einfachste Weg ist, den Rahmen des UIImageView
zu setzen und den ContentMode
auf eine der Größenänderungsoptionen zu setzen.
Oder Sie können diese Utility-Methode verwenden, wenn Sie die Größe eines Bildes tatsächlich ändern müssen:
+ (UIImage *)imageWithImage:(UIImage *)image scaledToSize:(CGSize)newSize {
//UIGraphicsBeginImageContext(newSize);
// In next line, pass 0.0 to use the current device's pixel scaling factor (and thus account for Retina resolution).
// Pass 1.0 to force exact pixel size.
UIGraphicsBeginImageContextWithOptions(newSize, NO, 0.0);
[image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}
Beispiel für die Verwendung:
#import "MYUtil.h"
…
UIImage *myIcon = [MYUtil imageWithImage:myUIImageInstance scaledToSize:CGSizeMake(20, 20)];
Trevor Howard hat einige UIImage-Kategorien, die die Größenänderung recht gut handhaben. Zumindest können Sie den Code als Beispiel verwenden.
Hinweis: Ab iOS 5.1 ist diese Antwort möglicherweise ungültig. Siehe Kommentar unten.
Ich've auch gesehen, dies getan als gut (die ich auf UIButtons
für Normal und Selected Zustand seit Schaltflächen don't resize
zu passen). Kredit geht an wer auch immer der ursprüngliche Autor war.
Erstellen Sie zunächst eine leere .h- und .m-Datei mit den Namen "UIImageResizing.h" und "UIImageResizing.m".
// Put this in UIImageResizing.h
@interface UIImage (Resize)
- (UIImage*)scaleToSize:(CGSize)size;
@end
// Put this in UIImageResizing.m
@implementation UIImage (Resize)
- (UIImage*)scaleToSize:(CGSize)size {
UIGraphicsBeginImageContext(size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextTranslateCTM(context, 0.0, size.height);
CGContextScaleCTM(context, 1.0, -1.0);
CGContextDrawImage(context, CGRectMake(0.0f, 0.0f, size.width, size.height), self.CGImage);
UIImage* scaledImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return scaledImage;
}
@end
Binden Sie diese .h-Datei in die .m-Datei ein, in der Sie die Funktion verwenden wollen, und rufen Sie sie wie folgt auf:
UIImage* image = [UIImage imageNamed:@"largeImage.png"];
UIImage* smallImage = [image scaleToSize:CGSizeMake(100.0f,100.0f)];