Как я уже упоминал в своем комментарии, IMO, функция в расширении действительно вызывается как отдельная функция, а не расширяет ее функциональность. Я бы предложил сделать его функцией изменения размера переданного изображения и возврата нового изображения.
Используя эту функцию, ваше изображение будет изменено до правильного размера и загружено в этот размер (проверено, что оно работает)
func resizeImage(image: UIImage, targetSize: CGSize) -> UIImage {
let rect = CGRect(x: 0, y: 0, width: targetSize.width, height: targetSize.height)
UIGraphicsBeginImageContextWithOptions(targetSize, false, 1.0)
image.draw(in: rect)
let newImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return newImage!
}
и затем называется так
let updatedSize = CGSize(width: 300.0, height: 400.0)
let resizedImage = self.resizeImage(image: origImage!, targetSize: updatedSize)
Теперь для решения проблемы с расширением на уровне 10 тыс. Футов.
Все это восходит к точкам по сравнению с тем, как оно отображается на iDevice. Возвращаясь к iPhone 2g, 3g, это был 1-1 для рендеринга, так что если вы запустите свой код на этом устройстве в симуляторе и установите размер изображения 320x480, это будет изображение 320x480, сохраненное в базе данных Firebase. Однако с улучшением экранов и повышением разрешающей способности изменился и рендеринг, который влияет на UIImage.
Таким образом, если бы вы настроили симуляцию проекта на iPhone 6, это же изображение было бы 640x960 (2x), а затем на iPhone 8+, размер был бы 960 x 1440 (3x). (здесь задействовано повышение дискретизации, поэтому мы игнорируем это здесь).
UIImage знает, на каком устройстве оно находится, так что это следует учитывать.
Опять же, это, вообще говоря, и задействовано много других компонентов, в частности, пиксели = logicPoints * scaleFactor