2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

railsのGravatarで表示するデフォルト画像を変更する

Last updated at Posted at 2020-03-19

#いきさつ
Railsのチュートリアルを進めていた時に、Gravatarを用いてユーザのプロフィール画像を設定していました。その際、
「デフォルト画像をもう少しオシャレにできないものか」
と思ったので、Gravatarのデフォルト画像変更方法について調べました。
ちなみにデフォルト画像は以下の通りです。
00000000000000000000000000000000.jpg

#Gravatarとは
画像をアップロードし、指定したメールアドレスと画像を関連づけることができる無料のサービスです。
チュートリアルでは、ユーザの画像を指定をするコードは以下の通りになっていると思います。

users_helper.rb
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パラメータを用いないこと。
    だそうです。

#実際にやってみる

現段階では、ユーザの一覧画面は以下の通りです。
スクリーンショット 2020-03-19 12.24.46.png
デフォルト画像として、先ほどお見せした水色の画像が設定されています。
こちらの記事によると、例えばdのパラメータにrobohashを指定すると、以下のようなロボットの画像がデフォルト画像になるようです。
00000000000000000000000000000000.png
実際にuser_helpers.rbを以下のように変更します。gravatar_urlのdにrobohashを設定しました。

users_helper.rb
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

すると
スクリーンショット 2020-03-19 12.27.07.png
確かにデフォルオ画像がロボットになりましたね。
別の画像も試してみます。参考文献の記載にしたがって、次はdにretroを指定します。

gravatar_url = "https://secure.gravatar.com/avatar/#{gravatar_id}?d=retro&?s=#{size}"

スクリーンショット 2020-03-19 12.32.09.png
デフォルト画像がドット絵になりました。
最後に、こちらの画像を試してみます(特に悪意はありません)。
otaku_winter (1).png
dに画像のURLを指定します。

gravatar_url = "https://secure.gravatar.com/avatar/#{gravatar_id}?d=https://resizer6.myct.jp/img/79313116268/otaku_winter.png&?s=#{size}"

スクリーンショット 2020-03-19 12.38.00.png
こちらもできました。

#まとめ
Gravatarのデフォルト画像は、dというパラメータに画像のパスを指定することで変更することができます。

#参考文献
https://ja.gravatar.com/site/implement/images/

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?