Bilder komprimieren, um die Dateigröße zu reduzieren

Ich erstelle eine App, mit der der Benutzer ein Foto aufnehmen oder eines aus der Bibliothek auf dem iPhone auswählen und in das Parse-Backend hochladen kann.

Das Problem, mit dem ich konfrontiert bin, betrifft die Größe der Datei.

Ich habe gelesen, was große Player wie Facebook, Twitter, Instagram und Google in Bezug auf Auflösung und Dateigröße tun, aber ich komme dem nicht näher.

Ich bin mir sicher, dass sie den besten Code und die besten Tools dafür haben, aber ich werde es gerne so gut wie möglich mit den regulären Prozessen von iOS implementieren.

Das mache ich gerade:

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

Ich versuche, 1024px auf die maximal zulässige Größe (beide mit ot height) einzustellen, um dort einige Einschränkungen zu treffen, und wende dann die Maximalkomprimierung an, um die Größe zu verringern.

Dies funktioniert und schneidet ungefähr 50% der Bildgröße, ohne JPEGs wirklich zu beschädigen, aber es ist immer noch eine Menge. Insbesondere, wenn Fotos mit der Kamera des Telefons aufgenommen und hochgeladen wurden. Das verarbeitete Bild kann immer noch leicht eine Größe von 1 MB haben, was viel zu viel ist.

Ich vermute, ich könnte einen nützlichen Schritt verpassen oder die falsche Technik anwenden.

Jede Rückmeldung wäre sehr dankbar.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage