UIImage: Αλλαγή μεγέθους, τότε Περικοπή

ψήφοι
184

Έχω bashing το πρόσωπό μου σε αυτό κυριολεκτικά για μέρες τώρα και ακόμα κι αν νιώθω συνεχώς ότι είμαι ακριβώς στην άκρη της αποκάλυψης, εγώ απλά δεν μπορεί να επιτύχει το στόχο μου.

Σκέφτηκα, μπροστά από το χρόνο στα εννοιολογικό φάσεις του σχεδιασμού μου, ότι θα ήταν ένα ασήμαντο θέμα για να αρπάξει μια εικόνα από τη φωτογραφική μηχανή ή τη βιβλιοθήκη του iPhone, την κλίμακα προς τα κάτω σε ένα συγκεκριμένο ύψος, χρησιμοποιώντας μια ισοδύναμη λειτουργία με την Aspect Συμπληρώστε επιλογή της UIImageView (εξ ολοκλήρου στον κώδικα), και στη συνέχεια να περικόψετε από κάτι που δεν χωράει μέσα σε ένα πέρασε CGRect.

Να πάρει την αρχική εικόνα από την κάμερα ή τη βιβλιοθήκη, ήταν ασήμαντο. Είμαι σοκαρισμένος από το πόσο δύσκολο οι άλλοι δύο βήματα έχουν αποδειχθεί.

Η συνημμένη εικόνα δείχνει αυτό που προσπαθώ να πετύχω. Θα κάποιος παρακαλώ την καλοσύνη να κρατήσει το χέρι μου; Κάθε παράδειγμα κώδικα που έχω βρεθεί μέχρι στιγμής φαίνεται να συνθλίψει την εικόνα, να είναι ανάποδα, μοιάζουν χάλια, σύρει έξω από τα όρια, ή αλλιώς απλά δεν λειτουργούν σωστά.

Δημοσιεύθηκε 02/03/2009 στις 21:42
πηγή χρήστη
Σε άλλες γλώσσες...                            


16 απαντήσεις

ψήφοι
244

Χρειαζόμουν το ίδιο πράγμα - στην περίπτωσή μου, για να πάρει τη διάσταση που ταιριάζει φορά κλίμακα, και στη συνέχεια να περικόψετε κάθε άκρο για να ταιριάζει με το υπόλοιπο στο πλάτος. (. Δουλεύω στο τοπίο, έτσι ώστε να μην έχετε παρατηρήσει τυχόν ελλείψεις στη λειτουργία πορτρέτου) Να κωδικό μου - είναι μέρος ενός categeory για UIImage. μέγεθος-στόχος στον κώδικά μου είναι πάντα οριστεί σε πλήρη μέγεθος της οθόνης της συσκευής.

@implementation UIImage (Extras)

#pragma mark -
#pragma mark Scale and crop image

- (UIImage*)imageByScalingAndCroppingForSize:(CGSize)targetSize
{
    UIImage *sourceImage = self;
    UIImage *newImage = nil;    
    CGSize imageSize = sourceImage.size;
    CGFloat width = imageSize.width;
    CGFloat height = imageSize.height;
    CGFloat targetWidth = targetSize.width;
    CGFloat targetHeight = targetSize.height;
    CGFloat scaleFactor = 0.0;
    CGFloat scaledWidth = targetWidth;
    CGFloat scaledHeight = targetHeight;
    CGPoint thumbnailPoint = CGPointMake(0.0,0.0);

    if (CGSizeEqualToSize(imageSize, targetSize) == NO) 
    {
        CGFloat widthFactor = targetWidth / width;
        CGFloat heightFactor = targetHeight / height;

        if (widthFactor > heightFactor) 
        {
            scaleFactor = widthFactor; // scale to fit height
        }
        else
        {
            scaleFactor = heightFactor; // scale to fit width
        }

        scaledWidth  = width * scaleFactor;
        scaledHeight = height * scaleFactor;

        // center the image
        if (widthFactor > heightFactor)
        {
            thumbnailPoint.y = (targetHeight - scaledHeight) * 0.5; 
        }
        else
        {
            if (widthFactor < heightFactor)
            {
                thumbnailPoint.x = (targetWidth - scaledWidth) * 0.5;
            }
        }
    }   

    UIGraphicsBeginImageContext(targetSize); // this will crop

    CGRect thumbnailRect = CGRectZero;
    thumbnailRect.origin = thumbnailPoint;
    thumbnailRect.size.width  = scaledWidth;
    thumbnailRect.size.height = scaledHeight;

    [sourceImage drawInRect:thumbnailRect];

    newImage = UIGraphicsGetImageFromCurrentImageContext();

    if(newImage == nil)
    {
        NSLog(@"could not scale image");
    }

    //pop the context to get back to the default
    UIGraphicsEndImageContext();

    return newImage;
}
Απαντήθηκε 03/03/2009 στις 07:55
πηγή χρήστη

