#いきさつ
Railsのチュートリアルを進めていた時に、Gravatarを用いてユーザのプロフィール画像を設定していました。その際、
「デフォルト画像をもう少しオシャレにできないものか」
と思ったので、Gravatarのデフォルト画像変更方法について調べました。
ちなみにデフォルト画像は以下の通りです。
#Gravatarとは
画像をアップロードし、指定したメールアドレスと画像を関連づけることができる無料のサービスです。
チュートリアルでは、ユーザの画像を指定をするコードは以下の通りになっていると思います。
def gravatar_for(user, options = { size: 80 })
gravatar_id = Digest::MD5::hexdigest(user.email.downcase)
size = options[:size]
gravatar_url = "https://secure.gravatar.com/avatar/#{gravatar_id}?s=#{size}"
image_tag(gravatar_url, alt: user.name, class: "gravatar")
end
それぞれのユーザの画像は、表示する画像のURLを指定するgravatar_urlに依存します。
#gravatar_urlのパラメータ
今の段階では、表示する画像のURLとして
https://secure.gravatar.com/avatar/#{gravatar_id}?s=#{size}
が指定されています。
このパスの指定に何かヒントがありそうです。公式サイトにあったこちらの記事によると、
If you'd prefer to use your own default image (perhaps your logo, a funny face, whatever), then you can easily do so by supplying the URL to an image in the d= or default= parameter. The URL should be URL-encoded to ensure that it carries across correctly, for example:<img src="https://www.gravatar.com/avatar/00000000000000000000000000000000?d=https%3A%2F%2Fexample.com%2Fimages%2Favatar.jpg" />
とのこと。つまり、URLのdまたはdefaultというパラメータに設定したいパスを指定することで、任意の画像をデフォルト画像に指定できるとのこと。
ただし、以下の制約があります。
MUST be publicly available (e.g. cannot be on an intranet, on a local development machine, behind HTTP Auth or some other firewall etc). Default images are passed through a security scan to avoid malicious content.
MUST be accessible via HTTP or HTTPS on the standard ports, 80 and 443, respectively.
MUST have a recognizable image extension (jpg, jpeg, gif, png)
MUST NOT include a querystring (if it does, it will be ignored)
- 誰もがアクセス可能な画像であること(公開範囲を限定している画像やローカル環境にある画像はNG)。
- HTTP, HTTPSのポート番号がそれぞれ80番、443番であること。
- 拡張子がjpg, jpeg, gif, pngのいずれかであること。
- パスにURLパラメータを用いないこと。
だそうです。
#実際にやってみる
現段階では、ユーザの一覧画面は以下の通りです。
デフォルト画像として、先ほどお見せした水色の画像が設定されています。
こちらの記事によると、例えばdのパラメータにrobohashを指定すると、以下のようなロボットの画像がデフォルト画像になるようです。
実際にuser_helpers.rbを以下のように変更します。gravatar_urlのdにrobohashを設定しました。
def gravatar_for(user, options = { size: 80 })
gravatar_id = Digest::MD5::hexdigest(user.email.downcase)
size = options[:size]
gravatar_url = "https://secure.gravatar.com/avatar/#{gravatar_id}?d=robohash&?s=#{size}"
image_tag(gravatar_url, alt: user.name, class: "gravatar")
end
すると
確かにデフォルオ画像がロボットになりましたね。
別の画像も試してみます。参考文献の記載にしたがって、次はdにretroを指定します。
gravatar_url = "https://secure.gravatar.com/avatar/#{gravatar_id}?d=retro&?s=#{size}"
デフォルト画像がドット絵になりました。
最後に、こちらの画像を試してみます(特に悪意はありません)。
dに画像のURLを指定します。
gravatar_url = "https://secure.gravatar.com/avatar/#{gravatar_id}?d=https://resizer6.myct.jp/img/79313116268/otaku_winter.png&?s=#{size}"
#まとめ
Gravatarのデフォルト画像は、dというパラメータに画像のパスを指定することで変更することができます。