Сжатие изображений, чтобы уменьшить размер файла
Я создаю приложение, которое позволяет пользователю сделать фотографию или выбрать одну из библиотеки на iPhone и загрузить ее в бэкэнд Parse.
Проблема, с которой я сталкиваюсь, связана с размером файла.
Я читал о том, что делают крупные игроки, такие как Facebook, Twitter, Instagram и Google, в отношении разрешения и размера файла, но я не могу приблизиться к этому.
Я уверен, что у них есть лучший код и инструменты для этого, но я буду рад реализовать его как можно лучше с обычными процессами iOS.
Вот чем я сейчас занимаюсь:
- (UIImage *)normalResImageForAsset:(ALAsset*)asset
{
// Convert ALAsset to UIImage
UIImage *image = [self highResImageForAsset:asset];
// Determine output size
CGFloat maxSize = 1024.0f;
CGFloat width = image.size.width;
CGFloat height = image.size.height;
CGFloat newWidth = width;
CGFloat newHeight = height;
// If any side exceeds the maximun size, reduce the greater side to 1200px and proportionately the other one
if (width > maxSize || height > maxSize) {
if (width > height) {
newWidth = maxSize;
newHeight = (height*maxSize)/width;
} else {
newHeight = maxSize;
newWidth = (width*maxSize)/height;
}
}
// Resize the image
CGSize newSize = CGSizeMake(newWidth, newHeight);
UIGraphicsBeginImageContext(newSize);
[image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
// Set maximun compression in order to decrease file size and enable faster uploads & downloads
NSData *imageData = UIImageJPEGRepresentation(newImage, 0.0f);
UIImage *processedImage = [UIImage imageWithData:imageData];
return processedImage;
}
Я пытаюсь сделать 1024px максимально допустимым размером (оба с высотой), чтобы начать некоторые ограничения, а затем я применяю максимальное сжатие, чтобы уменьшить размер.
Это работает и сокращает приблизительно 50% размера изображения, не повреждая JPEG-файлы, но это все еще много. Особенно, если фотографии сделаны с камеры телефона и загружены. Обработанное изображение все еще может иметь размер 1 МБ, что слишком много.
Я предполагаю, что я мог пропустить какой-то полезный шаг или использовать неправильную технику.
Любая обратная связь будет принята с благодарностью.