2016-06-27 3 views
2

Я использую AlamofireImage скачать и установить мой UIImage:iOS Swift: как правильно масштабировать изображение?

backdrop.af_setImageWithURL(downloadURL) 

Изображение значительно больше, чем то, что я буду показывать и поэтому у меня есть проблема с ступенчатости. Как изменить размер изображения?

Результаты:

enter image description here

+0

Можете ли вы рассказать нам, что вы сделали до сих пор, и это не работает, так что мы можем вам помочь. Потому что, поскольку вопрос сейчас выглядит, он может быть классифицирован как основанный на мнениях и не подходит для этого форума. – Andrej

+0

Я ничего не делал относительно сглаживания, я не знаю, как это сделать. Мое изображение отлично выглядит отлично от псевдонимов. @Andrej – mrmike

+0

Какая у вас проблема с псевдонимом? Большинство алгоритмов изменения размера, вероятно, принесут тот же эффект. Общие алгоритмы изменения размера, см. Http://stackoverflow.com/a/28513086/1271826. Как правило, мы изменяем размер, чтобы минимизировать влияние памяти, однако, чтобы не устранять смягчение изображения из-за изменения его размера. – Rob

ответ

4

Вы можете изменить размер изображения любого размера, как только у вас есть действующий UIImage:

func resizedImageWith(image: UIImage, targetSize: CGSize) -> UIImage { 

    let imageSize = image.size 
    let newWidth = targetSize.width/image.size.width 
    let newHeight = targetSize.height/image.size.height 
    var newSize: CGSize 

    if(newWidth > newHeight) { 
     newSize = CGSizeMake(imageSize.width * newHeight, imageSize.height * newHeight) 
    } else { 
     newSize = CGSizeMake(imageSize.width * newWidth, imageSize.height * newWidth) 
    } 

    let rect = CGRectMake(0, 0, newSize.width, newSize.height) 

    UIGraphicsBeginImageContextWithOptions(newSize, false, 0.0) 

    image.drawInRect(rect) 

    let newImage = UIGraphicsGetImageFromCurrentImageContext() 
    UIGraphicsEndImageContext() 

    return newImage 
} 

Для любых других запросов/модификаций у вас есть, смотрите этот NShipster

+1

Согласен! Да, когда мы установим «масштаб» в 0.0, тогда будет использована шкала основного экрана, которая будет равна 2,0 или более для экранов Retina. Обновлен мой ответ. – Santosh

+0

Я бы также уменьшил его с помощью UIJPEGRepresentation (image, amountToScale0Through1) – Sethmr

+0

@Sethmr - 'UIImageJPEGRepresentation' не делает никакого масштабирования. Все, что он делает, - это преобразование 'UIImage' в' NSData' (либо делает объект намного крупнее, либо сокращает его, но вносит в него артефакты JPEG). Иногда вам нужно «UIImageJPEGRepresentation», но в этом вопросе нет ничего, чтобы предположить, что это необходимо здесь. – Rob

Смежные вопросы