ψήφοι
77

Μια παλαιότερη ανάρτηση περιέχει κώδικα για μια μέθοδο για να αλλάξετε το μέγεθος UIImage σας. Το σχετικό τμήμα έχει ως εξής:

+ (UIImage*)imageWithImage:(UIImage*)image 
               scaledToSize:(CGSize)newSize;
{
   UIGraphicsBeginImageContext( newSize );
   [image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];
   UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
   UIGraphicsEndImageContext();

   return newImage;
}

Όσον αφορά την περικοπή πηγαίνει, πιστεύω ότι αν αλλάξει ο τρόπος για να χρησιμοποιήσετε ένα διαφορετικό μέγεθος για την κλιμάκωση ό, τι για το πλαίσιο, με αποτέλεσμα η εικόνα σας πρέπει να κόβονται στα όρια του πλαισίου.

Απαντήθηκε 02/03/2009 στις 23:32
πηγή χρήστη

ψήφοι
18
+ (UIImage *)scaleImage:(UIImage *)image toSize:(CGSize)targetSize {
    //If scaleFactor is not touched, no scaling will occur      
    CGFloat scaleFactor = 1.0;

    //Deciding which factor to use to scale the image (factor = targetSize / imageSize)
    if (image.size.width > targetSize.width || image.size.height > targetSize.height)
        if (!((scaleFactor = (targetSize.width / image.size.width)) > (targetSize.height / image.size.height))) //scale to fit width, or
            scaleFactor = targetSize.height / image.size.height; // scale to fit heigth.

    UIGraphicsBeginImageContext(targetSize); 

    //Creating the rect where the scaled image is drawn in
    CGRect rect = CGRectMake((targetSize.width - image.size.width * scaleFactor) / 2,
                             (targetSize.height -  image.size.height * scaleFactor) / 2,
                             image.size.width * scaleFactor, image.size.height * scaleFactor);

    //Draw the image into the rect
    [image drawInRect:rect];

    //Saving the image, ending image context
    UIImage *scaledImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return scaledImage;
}

Προτείνω αυτό το ένα. Δεν είναι αυτή η ομορφιά; ?)

Απαντήθηκε 23/11/2010 στις 00:09
πηγή χρήστη

ψήφοι
15

Υπάρχει ένα μεγάλο κομμάτι του κώδικα που σχετίζονται με την αλλαγή μεγέθους των εικόνων + πολλές άλλες λειτουργίες. Ήρθα γύρω από αυτό, όταν προσπαθώ να καταλάβω ou πώς να το μέγεθος των εικόνων ... http://vocaro.com/trevor/blog/2009/10/12/resize-a-uiimage-the-right-way/

Απαντήθηκε 18/01/2010 στις 15:58
πηγή χρήστη

ψήφοι
7

Ορίστε. Αυτός είναι τέλεια ;-)

EDIT: δείτε παρακάτω το σχόλιό - «Δεν λειτουργεί με ορισμένες εικόνες, δεν με: CGContextSetInterpolationQuality: άκυρη πλαίσιο σφάλματος 0x0»

