前人未踏の領域へ アプリ開発編

Android, iOSアプリ開発に関する調査メモ置き場。ほとんどAndroid。はてなダイアリーから移行したため古い記事にはアプリ以外も含まれます。

PicassoでWebP画像を表示する

課題

PicassoでWebP画像を表示したいが、WebPを表示するにはAcceptヘッダーにimage/webpが必要となる。どうすればよいか。

対応

OkHttpClientを作成し、Picasso.Builderを使ってdownloaderにセットする
addHeaderの内容はChromeのデフォルト値に合わせてみた。
q値(q=0.9) を付けることで image/webp が優先されるようにしている
ただし実際に効いているかは未検証。

/**
 * Picassoを初期化する
 */
fun initPicasso(context: Context) {
    val client = OkHttpClient.Builder()
        .addNetworkInterceptor {
            val rb = it.request().newBuilder()
            rb.addHeader("Accept", "image/webp,image/*;q=0.9,*/*;q=0.8")
            it.proceed(rb.build())
        }
        .build()
    val p = Picasso.Builder(context)
        .downloader(OkHttp3Downloader(client))
        .build()
    Picasso.setSingletonInstance(p)
}

参考

developer.mozilla.org

developer.mozilla.org