Я создаю расширение для общего доступа, и перед загрузкой в расширение моего контента мне нужно масштабировать большие фотографии до меньшего размера.Как масштабировать изображение в iOS Share Расширение перед загрузкой
Я использую этот код из How to resize an UIImage while maintaining its Aspect Ratio:
- (UIImage*) scaleImage:(UIImage*)image toSize:(CGSize)newSize {
CGSize scaledSize = newSize;
float scaleFactor = 1.0;
if(image.size.width > image.size.height) {
scaleFactor = image.size.width/image.size.height;
scaledSize.width = newSize.width;
scaledSize.height = newSize.height/scaleFactor;
}
else {
scaleFactor = image.size.height/image.size.width;
scaledSize.height = newSize.height;
scaledSize.width = newSize.width/scaleFactor;
}
UIGraphicsBeginImageContextWithOptions(scaledSize, NO, 0.0);
CGRect scaledImageRect = CGRectMake(0.0, 0.0, scaledSize.width, scaledSize.height);
[image drawInRect:scaledImageRect];
UIImage* scaledImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return scaledImage;
}
Однако, когда я пытаюсь свернуть большое изображение из моей фотографии библиотеки (5415x3610 в этом случае выстрел с DSLR) он выходит из строя из-за давления памяти. Хотя это похоже на угловой случай, мое приложение сильно зависит от расширения для iOS Share для обмена фотографиями из источников, отличных от iPhone, например, фотографии с высоким разрешением с камеры.
Очевидно, что загрузка 20-мегабайтной/8 МБ фотографии без масштабирования не является вариантом. Как уменьшить масштаб с меньшим использованием памяти?
Если ваш NewSize не является квадратом, есть проблема алгоритма: вы смотрите только в оригинальном соотношении 'если (image.size.width> image.size.height) ', а не в целевом отношении (' newSize.width/newSize.height'), поэтому вы потенциально увеличиваете ширину или высоту. Источник этого кода должен быть фиксированным или уменьшенным. –