2016-09-09 13 views
1

私は単純なイメージファイルサイズ縮小タスクを行っていますが、この問題があります。 JPEGにノーロスオプションを使用すると、ファイルサイズは画像の元のNSData(3倍)になります(同じ解像度)。なにか提案を?私が同じデータ長を取得するために0.8品質の損失を取らなければならないようだNSDataからNSDataにUIImageに戻って結果の長さが3倍になる

2604768 //original length 
8112955 //new length if compression = 1 
2588870 //new length if compression = 0.8 

let data = someImageData 
print(data.length) 
let image = UIImage(data: data)! 
let newImageData = UIImageJPEGRepresentation(image, 1) 
print(newImageData.length) 
let newImageData = UIImageJPEGRepresentation(image, 0.8) 
print(newImageData.length) 

と出力:ここ

は簡単なコードです。私は何か見落としてますか?ピーズヘルプ。

編集:データをUIImageに変換してからUIImageJPEGRepresentation(image、1)に変換すると、新しいデータの長さのサイズが毎回増加します。しかし、UIImageJPEGRepresentation(image、0.8)を使用すると、新しいデータの長さのサイズは少し小さくなりますが、化合物の修飾の損失が問題になります。あなたのコードは、行とメモリに画像を抽出/解凍されてやっている何

+0

8112955.になりますしかし、それはまだ4年以上経っても解決されています... – JDG

答えて

2

- >let image = UIImage(data: data)! 、その後、最高品質の比率(q=1.0)let newImageData = UIImageJPEGRepresentation(image, 1)で、JPEGとして再圧縮します。そういうわけで、イメージが突然大きくなるのです。

NSDataからUIImageとしてイメージを取得すると、解凍/変換によってイメージのサイズが変更されます。 http://stackoverflow.com/questions/11500396/converting-uiimage-to-nsdata-with-:

画像のファイルサイズは、実際に私は再びいくつかの検索を行なったし、その上でこの質問を見つけた

+0

データは画像ファイル(PHImageManager.defaultManager()。requestImageDataForAssetで取得)から取得したものです。ファイルサイズは実際に2604768に近い – JDG

関連する問題