2

UIImage文字列に変換してBase64、それをWebサービスのSOAPに送信してからデータベースに送信しようとしています。

だから、私は自分のアプリで写真を選び、この方法でそれを変換しようとします:

public static string GetBase64FromImage (UIImage picture_)
{
    if (picture_ == null)
        return string.Empty;

    NSData data = picture_.AsJPEG();
    Console.WriteLine("JPEG length: " + data.Length);

    byte[] byteArray = new byte[data.Length];
    System.Runtime.InteropServices.Marshal.Copy(data.Bytes, byteArray, 0, Convert.ToInt32(data.Length));
    string base64 = Convert.ToBase64String(byteArray);
    Console.WriteLine("Base64 length: "+base64.Length);

    return base64;
}

ここでの私のポイントは、写真の全長です。画像をファイルシステムに保存してインポートすると、画像のサイズは約1 Moになります。しかし、私の方法では、JPEGはその2倍(ほぼ2Mo)です。つまり、私のBase64は3 Moを回っており、これは巨大です。

JPEGのNSDataが「通常の」サイズの2倍のサイズであるのはなぜですか。

4

1 に答える 1

4

JPEGは圧縮データ形式です。画像を(ファイル、ストリームなどに)保存する方法に応じて、異なる結果を得ることができます。

AsJPEG()を受け入れるオーバーロードがありfloat compressionQualityます。値を指定しない場合は、1.0fが使用されます(デフォルトとして)。これにより、デフォルトで最小の圧縮(最高の画像ですが最大のサイズ)が得られますUIImageJPEGRepresentation。OTOHを提供すると、最大の圧縮率(最小サイズ)が得られます。0.0

于 2012-11-06T16:26:47.893 に答える