Kompresuj obrazy, aby zmniejszyć rozmiar pliku

Buduję aplikację, która pozwala użytkownikowi zrobić zdjęcie lub wybrać jedną z biblioteki na iPhone'ie i przesłać ją do zaplecza Parse.

Problem, przed którym stoję, dotyczy rozmiaru pliku.

Czytałem o tym, co robią wielcy gracze, tacy jak Facebook, Twitter, Instagram i Google w zakresie rozdzielczości i rozmiaru pliku, ale nie mogę się do tego zbliżyć.

Jestem pewien, że mają do tego najlepszy kod i narzędzia, ale z przyjemnością wdrożę je tak dobrze, jak to możliwe, za pomocą zwykłych procesów iOS.

Właśnie to robię teraz:

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

Próbuję uczynić 1024px maksymalnym dozwolonym rozmiarem (oba z ot wysokości), aby rozpocząć tam pewne ograniczenia, a następnie stosuję kompresję maximun, aby zmniejszyć rozmiar.

To działa i redukuje około 50% rozmiaru obrazu, nie uszkadzając plików JPEG, ale wciąż jest dużo. Specjalnie, jeśli zdjęcia są robione aparatem telefonu i przesyłane. Przetworzony obraz nadal może mieć rozmiar 1 MB, co jest o wiele za dużo.

Zgaduję, że mógłbym przegapić jakiś użyteczny krok lub użyć niewłaściwej techniki.

Wszelkie opinie będą bardzo mile widziane.

questionAnswers(3)

yourAnswerToTheQuestion