// Resizes the image according to the given content mode, taking into account the image's orientation
- (UIImage *)resizedImageWithContentMode:(UIViewContentMode)contentMode imageToScale:(UIImage*)imageToScale bounds:(CGSize)bounds interpolationQuality:(CGInterpolationQuality)quality {
    //Get the size we want to scale it to
    CGFloat horizontalRatio = bounds.width / imageToScale.size.width;
    CGFloat verticalRatio = bounds.height / imageToScale.size.height;
    CGFloat ratio;

    switch (contentMode) {
        case UIViewContentModeScaleAspectFill:
            ratio = MAX(horizontalRatio, verticalRatio);
            break;

        case UIViewContentModeScaleAspectFit:
            ratio = MIN(horizontalRatio, verticalRatio);
            break;

        default:
            [NSException raise:NSInvalidArgumentException format:@"Unsupported content mode: %d", contentMode];
    }

    //...and here it is
    CGSize newSize = CGSizeMake(imageToScale.size.width * ratio, imageToScale.size.height * ratio);


    //start scaling it
    CGRect newRect = CGRectIntegral(CGRectMake(0, 0, newSize.width, newSize.height));
    CGImageRef imageRef = imageToScale.CGImage;
    CGContextRef bitmap = CGBitmapContextCreate(NULL,
                                                newRect.size.width,
                                                newRect.size.height,
                                                CGImageGetBitsPerComponent(imageRef),
                                                0,
                                                CGImageGetColorSpace(imageRef),
                                                CGImageGetBitmapInfo(imageRef));

    CGContextSetInterpolationQuality(bitmap, quality);

    // Draw into the context; this scales the image
    CGContextDrawImage(bitmap, newRect, imageRef);

    // Get the resized image from the context and a UIImage
    CGImageRef newImageRef = CGBitmapContextCreateImage(bitmap);
    UIImage *newImage = [UIImage imageWithCGImage:newImageRef];

    // Clean up
    CGContextRelease(bitmap);
    CGImageRelease(newImageRef);

    return newImage;
}
Απαντήθηκε 28/06/2011 στις 19:40
πηγή χρήστη

ψήφοι
6

Αυτή είναι μια εκδοχή της απάντησης Jane Πωλήσεων στο Swift. Στην υγειά σας!

public func resizeImage(image: UIImage, size: CGSize) -> UIImage? {
    var returnImage: UIImage?

    var scaleFactor: CGFloat = 1.0
    var scaledWidth = size.width
    var scaledHeight = size.height
    var thumbnailPoint = CGPointMake(0, 0)

    if !CGSizeEqualToSize(image.size, size) {
        let widthFactor = size.width / image.size.width
        let heightFactor = size.height / image.size.height

        if widthFactor > heightFactor {
            scaleFactor = widthFactor
        } else {
            scaleFactor = heightFactor
        }

        scaledWidth = image.size.width * scaleFactor
        scaledHeight = image.size.height * scaleFactor

        if widthFactor > heightFactor {
            thumbnailPoint.y = (size.height - scaledHeight) * 0.5
        } else if widthFactor < heightFactor {
            thumbnailPoint.x = (size.width - scaledWidth) * 0.5
        }
    }

    UIGraphicsBeginImageContextWithOptions(size, true, 0)

    var thumbnailRect = CGRectZero
    thumbnailRect.origin = thumbnailPoint
    thumbnailRect.size.width = scaledWidth
    thumbnailRect.size.height = scaledHeight

    image.drawInRect(thumbnailRect)
    returnImage = UIGraphicsGetImageFromCurrentImageContext()

    UIGraphicsEndImageContext()

    return returnImage
}
Απαντήθηκε 24/12/2015 στις 13:15
πηγή χρήστη

ψήφοι
2

Έχω μετατραπεί οδηγός Σαμ Wirch για γρήγορη και λειτούργησε καλά για μένα, αν και υπάρχει κάποια πολύ μικρή «squishing» στην τελική εικόνα που δεν θα μπορούσε να επιλύσει.

func resizedCroppedImage(image: UIImage, newSize:CGSize) -> UIImage {
    var ratio: CGFloat = 0
    var delta: CGFloat = 0
    var offset = CGPointZero
    if image.size.width > image.size.height {
        ratio = newSize.width / image.size.width
        delta = (ratio * image.size.width) - (ratio * image.size.height)
        offset = CGPointMake(delta / 2, 0)
    } else {
        ratio = newSize.width / image.size.height
        delta = (ratio * image.size.height) - (ratio * image.size.width)
        offset = CGPointMake(0, delta / 2)
    }
    let clipRect = CGRectMake(-offset.x, -offset.y, (ratio * image.size.width) + delta, (ratio * image.size.height) + delta)
    UIGraphicsBeginImageContextWithOptions(newSize, true, 0.0)
    UIRectClip(clipRect)
    image.drawInRect(clipRect)
    let newImage = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    return newImage
}

Αν κάποιος θέλει το στόχο έκδοση γ, είναι στην ιστοσελίδα του.

Απαντήθηκε 16/08/2015 στις 22:00
πηγή χρήστη

ψήφοι
2

