ユーザーが写真を撮るか、iPhone のライブラリから写真を選択して、Parse バックエンドにアップロードできるアプリを作成しています。
私が直面している問題は、ファイルのサイズに関するものです。
Facebook、Twitter、Instagram、Google などの大企業が解像度とファイル サイズに関して行っていることについて読んだことがありますが、それに近づくことはできません。
彼らはそれを行うための最高のコードとツールを持っていると確信していますが、iOS の通常のプロセスで可能な限り適切に実装できることを嬉しく思います。
これは私が今していることです:
- (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;
}
1024px を最大許容サイズ (両方とも高さ) にしていくつかの制限を開始し、最大圧縮を適用してサイズを縮小しようとしています。
これは機能し、JPEG に実際にダメージを与えることなく画像サイズの約 50% を削減しますが、それでもまだ大きいです。特に写真が携帯電話のカメラで撮影され、アップロードされた場合。処理された画像はまだ簡単に 1MB のサイズを持つことができますが、これは大きすぎます。
有用な手順を見逃しているか、間違った手法を使用している可能性があると推測しています。
どんなフィードバックでも大歓迎です。