Kingfisher 3.0 iOS swift RoundCornerImageProcessor белый фон

Это код, который я использую для установки изображения пользователя, который отлично работает для фактического получения и установки изображения. Я получаю белый контур на картинке. Любая идея, как сделать это прозрачным?

let processor = RoundCornerImageProcessor(cornerRadius: 50)
self.userPhoto.backgroundColor = Colors.accent
self.userPhoto.kf.setImage(with: url, placeholder: UIImage(named: "ic_camera_alt_48pt"), options: [.processor(processor)])

Пример с 50 введите здесь описание изображения


person ajonp    schedule 21.06.2017    source источник
comment
попробуйте self.userPhoto.kf.clipsToBounds = true   -  person KKRocks    schedule 21.06.2017
comment
@KKRocks Я не вижу clipsToBounds на зимородке, только изображение. Я попробовал self.userPhoto.clipsToBounds = true, но безуспешно.   -  person ajonp    schedule 21.06.2017
comment
Изображение должно быть PNG с альфа-каналом, чтобы достичь того, чего вы хотите.   -  person Eric Aya    schedule 25.06.2017


Ответы (2)


Формат исходного изображения не поддерживает прозрачность (например, JPEG). Вы должны преобразовать изображение в изображение, которое поддерживает (например, PNG) перед кэшированием.

Из памятки Kingfisher:

По умолчанию (DefaultCacheSerializer) Kingfisher будет учитывать формат входного изображения и пытаться сохранить его без изменений. Однако есть некоторые исключения. Распространенным случаем является то, что при использовании RoundCornerImageProcessor вам всегда может понадобиться альфа-канал. Если ваше исходное изображение jpg, вы можете вместо этого установить сериализатор png:

let roundCorner = RoundCornerImageProcessor(cornerRadius: 20)
imageView.kf.setImage(with: url, 
    options: [.processor(roundCorner), 
              .cacheSerializer(FormatIndicatedCacheSerializer.png)]
)
person Brandon Zacharie    schedule 01.02.2018
comment
Это принятый ответ, и просто дополнение, вам, возможно, придется использовать clipToBounds=true в вашем UIImageView, если вы используете ResizingImageProcessor вместе с RoundCornerImageProcessor. - person bra.Scene; 02.07.2020

Вам не нужен RoundCornerImageProcessor

self.userPhoto.layerCornerRadius = 50
self.userPhoto.clipsToBounds = true
self.userPhoto.backgroundColor = Colors.accent
self.userPhoto.kf.setImage(with: url, placeholder: UIImage(named: "ic_camera_alt_48pt"))
person Tieme    schedule 04.08.2017