Xamarin.iOS έκδοση για αποδεκτή απάντηση για το πώς να αλλάξετε το μέγεθος και στη συνέχεια να περικόψετε UIImage (Aspect Συμπληρώστε) είναι κάτω

    public static UIImage ScaleAndCropImage(UIImage sourceImage, SizeF targetSize)
    {
        var imageSize = sourceImage.Size;
        UIImage newImage = null;
        var width = imageSize.Width;
        var height = imageSize.Height;
        var targetWidth = targetSize.Width;
        var targetHeight = targetSize.Height;
        var scaleFactor = 0.0f;
        var scaledWidth = targetWidth;
        var scaledHeight = targetHeight;
        var thumbnailPoint = PointF.Empty;
        if (imageSize != targetSize)
        {
            var widthFactor = targetWidth / width;
            var heightFactor = targetHeight / height;
            if (widthFactor > heightFactor)
            {
                scaleFactor = widthFactor;// scale to fit height
            }
            else
            {
                scaleFactor = heightFactor;// scale to fit width
            }
            scaledWidth = width * scaleFactor;
            scaledHeight = height * scaleFactor;
            // center the image
            if (widthFactor > heightFactor)
            {
                thumbnailPoint.Y = (targetHeight - scaledHeight) * 0.5f;
            }
            else
            {
                if (widthFactor < heightFactor)
                {
                    thumbnailPoint.X = (targetWidth - scaledWidth) * 0.5f;
                }
            }
        }
        UIGraphics.BeginImageContextWithOptions(targetSize, false, 0.0f);
        var thumbnailRect = new RectangleF(thumbnailPoint, new SizeF(scaledWidth, scaledHeight));
        sourceImage.Draw(thumbnailRect);
        newImage = UIGraphics.GetImageFromCurrentImageContext();
        if (newImage == null)
        {
            Console.WriteLine("could not scale image");
        }
        //pop the context to get back to the default
        UIGraphics.EndImageContext();

        return newImage;
    }
Απαντήθηκε 09/09/2014 στις 08:29
πηγή χρήστη

ψήφοι
2

Άλλαξα Κωδικός Brad Larson του. Θα πτυχή συμπληρώστε την εικόνα στη δεδομένη ορθ.

-(UIImage*) scaleAndCropToSize:(CGSize)newSize;
{
    float ratio = self.size.width / self.size.height;

    UIGraphicsBeginImageContext(newSize);

    if (ratio > 1) {
        CGFloat newWidth = ratio * newSize.width;
        CGFloat newHeight = newSize.height;
        CGFloat leftMargin = (newWidth - newHeight) / 2;
        [self drawInRect:CGRectMake(-leftMargin, 0, newWidth, newHeight)];
    }
    else {
        CGFloat newWidth = newSize.width;
        CGFloat newHeight = newSize.height / ratio;
        CGFloat topMargin = (newHeight - newWidth) / 2;
        [self drawInRect:CGRectMake(0, -topMargin, newSize.width, newSize.height/ratio)];
    }

    UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return newImage;
}
Απαντήθηκε 09/01/2012 στις 21:02
πηγή χρήστη

ψήφοι
1

Βρήκα ότι το Swift 3 posted by Evgenii Kanvets δεν κλιμακώνεται ομοιόμορφα την εικόνα.

Εδώ είναι Swift 4 έκδοση μου του λειτουργία, που δεν squish την εικόνα:

static func resizedCroppedImage(image: UIImage, newSize:CGSize) -> UIImage? {

    // This function returns a newImage, based on image
    // - image is scaled uniformaly to fit into a rect of size newSize
    // - if the newSize rect is of a different aspect ratio from the source image
    //     the new image is cropped to be in the center of the source image
    //     (the excess source image is removed)

    var ratio: CGFloat = 0
    var delta: CGFloat = 0
    var drawRect = CGRect()

    if newSize.width > newSize.height {

        ratio = newSize.width / image.size.width
        delta = (ratio * image.size.height) - newSize.height
        drawRect = CGRect(x: 0, y: -delta / 2, width: newSize.width, height: newSize.height + delta)

    } else {

        ratio = newSize.height / image.size.height
        delta = (ratio * image.size.width) - newSize.width
        drawRect = CGRect(x: -delta / 2, y: 0, width: newSize.width + delta, height: newSize.height)

    }

    UIGraphicsBeginImageContextWithOptions(newSize, true, 0.0)
    image.draw(in: drawRect)
    let newImage = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()

    return newImage
} 
Απαντήθηκε 19/06/2018 στις 00:58
πηγή χρήστη

