2011-08-11 12 views
17

Android用WebPの使用例はありますか?私は、Webページの画像のリストを取得しようとし、それらをリストビューで画像ビューで表示しようとしています。Android用WebP

私はlibwebp apiを知っていて、NDKを使ってそれをAndroidプロジェクトに統合しましたが、私のバイナリwebpを撮ってイメージビューに表示するにはどうすればいいですか?

何か助けが素晴らしいだろう!

+1

いつも全く陳腐なと愚かな理由のために、オフトピックとしてクローズ: それはそうは次のようにXMLから(付属WebpImageView付き)ImageViewのにイメージをWEBPロードすることも簡単です。このミーン・ジャークの正気は、継続すればスタックオーバーフローを引き起こします。 – barneypitt

+0

late Androidスタジオ2.3以降では、画像を直接Web画像に変換することができます https://developer.android.com/studio/write/convert-webp.html – datBoy

答えて

23

NDweでlibwebpを使用します。 libwebp-0.1.3にはAndroid.mkファイル(旧式で構文エラーがありますが、それでもなお)が付属しています。また、/swig/ディレクトリにJNIバインディングが生成されています。

  1. ダウンロードNDKは、システムPATHにそれを置く:

    は、ここで私はそれが働いて得た方法です。

  2. ダウンロードlibwebp-0.1.3.tar.gz、your_project_dir/jni
  3. に置き、以下のいずれかでAndroid.mkを交換してください。
  4. jni/src/libwebp_java_wrap.cを下記から作成してください。
  5. jni/Application.mkを作成します(下の内容を参照)。
  6. run ndk-build from project directory。これにより、/libs/にファイル.soが生成されます。 nm -D libs/armeabi/libwebp.soで検査できます。リストでは、ネイティブライブラリ関数(WebPDecodeRGBなど)とそれらのJNIの対応(のようなJava_com_google_webp_libwebpJNI_WebPDecodeRGB
  7. 両方は、Javaコードでそれを使用する方法の例については以下を参照してくださいあなたのAndroidプロジェクト
  8. のパスを構築するために/jni/swig/libwebp.jarを追加表示されます

Android.mkのコンテンツはこちらです。オリジナルから変更されました:エンコーダビットを削除しましたが、これは不要ですが、libwebp_java_wrap.cを追加しました。include $(BUILD_STATIC_LIBRARY)include $(BUILD_SHARED_LIBRARY)に変更しました。 libwebp_java_wrap.cため

LOCAL_PATH:= $(call my-dir) 

include $(CLEAR_VARS) 
LOCAL_SRC_FILES := \ 
    src/dec/alpha.c \ 
    src/dec/frame.c \ 
    src/dec/idec.c \ 
    src/dec/layer.c \ 
    src/dec/quant.c \ 
    src/dec/tree.c \ 
    src/dec/vp8.c \ 
    src/dec/webp.c \ 
    src/dec/io.c \ 
    src/dec/buffer.c \ 
    src/dsp/yuv.c \ 
    src/dsp/upsampling.c \ 
    src/dsp/cpu.c \ 
    src/dsp/dec.c \ 
    src/dsp/dec_neon.c \ 
    src/dsp/enc.c \ 
    src/utils/bit_reader.c \ 
    src/utils/bit_writer.c \ 
    src/utils/thread.c \ 
    src/libwebp_java_wrap.c \ 

LOCAL_CFLAGS := -Wall -DANDROID -DHAVE_MALLOC_H -DHAVE_PTHREAD -DWEBP_USE_THREAD \ 
       -finline-functions -frename-registers -ffast-math \ 
       -s -fomit-frame-pointer -Isrc/webp 

LOCAL_C_INCLUDES += $(LOCAL_PATH)/src 

LOCAL_MODULE:= webp 

include $(BUILD_SHARED_LIBRARY) 

コンテンツを除去符号ビットを除いて、libwebp tarballにバンドルとして、それは基本的に同じだ、hereあります。Application.mkため

内容:

# The ARMv7 is significanly faster due to the use of the hardware FPU 
APP_ABI := armeabi armeabi-v7a 
APP_PLATFORM := android-9 

ここではJavaコードで使用する方法です。バイト[]配列をint []カラー配列に変換する方法に注目してください。エンディアンが変更された場合、これは破損します。幅と高さに単一の整数の代わりに配列を使う方法にも注意してください。

static { 
    System.loadLibrary("webp"); 
} 

private Bitmap webpToBitmap(byte[] encoded) { 

    int[] width = new int[] { 0 }; 
    int[] height = new int[] { 0 }; 
    byte[] decoded = libwebp.WebPDecodeARGB(encoded, encoded.length, width, height); 

    int[] pixels = new int[decoded.length/4]; 
    ByteBuffer.wrap(decoded).asIntBuffer().get(pixels); 

    return Bitmap.createBitmap(pixels, width[0], height[0], Bitmap.Config.ARGB_8888); 

} 
+0

WebPを表示するサンプルプロジェクトがありますあなたがここでやったようにアンドロイドのイメージ? –

+1

私は、最新のWebP src(0.2.0)のために、上記のPēterisの手順を使用してこの作業を成功させました。 Pēterisのように、私はエンコーディングのサポートが必要ないので、私の更新されたAndroid.mkとlibwebp_java_wrap.cはhttps://gist.github.com/3719812で利用可能です。 –

+2

ありがとうございます。 – geomaster

0

現在のところ、Webブラウザを含むAndroid搭載端末のネイティブアプリにWeb画像を表示する方法はありません。これらの画像を表示するには、サードパーティのアプリを調べなければなりません。

WebPメーリングリストによると、彼らはWebPサポートをAndroid SDKに組み込んでいます。彼らはいつ発表するのか正確には言いませんでしたが、そうするとビットマップをJPEGやPNGだけでなくWebP形式でも保存できるはずです。

EDIT:Android 4.0 aka Ice Cream Sandwichには、WebP形式のネイティブサポートが付属しています。サポートされているファイルタイプはAndroid developer siteです。

3

GoogleはWEBPしかし画像は、Android 4.0と4.1で標準的なブラウザでとChromeの両方青questionmarksとして表示WEBP私たち自身のテストでは、アンドロイド4.0以降(http://developer.android.com/guide/appendix/media-formats.html)以降でサポートされていることを主張しています。 Android 4.2のWebPイメージは、webviewとgoogle chromeで正常に表示されるようです。

+1

彼らはその文書に言及しています。無損失と透明度は4.2.1以上でしか動作しません。私は透明度の高い作業をしないで損失のある画像を推測しています4.0 + –

4

Androidライブラリを作成しました。

https://github.com/EverythingMe/webp-android

WEBP-アンドロイド我々はWEBPを愛しているので、我々はEverythingMeで使用するライブラリです。帯域幅を節約するだけでなく、APKサイズを縮小するためにも使用します。

webp-androidはクロムのwebpデコーダの適応であり、JNIラッパーを追加してJavaコードで簡単に使用できます。

<me.everything.webp.WebpImageView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    webp:webp_src="@drawable/your_webp_image" /> 
+0

あなたは正しく編集されています。 – Rotemmiz

+0

ライブラリを作成してもいいですが、実際には何も起こらないため、出力ライブラリの.aarファイルをプロジェクトのlibsに入れてもこのライブラリを追加する方法についてのガイドも作成してください。 Android Studioでそれを確認してライブラリとしてカウントするにはどうすればよいですか? – careful7j

関連する問題