Comprimir imagens para reduzir o tamanho do arquivo

Estou criando um aplicativo que permite ao usuário tirar uma foto ou selecionar uma da biblioteca no iPhone e enviá-la para o back-end Parse.

O problema que estou enfrentando é quanto ao tamanho do arquivo.

Eu li sobre o que grandes jogadores como Facebook, Twitter, Instagram e Google fazem em termos de resolução e tamanho de arquivo, mas não consigo me aproximar disso.

Tenho certeza de que eles têm o melhor código e ferramentas para fazer isso, mas terei prazer em implementá-lo da melhor maneira possível com os processos regulares do iOS.

Isso é o que estou fazendo agora:

- (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;
}

Eu estou tentando fazer 1024px o tamanho máximo permitido (ambos com ot altura) para iniciar algumas restrições lá e então eu estou aplicando compressão maximun para reduzir o tamanho.

Isso funciona e corta aproximadamente 50% do tamanho da imagem sem realmente danificar JPEGs, mas ainda é muito. Especialmente se as fotos forem tiradas com a câmera do celular e enviadas. A imagem processada ainda pode facilmente ter 1 MB de tamanho, o que é demais.

Eu estou supondo que eu poderia estar faltando alguma etapa útil ou usando a técnica errada.

Qualquer comentário seria muito apreciado.

questionAnswers(3)

yourAnswerToTheQuestion