Esiste un modo per ridimensionare UIImage nel minor numero possibile di righe? Non mi interessa il rapporto, voglio solo impostare la risoluzione dell'immagine su 80x60. Tutto questo èSemplice ridimensionamento di UIImage in XCODE
risposta
Questo può essere eccessivo, ma puoi semplicemente prendere la tua immagine e creare un contesto grafico a quella risoluzione che desideri, quindi puoi impostare tempImage come UIImageView, sovrascrivendolo.
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;
utilizzare questa classe (aggiungere il codice per .h file di conseguenza)
#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();
}
Non dimenticare di aggiungere CoreGraphics frameawork.
ho trovato il seguente codice sul this page:
- (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;
}
Tutto quello che dovete fare è fornire con la i_width
, e scalerà di conseguenza.
Ho aggiunto un piccolo tocco ad esso, in modo che se l'immagine è in modalità orizzontale, verrà ruotata in verticale e quindi ridimensionata. Se si vuole che sia il contrario (verticale a orizzontale), modificare questa:
if (sourceImage.size.width>sourceImage.size.height) {
sourceImage = [[UIImage alloc] initWithCGImage: sourceImage.CGImage
scale: 1.0
orientation: UIImageOrientationRight];
}
a questo:
if (sourceImage.size.height>sourceImage.size.width) {
sourceImage = [[UIImage alloc] initWithCGImage: sourceImage.CGImage
scale: 1.0
orientation: UIImageOrientationRight];
}
avvertimento: il mio metodo di rotazione non prende in considerazione se l'immagine sia rivolta sinistra o destra. In altre parole, se un'immagine è orizzontale capovolta, il mio codice non può riconoscerla. Spero che qualcun altro possa far luce su questo però :)
- 1. UIImage non rendering in Xcode 6.3.1 Playground
- 2. Spaziatura orizzontale tra due visualizzazioni UIImage in Xcode 7
- 3. Ridimensionamento di una UIImage su iPhone con un ingombro ridotto di memoria
- 4. Xcode 4.3 non presentando pannello ridimensionamento automatico in ispettore Dimensioni
- 5. Come creare UIImage vuoto o vuoto o CGImage e manipolare i pixel su di esso (Xcode)?
- 6. Converti UIImage in NSData e converti in UIImage in Swift?
- 7. UIImage ScaleToFit disabilita le antialias?
- 8. Nome tipo sconosciuto 'UIImage'
- 9. Ridimensionamento del pulsante di comportamento mancante da Xcode
- 10. Il ridimensionamento di UIimages estratto dalla fotocamera comporta anche la rotazione della UIimage?
- 11. Converti UIImage in CVPixelBufferRef
- 12. Regola UIImage in UIImageView
- 13. Converti UIImage in CVImageBufferRef
- 14. aggiungi UIImage in CALayer
- 15. Converti UIImage in CMSampleBufferRef
- 16. Ridimensiona UIImage mantenendo Aspect ratio e width
- 17. Parametro percorso in UIImage imageWithContentsOfFile: per XCAsset
- 18. Confronto di UIImage
- 19. Crea nuovo UIImage con l'aggiunta di ombra per UIImage esistente
- 20. setAnchorPoint per UIImage?
- 21. Quale UIImage dovrei restituire dall'attività di UIActivityImage?
- 22. UIImage metadati
- 23. Ridimensionamento immagine per adattarsi UIImageView
- 24. Ridimensionamento/ridimensionamento del grafico di Google sul ridimensionamento della finestra
- 25. Dove si trova la casella di controllo Xcode "Trasforma la maschera di ridimensionamento automatico in vincoli"
- 26. Conversione di UIImage in file PDF
- 27. come inserire UIImage in UITextView
- 28. Ridimensionamento automatico di UINavigationBar in rotazione su orizzontale
- 29. Converti UIView Layer in UIImage
- 30. UIImage face detection
perché overkill ??? Voglio dire, funziona, ma ha qualche effetto negativo? – user1602687
hai detto che volevi poche righe. questo è come 10, lol. Nessun effetto negativo però! – ApolloSoftware
Ho provato questo ma finisce sfocato? – Lion789