ψήφοι
1
scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0.0,0.0,ScreenWidth,ScreenHeigth)];
    [scrollView setBackgroundColor:[UIColor blackColor]];
    [scrollView setDelegate:self];
    [scrollView setShowsHorizontalScrollIndicator:NO];
    [scrollView setShowsVerticalScrollIndicator:NO];
    [scrollView setMaximumZoomScale:2.0];
    image=[image scaleToSize:CGSizeMake(ScreenWidth, ScreenHeigth)];
    imageView = [[UIImageView alloc] initWithImage:image];
    UIImageView* imageViewBk = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"background.png"]];
    [self.view addSubview:imageViewBk];
    CGRect rect;
    rect.origin.x=0;
    rect.origin.y=0;
    rect.size.width = image.size.width;
    rect.size.height = image.size.height;

    [imageView setFrame:rect];

    [scrollView setContentSize:[imageView frame].size];
    [scrollView setMinimumZoomScale:[scrollView frame].size.width / [imageView frame].size.width];
    [scrollView setZoomScale:[scrollView minimumZoomScale]];
    [scrollView addSubview:imageView];

    [[self view] addSubview:scrollView];

τότε μπορείτε να πάρετε τους πυροβολισμούς οθόνης στην εικόνα σας με αυτό το

float zoomScale = 1.0 / [scrollView zoomScale];
CGRect rect;
rect.origin.x = [scrollView contentOffset].x * zoomScale;
rect.origin.y = [scrollView contentOffset].y * zoomScale;
rect.size.width = [scrollView bounds].size.width * zoomScale;
rect.size.height = [scrollView bounds].size.height * zoomScale;

CGImageRef cr = CGImageCreateWithImageInRect([[imageView image] CGImage], rect);

UIImage *cropped = [UIImage imageWithCGImage:cr];

CGImageRelease(cr);
Απαντήθηκε 23/11/2012 στις 10:31
πηγή χρήστη

ψήφοι
1

Το παρακάτω απλό κώδικα λειτούργησε για μένα.

[imageView setContentMode:UIViewContentModeScaleAspectFill];
[imageView setClipsToBounds:YES];
Απαντήθηκε 27/06/2012 στις 09:07
πηγή χρήστη

ψήφοι
0

Εδώ είναι μια έκδοση Swift 3 του οδηγού Σαμ Wirch για ταχεία δημοσιεύτηκε από τον William T.

extension UIImage {

    static func resizedCroppedImage(image: UIImage, newSize:CGSize) -> UIImage? {
        var ratio: CGFloat = 0
        var delta: CGFloat = 0
        var offset = CGPoint.zero

        if image.size.width > image.size.height {
            ratio = newSize.width / image.size.width
            delta = (ratio * image.size.width) - (ratio * image.size.height)
            offset = CGPoint(x: delta / 2, y: 0)
        } else {
            ratio = newSize.width / image.size.height
            delta = (ratio * image.size.height) - (ratio * image.size.width)
            offset = CGPoint(x: 0, y: delta / 2)
        }

        let clipRect = CGRect(x: -offset.x, y: -offset.y, width: (ratio * image.size.width) + delta, height: (ratio * image.size.height) + delta)
        UIGraphicsBeginImageContextWithOptions(newSize, true, 0.0)
        UIRectClip(clipRect)
        image.draw(in: clipRect)
        let newImage = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()

        return newImage
    }

}
Απαντήθηκε 04/09/2017 στις 12:38
πηγή χρήστη

ψήφοι
0

Το ερώτημα αυτό φαίνεται να έχουν τεθεί για να ξεκουραστούν, αλλά στην αναζήτησή μου για μια λύση που θα μπορούσε πιο εύκολα να καταλάβει (και γραμμένο σε Swift), έφτασα σε αυτό (δημοσιεύτηκε επίσης: Πώς να περικόψετε το UIImage )


Ήθελα να είναι σε θέση να περικόψετε από μια περιοχή βασίζονται σε αναλογία διαστάσεων, και την κλίμακα σε μέγεθος βασίζεται σε μια εξωτερική έκταση οριοθέτησης. Εδώ είναι παραλλαγή μου:

import AVFoundation
import ImageIO

class Image {

    class func crop(image:UIImage, crop source:CGRect, aspect:CGSize, outputExtent:CGSize) -> UIImage {

        let sourceRect = AVMakeRectWithAspectRatioInsideRect(aspect, source)
        let targetRect = AVMakeRectWithAspectRatioInsideRect(aspect, CGRect(origin: CGPointZero, size: outputExtent))

        let opaque = true, deviceScale:CGFloat = 0.0 // use scale of device's main screen
        UIGraphicsBeginImageContextWithOptions(targetRect.size, opaque, deviceScale)

        let scale = max(
            targetRect.size.width / sourceRect.size.width,
            targetRect.size.height / sourceRect.size.height)

        let drawRect = CGRect(origin: -sourceRect.origin * scale, size: image.size * scale)
        image.drawInRect(drawRect)

        let scaledImage = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()

        return scaledImage
    }
}

Υπάρχουν μερικά πράγματα που βρήκα σύγχυση, οι ξεχωριστές ανησυχίες καλλιέργεια και αλλαγή μεγέθους. Περικοπή αντιμετωπίζεται με την προέλευση της ορθ που περνάτε να drawInRect, και την κλιμάκωση γίνεται από το τμήμα μέγεθος. Στην περίπτωσή μου, είχα ανάγκη να αφορούν το μέγεθος της περικοπής rect στην πηγή, με ορθ έξοδο μου από την ίδια αναλογία. Ο παράγοντας κλίμακας είναι τότε εξόδου / εισόδου, και αυτό πρέπει να εφαρμοστεί στο drawRect (πέρασε στην drawInRect).

Ένας περιορισμός είναι ότι η προσέγγιση αυτή προϋποθέτει ουσιαστικά ότι η εικόνα που σχεδιάζετε είναι μεγαλύτερο από το πλαίσιο της εικόνας. Δεν το έχω δοκιμάσει αυτό, αλλά νομίζω ότι μπορείτε να χρησιμοποιήσετε αυτόν τον κωδικό για να χειριστεί την περικοπή / ζουμ, αλλά ορίζοντας ρητά την παράμετρο κλίμακας για να είναι η παράμετρος πιο πάνω κλίμακα. Από προεπιλογή, UIKit εφαρμόζει έναν πολλαπλασιαστή με βάση την ανάλυση της οθόνης.

Τέλος, πρέπει να σημειωθεί ότι αυτή η προσέγγιση UIKit είναι υψηλότερο επίπεδο από ό, τι CoreGraphics / Quartz και Core προσεγγίσεις εικόνας, και φαίνεται να χειριστεί τα ζητήματα προσανατολισμό της εικόνας. Αξίζει επίσης να σημειωθεί ότι είναι αρκετά γρήγορο, δεύτερη σε ImageIO, σύμφωνα με αυτό το post εδώ: http://nshipster.com/image-resizing/

Απαντήθηκε 28/05/2015 στις 04:58
πηγή χρήστη

ψήφοι
0

Swift έκδοση:

    static func imageWithImage(image:UIImage, newSize:CGSize) ->UIImage {
    UIGraphicsBeginImageContextWithOptions(newSize, true, UIScreen.mainScreen().scale);
    image.drawInRect(CGRectMake(0, 0, newSize.width, newSize.height))

    let newImage = UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();
    return newImage
}
Απαντήθηκε 24/02/2015 στις 07:32
πηγή χρήστη

ψήφοι
0
- (UIImage*)imageScale:(CGFloat)scaleFactor cropForSize:(CGSize)targetSize
{
    targetSize = !targetSize.width?self.size:targetSize;
    UIGraphicsBeginImageContext(targetSize); // this will crop

    CGRect thumbnailRect = CGRectZero;

    thumbnailRect.size.width  = targetSize.width*scaleFactor;
    thumbnailRect.size.height = targetSize.height*scaleFactor;
    CGFloat xOffset = (targetSize.width- thumbnailRect.size.width)/2;
    CGFloat yOffset = (targetSize.height- thumbnailRect.size.height)/2;
    thumbnailRect.origin = CGPointMake(xOffset,yOffset);

    [self drawInRect:thumbnailRect];

    UIImage *newImage  = UIGraphicsGetImageFromCurrentImageContext();

    if(newImage == nil)
    {
        NSLog(@"could not scale image");
    }

    UIGraphicsEndImageContext();

    return newImage;
}

Κάτω από το παράδειγμα του έργου: Αριστερά εικόνας - (προέλευσης εικόνας)? Δεξιά εικόνα με κλίμακα x2

εισάγετε περιγραφή της εικόνας εδώ

Αν θέλετε να αναβαθμίσουν την εικόνα, αλλά διατηρούν το πλαίσιό του (αναλογίες), καλέστε τη μέθοδο με αυτόν τον τρόπο:

[yourImage imageScale:2.0f cropForSize:CGSizeZero];
Απαντήθηκε 12/02/2015 στις 15:30
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more