3

UIImageJPEGRepresentation()次のコードのように、メソッドを使用して画像を圧縮できることがわかっています。

    NSData *imgData = UIImageJPEGRepresentation(imageResized, 0.5);
    NSLog(@"imgData.length :%d",imgData.length);

    imageResized = [UIImage imageWithData:imgData];
    NSData *imgData2 = UIImageJPEGRepresentation(imageResized, 1);

    NSLog(@"imgData2.length :%d",imgData2.length);

ログは次のとおりです。

2013-02-25 00:33:14.756 MyApp[1119:440b] imgData.length :371155
2013-02-25 00:33:20.988 MyApp[1119:440b] imgData2.length :1308415

私が混乱しているのはlengthimgDataimgData2が異なる理由です。私のアプリでは、画像をサーバーにアップロードする必要があります。NSDataストレージを節約するために をサーバーにアップロードする必要がありますか? Android フォンで をダウンロードしNSDataて画像に変換することはできますか? どんな助けでも大歓迎です!

4

2 に答える 2

13

UIImageある程度のサイズ (1024x768 など)から始めます。これには、メモリ内で 1024x768x4 バイトが必要です。次に、係数 0.5 で圧縮すると、371,155 バイトになります。

UIImage次に、圧縮されたデータを使用して新しい を作成します。これはまだ 1024x768 (または何でも)UIImageであるため、元の画像と同じ量のメモリ (1024x768x4) を使用します。次に、圧縮率を下げて 1,308,415 バイトの新しい JPG に変換します。

圧縮されたイメージの非圧縮バージョンを作成しても、バイト数はフル サイズのUIImage. 2 番目の非圧縮画像は、サイズは大きくなりますが、圧縮画像と同じ低品質のままです。

データは JPG を表しているため、データをダウンロードするものはすべて、Android フォンを含め、データを JPG として扱うことができます。

于 2013-02-24T17:04:52.390 に答える
3

2 番目のイメージのバイト数は、はるかに高い圧縮品質の値を に渡したために大きくなっていますUIImageJPEGRepresentation。品質を高くすると、より多くのバイトが必要になります。

サーバーにアップロードされると、ファイルは標準の JPEG ファイルになり、Android を含む任意のデバイスで表示できます。

于 2013-02-24T16:56:19.260 に答える