2011-08-11 7 views
17

क्या एंड्रॉइड के लिए वेबपी का उपयोग करने के बारे में कोई उदाहरण हैं? मैं वेबपी छवियों की एक सूची प्राप्त करने की कोशिश कर रहा हूं और उन्हें एक छविदृश्य के साथ एक सूचीदृश्य में दिखा रहा हूं।एंड्रॉइड के लिए वेबप

मुझे पता है कि एक libwebp api है और मैंने इसे एनडीके का उपयोग करके अपने एंड्रॉइड प्रोजेक्ट में एकीकृत किया है, लेकिन मैं अपने बाइनरी वेबप लेने और इसे एक छविदृश्य में दिखाने के लिए एपीआई का उत्साहपूर्वक उपयोग कैसे करूं?

कोई भी मदद अद्भुत होगी!

+1

सामान्य पूरी तरह से घिसे-पिटे और बेवकूफ कारणों के लिए विषय से हटकर के रूप में बंद रहता है। यह पागल घुटने-झुकाव officiousness अगर यह जारी रहता है तो ढेर अतिप्रवाह को मार देगा। – barneypitt

+0

लेट्स एंड्रॉइड स्टूडियो 2.3+ पर, अब आप अपनी छवियों को सीधे वेबपी छवियों में परिवर्तित कर सकते हैं https://developer.android.com/studio/write/convert-webp.html – datBoy

उत्तर

23

एनडीके के साथ libwebp का उपयोग करें। libwebp-0.1.3 पहले से ही एंड्रॉइड.एमके फ़ाइल (पुराने और वाक्यविन्यास त्रुटियों के साथ आता है) के साथ आता है। इसने /swig/ निर्देशिका में जेएनआई बाइंडिंग भी उत्पन्न की।

  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. प्रोजेक्ट निर्देशिका से ndk-build चलाएं। यह में .so फ़ाइलों को उत्पन्न करता है। आप उन्हें nm -D libs/armeabi/libwebp.so के साथ देख सकते हैं। सूची में आप देखेंगे कि दोनों देशी पुस्तकालय कार्यों (जैसे WebPDecodeRGB) और उनके JNI समकक्षों (जैसे Java_com_google_webp_libwebpJNI_WebPDecodeRGB)
  7. जोड़े /jni/swig/libwebp.jar अपने Android परियोजना के मार्ग का निर्माण करने के
  8. उदाहरण के लिए नीचे देखें कैसे जावा कोड में इसका इस्तेमाल करने के

यहां 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) 

सामग्री here है, यह मूलतः एक ही है libwebp टारबॉल में आते हैं, जो हटाया एनकोडर बिट्स को छोड़कर के रूप में।Application.mk के लिए

सामग्री:

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

यहाँ जावा कोड में उपयोग करने के लिए कैसे। ध्यान दें कि यह बाइट [] सरणी को 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

क्या एक नमूना प्रोजेक्ट है जो एक वेबपी दिखाता है एंड्रॉइड पर छवि, जैसा कि आपने यहां किया है? –

+1

मैंने नवीनतम वेबप src (0.2.0) के लिए उपरोक्त Pēteris 'चरणों का उपयोग करके सफलतापूर्वक यह काम किया है। पेटरिस की तरह, मुझे एन्कोडिंग समर्थन की आवश्यकता नहीं थी, इसलिए मेरे अपडेट किए गए एंड्रॉइड.एमके और libwebp_java_wrap.c https://gist.github.com/3719812 –

+2

पर उपलब्ध हैं, इसके लिए धन्यवाद * लाख *! – geomaster

0

वर्तमान में वेब ब्राउज़र सहित किसी भी एंड्रॉइड डिवाइस पर किसी भी मूल ऐप पर वेबप छवि प्रदर्शित करने का कोई तरीका नहीं है। इन छवियों को प्रदर्शित करने के लिए आपको तीसरे पक्ष के ऐप्स को देखना होगा।

वेबप मेलिंग सूची के अनुसार, वे एंड्रॉइड एसडीके में वेबपी समर्थन को शामिल करने पर काम कर रहे हैं। उन्होंने यह नहीं कहा कि वास्तव में जब वे इसे रिलीज़ करने की योजना बनाते हैं, लेकिन जब वे करते हैं तो आपको वेबप प्रारूप के साथ-साथ जेपीईजी और पीएनजी के रूप में बिटमैप्स को बचाने में सक्षम होना चाहिए।

संपादित करें: एंड्रॉइड 4.0 उर्फ ​​आइस क्रीम सैंडविच अब वेबपी प्रारूप के लिए मूल समर्थन के साथ आता है। आप Android developer site पर समर्थित फ़ाइल प्रकार देख सकते हैं।

3

गूगल कि WebP एंड्रॉयड से शुरू समर्थित है का दावा है 4.0+ (http://developer.android.com/guide/appendix/media-formats.html), हालांकि हमारे अपने परीक्षण webp छवियों दोनों मानक ब्राउज़र में और Chrome, Android 4.0 और 4.1 पर नीले रंग के रूप में questionmarks दिखाने में। एंड्रॉइड 4.2 वेबपी छवियों पर एक वेबव्यू में और Google क्रोम में ठीक प्रतीत होता है।

+1

वे उस दस्तावेज़ पर उल्लेख करते हैं, लापरवाही और पारदर्शिता केवल 4.2.1+ पर काम करती है। मैं पारदर्शिता कार्य के बिना हानिकारक छवियों का अनुमान लगा रहा हूं 4.0+ –

4

हमने इसके लिए एक एंड्रॉइड लाइब्रेरी लिखी है।

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

webp-एंड्रॉयड एक पुस्तकालय हम EverythingMe में उपयोग के बाद से हम webp प्यार है। हम बैंडविड्थ को बचाने के साथ-साथ हमारे एपीके आकारों को कम करने के लिए इसका इस्तेमाल करते हैं।

वेबप-एंड्रॉइड क्रोमियम के वेबप डिकोडर का एक अनुकूलन है, और जेएनआई रैपर का एक जोड़ा आसानी से इसे अपने जावा कोड में उपयोग करने के लिए है। यह भी webp एक्सएमएल से छवियों को एक imageView करने के लिए (शामिल WebpImageView के साथ) तो जैसे लोड करने के लिए आसान है:

<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 में डालूं - कुछ भी वास्तव में नहीं होता है। एंड्रॉइड स्टूडियो को इसे कैसे देखें और पुस्तकालय के रूप में गिनें कैसे करें? – careful7j

संबंधित मुद्दे