いくつかの雑誌のトップページを表示するアプリケーションがあります。これらの画像は高解像度です。低解像度の画像のみを表示する場合、画像全体をダウンロードするのは無駄であり、バッテリー/時間/データを消費します。したがって、問題は次のとおりです。画像のURLからサムネイルURLを取得して、画像をダウンロードする必要がないようにするにはどうすればよいですか。
3 に答える
サーバー側のプロセス(PHP、ASP ...など)を使用してサムネイルを作成し、新しいURLからダウンロードするだけです。
デイブは正しいと思います。最適な解決策は、イメージサーバー側を変更することです。ただし、自分に届く画像を100%制御できない可能性もあるようです。それは、より少ないデータをプルダウンするという点で多くのオプションをあなたに残しません...
デバイスのメモリ使用量を最小限に抑えるためにできることは、画像を適切なサイズにダウンサンプリングして、メモリに保存して表示する画像が必要な大きさになるようにすることです。
これは、次のようなコードで実行できます(ストリームをクリーンアップすることを忘れないでください)。
FileInputStream fis = new FileInputStream(new File(path));
final BufferedInputStream is = new BufferedInputStream(fis);
final Options opt = new BitmapFactory.Options();
// THIS IS THE IMPORTANT LINE:
opt.inSampleSize = sampleSize;
Bitmap img = BitmapFactory.decodeStream(is, null, opt);
http://developer.android.com/training/displaying-bitmaps/load-bitmap.htmlを読んで、適切なサンプルサイズを取得し、inJustDecodeBoundsを使用する方法を学ぶことができます。
我慢してください...算数は難しいです。
画像がインターレース/プログレッシブダウンロード用に作成された場合、ファイルデータの一部をダウンロードし、それを使用してサムネイルを作成することもできますが、これはかなり特殊なユースケースであり、広くサポートされる可能性は低いです。
それ以外の場合は、特定のバイト範囲の取得をサポートする画像形式とサーバーに関する深い知識があれば、サムネイルを作成するために必要な画像データのみを選択的にダウンロードできますが、それは非常に困難です。
おそらく、あなたのアイデアは興味深く、潜在的に有用ですが、それを行う方法はありません。
雑誌の数によっては、表紙の画像をダウンロードしてサムネイルを作成する別のサーバーを用意することを検討してください。次に、モバイルアプリは最初にそのサーバーにクエリを実行し、サムネイルが利用可能な場合は、フルサイズの画像をダウンロードする代わりにそれを使用します。