Ich erstelle eine App, mit der der Benutzer ein Foto aufnehmen oder aus der Bibliothek auf dem iPhone auswählen und in das Parse-Backend hochladen kann.Bilder komprimieren, um die Dateigröße zu reduzieren
Das Problem, mit dem ich konfrontiert bin, betrifft die Größe der Datei.
Ich habe gelesen, was große Spieler wie Facebook, Twitter, Instagram und Google in Bezug auf Auflösung und Dateigröße machen, aber ich kann nicht näher kommen.
Ich bin sicher, dass sie den besten Code und die besten Tools haben, um das zu tun, aber ich werde mich freuen, sie so gut wie möglich mit den regulären iOS-Prozessen zu implementieren.
Das ist, was ich jetzt tun:
- (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 die maximun zulässige Größe (beide mit ot Höhe), um einige Einschränkungen dort zu beginnen und ich bin Anwendung maximun dann Komprimierung, um die Größe zu reduzieren.
Das funktioniert und schneidet ungefähr 50% der Bildgröße, ohne JPEGs wirklich zu beschädigen, aber es ist immer noch sehr viel. Besonders, wenn Fotos mit der Kamera des Telefons aufgenommen und hochgeladen werden. Das verarbeitete Bild kann immer noch 1MB groß sein, was viel zu viel ist.
Ich vermute, dass ich einige nützliche Schritte vermissen oder die falsche Technik verwenden könnte.
Jede Rückmeldung würde sehr geschätzt werden.
ich über die Rundreise von UIImage zu NSData frage mich, und zu UIImage zurück. Haben Sie [imageData length] vor der Initialisierung eines neuen UIImage überprüft? Vielleicht möchten Sie das codierte NSData-Objekt von dieser Funktion zurückgeben, damit Sie das Byte-Array auf den Server hochladen können. – umlum
Erlaubt dem Benutzer, die Bildgröße zu wählen und sie bei Bedarf über die zu hochzuladende Datengröße zu warnen. – Wain
@Wain Aber das OP ist richtig, dass bei 1024x768px ein vollständig komprimiertes JPEG-Bild nicht 1MB aufnehmen sollte. – umlum