2015-08-14 7 views
1

Мне нужно загрузить данные изображения в мой Parse.com бэкэнд, но я узнал, что мои фотографии слишком большие, размеры мудрые. NSHipster была статья на изменение размеров изображений с этим кодом:Получение измененного изображения из UIImageView

import ImageIO 

if let imageSource = CGImageSourceCreateWithURL(self.URL, nil) { 
    let options: CFDictionary = [ 
     kCGImageSourceThumbnailMaxPixelSize: max(size.width, size.height)/2.0, 
     kCGImageSourceCreateThumbnailFromImageIfAbsent: true 
    ] 

    let scaledImage = CGImageSourceCreateThumbnailAtIndex(imageSource, 0, options).flatMap { UIImage(CGImage: $0) } 
} 

К сожалению, этот код не компилируется в Swift 1.2. В частности, есть две проблемы. Не удалось инициализировать CFDictionary, и метод flatMap не был распознан.

+0

Я могу написать Objective c, эквивалентную изменению размера изображения в соответствии с кодом изображения, если это помогает в любом случае. –

+0

Спасибо за предложение. Я думаю, что ответа ниже будет достаточно, но я все еще очень заинтересован в том, чтобы этот код работал. –

+0

уверен, да, да, принимаем ответ, если это помогает :) –

ответ

1

Вот некоторые функции для изменения размера изображения:

import UIKit 

func RBSquareImageTo(image: UIImage, size: CGSize) -> UIImage { 
    return RBResizeImage(RBSquareImage(image), size) 
} 

func RBSquareImage(image: UIImage) -> UIImage { 
    var originalWidth = image.size.width 
    var originalHeight = image.size.height 

    var edge: CGFloat 
    if originalWidth > originalHeight { 
     edge = originalHeight 
    } else { 
     edge = originalWidth 
    } 

    var posX = (originalWidth - edge)/2.0 
    var posY = (originalHeight - edge)/2.0 

    var cropSquare = CGRectMake(posX, posY, edge, edge) 

    var imageRef = CGImageCreateWithImageInRect(image.CGImage, cropSquare); 
    return UIImage(CGImage: imageRef, scale: UIScreen.mainScreen().scale, orientation: image.imageOrientation) 
} 

func RBResizeImage(image: UIImage, targetSize: CGSize) -> UIImage { 
    let size = image.size 

    let widthRatio = targetSize.width/image.size.width 
    let heightRatio = targetSize.height/image.size.height 

    // Figure out what our orientation is, and use that to form the rectangle 
    var newSize: CGSize 
    if(widthRatio > heightRatio) { 
     newSize = CGSizeMake(size.width * heightRatio, size.height * heightRatio) 
    } else { 
     newSize = CGSizeMake(size.width * widthRatio, size.height * widthRatio) 
    } 

    // This is the rect that we've calculated out and this is what is actually used below 
    let rect = CGRectMake(0, 0, newSize.width, newSize.height) 

    // Actually do the resizing to the rect using the ImageContext stuff 
    UIGraphicsBeginImageContextWithOptions(newSize, false, 1.0) 
    image.drawInRect(rect) 
    let newImage = UIGraphicsGetImageFromCurrentImageContext() 
    UIGraphicsEndImageContext() 

    return newImage 
} 

От HERE.

0

Вот код Objective C, который масштабирует изображение, заданное параметрами.

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

    return newImage; 
} 
Смежные вопросы