Compresser les images afin de réduire la taille du fichier
Je suis en train de construire une application qui permet à l'utilisateur de prendre une photo ou sélectionnez-le dans la bibliothèque de l'iPhone et de le transférer à l'analyse backend.
Le problème que je me pose est au sujet de la taille du fichier.
J'ai lu à propos de ce que les grands acteurs comme Facebook, Twitter, Instagram et Google au sujet de la résolution et de la taille du fichier mais je n'arrive pas à proximité.
Je suis sûr qu'ils ont le meilleur code et les outils pour le faire, mais je serai heureux de la mettre en œuvre aussi bien que possible avec iOS processus réguliers.
C'est ce que je suis en train de faire maintenant:
- (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;
}
Je suis en train de faire 1024px le nombre maximum autorisé de la taille (à la fois avec l'ot de la hauteur) pour démarrer certaines restrictions et puis je suis en train d'utiliser un maximum de compression pour réduire la taille.
Cela fonctionne et les coupures d'environ 50% de la taille de l'image sans vraiment d'endommager des fichiers Jpeg, mais il reste encore beaucoup de choses. Spécialement si les photos sont prises avec la caméra du téléphone et téléchargées. L'image traitée peut toujours facile d'avoir de 1 mo taille qui est beaucoup trop.
Je suppose que je pourrais manquer de certains utiles étape ou en utilisant la bonne technique.
Tout commentaire serait grandement apprécié.
Permettre à l'utilisateur de choisir la taille de l'image et de la mettre en garde à propos de la taille des données à télécharger si nécessaire.
Mais l'OP est juste qu'à 1024x768px, un comprimé d'image jpeg ne doit pas prendre jusqu'à 1 mo.
Je suis à l'aide d'Aviary photo editor et en suivant les docs des exemples, ce est le moyen de transmettre les données. Peut-être pas le seul moyen, mais cela peut expliquer pourquoi j'ai l'aller-retour. Lors de l'utilisation de fichiers PNG compression fonctionne comme prévu, mais le JPEG sont peut-être trop compressé déjà à travailler comme ça.
OriginalL'auteur Juan González | 2013-09-08
Vous devez vous connecter pour publier un commentaire.
J'ai eu un problème similaire et je pensais aussi que la compression ne fonctionnait pas. Il s'est avéré d'ailleurs dans mon code j'ai écrit le fichier sur le disque à l'aide de compression différents. Vous pourriez faire la même chose avec les données de cette fonction renvoie. Une bonne façon de vérifier qu'en effet, la compression est efficace, c'est de faire quelque chose comme ceci:
Je suis en utilisant une image de 640x480 et je reçois un fichier d'une taille allant de 325 ko (1.0) (jusqu'à 18 kB (0.0)
Une fois téléchargées vers le serveur et il peut ne pas être en mesure de reconstituer l'image réelle. Peut-être pas utile dans tous les scénarios.
OriginalL'auteur codemonkey
Swift-3 Version de @codeMonkey :-
Il travail parfait dans la compression de l'image .
Par compression il y aura des changements dans la qualité.
Cela réduit la qualité de l'image. Donc, il ne peut pas être une bonne solution.
OriginalL'auteur Shrawan
OriginalL'auteur herry.master