Gibt es eine Möglichkeit, UIImage in so wenigen Zeilen wie möglich zu ändern? Das Verhältnis ist mir egal, ich möchte nur die Bildauflösung auf 80x60 einstellen. Das ist allesEinfache Größenänderung von UIImage in XCODE
Antwort
Dies kann Overkill sein, aber Sie können einfach Ihr Bild und erstellen Sie einen Grafikkontext mit der gewünschten Auflösung, dann können Sie die tempImage als UIImageView festlegen und überschreiben.
UIImage *image = YourImageView.image;
UIImage *tempImage = nil;
CGSize targetSize = CGSizeMake(80,60);
UIGraphicsBeginImageContext(targetSize);
CGRect thumbnailRect = CGRectMake(0, 0, 0, 0);
thumbnailRect.origin = CGPointMake(0.0,0.0);
thumbnailRect.size.width = targetSize.width;
thumbnailRect.size.height = targetSize.height;
[image drawInRect:thumbnailRect];
tempImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
YourImageView.image = tempImage;
Verwenden Sie diese Klasse (add-Code-Datei entsprechend .h)
#import "UIImage+Resize.h"
@implementation UIImage (Resize)
- (UIImage *)resizedImage:(CGSize)bounds {
return [self resizedImage:bounds upScale:YES];
}
- (UIImage*)resizedImage:(CGSize)bounds upScale:(BOOL)upScale {
CGSize originalSize = self.size;
float xScale = bounds.width/originalSize.width;
float yScale = bounds.height/originalSize.height;
float scale = MIN(xScale, yScale);
if (!upScale) {
scale = MIN(scale, 1);
}
CGSize newSize = CGSizeMake(originalSize.width * scale, originalSize.height * scale);
UIGraphicsBeginImageContextWithOptions(newSize, NO, [UIScreen mainScreen].scale);
[self drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
UIImage *resultImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return resultImage;
}
- (void)resizeImage:(UIImage *)image
{
CGSize origImageSize = [image size];
CGRect imageRect = CGRectMake(0, 0, 80, 60);
float ratio = MAX(newRect.size.width/origImageSize.width,
newRect.size.height/origImageSize.height);
UIGraphicsBeginImageContextWithOptions(newRect.size, NO, 0.0);
UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:newRect
cornerRadius:5.0];
[path addClip];
CGRect imageRect;
imageRect.size.width = ratio * origImageSize.width;
imageRect.size.height = ratio * origImageSize.height;
imageRect.origin.x = (newRect.size.width - imageRect.size.width)/2.0;
imageRect.origin.y = (newRect.size.height - imageRect.size.height)/2.0;
[image drawInRect:imageRect];
UIImage *smallImage = UIGraphicsGetImageFromCurrentImageContext();
NSData *data = UIImagePNGRepresentation(smallImage);
UIGraphicsEndImageContext();
}
Vergessen Sie nicht, Core Graphics frameawork hinzuzufügen.
Ich habe den folgenden Code auf this page gefunden:
- (UIImage*)imageWithImage: (UIImage*) sourceImage scaledToWidth: (float) i_width{
if (sourceImage.size.width>sourceImage.size.height) {
sourceImage = [[UIImage alloc] initWithCGImage: sourceImage.CGImage
scale: 1.0
orientation: UIImageOrientationRight];
}
float oldWidth = sourceImage.size.width;
float scaleFactor = i_width/oldWidth;
float newHeight = sourceImage.size.height * scaleFactor;
float newWidth = oldWidth * scaleFactor;
UIGraphicsBeginImageContext(CGSizeMake(newWidth, newHeight)); [sourceImage drawInRect:CGRectMake(0, 0, newWidth, newHeight)];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext();
return newImage;
}
Alles, was Sie tun müssen, ist es mit dem i_width
bieten, und es wird sie entsprechend skalieren.
Ich habe eine kleine Drehung hinzugefügt, so dass, wenn das Bild im Querformatmodus ist, wird es in Hochformat gedreht und dann in der Größe geändert. Wenn Sie es das Gegenteil (Hochformat auf Querformat) sein wollen, ändern Sie dies:
if (sourceImage.size.width>sourceImage.size.height) {
sourceImage = [[UIImage alloc] initWithCGImage: sourceImage.CGImage
scale: 1.0
orientation: UIImageOrientationRight];
}
dazu:
if (sourceImage.size.height>sourceImage.size.width) {
sourceImage = [[UIImage alloc] initWithCGImage: sourceImage.CGImage
scale: 1.0
orientation: UIImageOrientationRight];
}
CAVEAT: meine Dreh Verfahren findet nicht in Betracht, wenn das Bild zeigt wird links oder rechts. Mit anderen Worten, wenn ein Bild auf dem Kopf steht, kann mein Code das nicht erkennen. Ich hoffe, jemand anderes kann etwas Licht auf diese obwohl werfen :)
- 1. Xcode Größenänderung Vektorform generiert mit Paintcode
- 2. Einfache Zuweisung funktioniert nicht mit UIImage */imageNamed
- 3. Image View VS UIImage Xcode-Platzierung anzeigen
- 4. Instruments-Xcode-Leaks => [UIImage imageWithData:]
- 5. Größenänderung von Labels
- 6. Animieren von UITableView Größenänderung
- 7. Wie kann ich ändern uiimage Farbe in iPhone SDK xcode
- 8. Konvertieren von PDF in UIImage
- 9. Tabseite Größenänderung
- 10. Apportieren UIImage von UIImageView in Swift
- 11. Seltsamer Fehler bei der Größenänderung von UI-Elementen in xCode 5? Video ist beigefügt
- 12. Automatische Größenänderung von Spaltenbreiten in einer CListCtrl
- 13. Größenänderung von Bildern in C# ohne Glättung
- 14. Die Größenänderung von Bildern nimmt viel Zeit in Anspruch?
- 15. Unbekannter Typ 'UIImage'
- 16. UIImage Konvertierung von NSData
- 17. Sehr einfache XCode Objective-C Frage
- 18. von UIImage erstellen Rechteck
- 19. CIImage von UIImage (Swift)
- 20. UIImage unkomprimiert von AVCaptureStillImageOutput
- 21. Generiere Hash von UIImage
- 22. UIImage von AVCaptureVideoPreviewLayer
- 23. VSTO: Excel Größenänderung in vb.net
- 24. Erstellen Sie UiImage von NSData
- 25. Wie gif Asset UIImage
- 26. UIImage Picker ändert Bildgröße
- 27. Swift 2: Update UIImage Dictionary mit UIImage() var von UIImagePicker
- 28. Erweiterung und Größenänderung div
- 29. Wie löschen Teil von UIImage mit einem anderen UIImage
- 30. Popover-Größenänderung unregelmäßig
warum Overkill ??? Ich meine, es funktioniert, aber hat es einen negativen Effekt? – user1602687
Sie sagten, Sie wollten ein paar Zeilen. Das ist wie 10, lol. Keine negativen Auswirkungen! – ApolloSoftware
Ich habe das versucht, aber es endet verschwommen? – Lion789