世界を旅して暮らしたい放浪エンジニアブログ

ContentulのImage APIはwebpへのコンバートもできるよ

本ブログの記事やメディアなどを管理しているContentfulのImage APIについて紹介します。

[ 目次 ]

はじめに

こんにちは、香港に住んでいるWEBデベロッパーのなかむ(@nakanakamu0828)です。

今回は本ブログの記事やメディアなどを管理しているContentfulのImage APIについて紹介します。
サイトのパフォーマンスを向上させたい場合、画像のサイズがネックになることがあります。そんな時にGoogleが提供している軽量な画像フォーマットのwebpを利用することがあるかと思いますが、ContentfulのImage APIでwebpに変換する方法を試していきたいと思います。

Images API

公式ドキュメントの↑の内容を参考します

Contentfulにアップロードした画像について

ベースURL

Contentfulにアップロードした画像は、images.ctfassets.netドメインからアクセスすることが可能です。

https://images.ctfassets.net/

アップロードした画像のURL

アップロードした画像のURLは以下のようになります。

■ アップロードした画像のURL

//images.ctfassets.net/httuqftbm1yv/2POTUqW9cZfG0YJBrZaQlP/70cb24436b25e7a218f3215e5528bf91/Nuxt.js____________________________________________________________.png

※ http or https のスキーマを省略することで、アクセスしたページのスキーマを利用する

■ アップロードした画像
Nuxt.jsで構築したブログをカイゼンした話

■ URLの形式について

https://images.ctfassets.net/{space_id}/{asset_id}/{token}/{name}
  • space_id: Contentfulのダッシュボードから"Create Space"で作成した際のID
  • asset_id: Contentfulのダッシュボードの"Media"メニューから対象となる画像を選択するとURL or Infoからわかります。
https://app.contentful.com/spaces/httuqftbm1yv/assets/2POTUqW9cZfG0YJBrZaQlP

2POTUqW9cZfG0YJBrZaQlPの部分がasset_id

  • name: アップロードした画像に設定したfilename(日本語などマルチバイトはURLエンコードしたもの)
  • token: トークンについては見つけられませんでした!APIから画像URLを取得するか、記事に埋め込んだURLからtokenを確認するしか方法がないかもですね

Image APIを試す

それではImage APIを試してみましょう。本ブログで利用した機能を中心に確認していきます。

画像形式を変換する

以下の3つの形式が利用可能です。

  • jpg
  • png
  • webp

画像URLのfmパラメータを利用してフォーマットを変換することができます。

■ URLの形式

https://{space_id}/{asset_id}/{token}/{name}?fm={image_format}

image_formatに、jpg or png or webpのいずれか変換したい形式を入れてください。
例えば、私のブログでは以下のように利用しています。

<picture class="block h-auto w-full">
  <source type="image/webp" srcset="//images.ctfassets.net/httuqftbm1yv/40qRzOhTRZ1LCFPnaVwuFR/7ae4ddb73152865319f3aaaf01b38342/test.png?fm=webp">
  <img
    alt="テスト"
    src="//images.ctfassets.net/httuqftbm1yv/40qRzOhTRZ1LCFPnaVwuFR/7ae4ddb73152865319f3aaaf01b38342/test.png"
  >
</picture>

webpが表示できない場合、png画像が表示されるようにしています。
webpについては以下の記事も参考にしてみてください。

-今話題の記事を読んで気になった- 「WebP画像形式」とは??

画像のリサイズ

width, heightを指定してリサイズすることができます。
画像URLw, hパラメータを利用してサイズを変更することができます。

■ URLの形式

https://{space_id}/{asset_id}/{token}/{name}?w={width}&h={height}

※ サイズはpx(ピクセル)になります。

以下の画像は、width: 200px, height: 100pxに変換した画像です。

画像リサイズサンプル

画像の角を丸くする

角を丸めたり、サークル画像を生成することも可能です。
画像URLのrパラメータを利用して角を丸めます。デフォルトは0で丸みがない状態です。サークル画像など最大限に丸めたい場合はmaxが指定できます。

■ URLの形式

https://{space_id}/{asset_id}/{token}/{name}?r={radius}

※ サイズはpx(ピクセル)になります。

以下の画像は、r=maxを指定した画像です。

画像リサイズサンプル

画像の切り抜き(クロッピング)

指定したサイズで画像を切り抜くことも可能です。w, hと合わせてにfitパラメータを利用します。

■ URLの形式

https://{space_id}/{asset_id}/{token}/{name}?fit={type}&w={width}&h={height}

※ サイズはpx(ピクセル)になります。

以下の画像は、fit=crop&w=400&h=400を指定した画像です。

画像リサイズサンプル

fitパラメータを利用するとサムネイル画像を生成することもできますし、f=faceで顔認識ができるようです。
その他にも機能があります。色々試してみたい方は、公式ドキュメントをご確認ください。

最後に

今回はContentfulの機能を少し深掘りする為に、Image APIを利用しました。
引き続き本ブログではContentfulを利用していきますので、他の機能についても学んでいきたいと思います。

前のページ

次のページ

Profile

なかむ🇭🇰Webデベロッパー

なかむ🇭🇰Webデベロッパー

香港在住4年目になるWEBエンジニアのなかむです。 現在は、LaravelやRailsを利用したWEB開発を中心にエンジニアをしています。 顧客は全て日本の企業になります。リモート開発にて各企業様の支援を行なっております

プロフィール詳細はこちら

Latest Posts