Shopifyテーマ Chapter 11 画像の出力の仕方いろいろ
このチャプターではテーマ上でどのように画像を表示するかをみていきます。
Shopifyでは画像をアップロードすると自動的にShopfiyのCDN(コンテンツデリバリーネットワーク)上に画像が保管されます。
そして下記のようなオブジェクトが画像CDNのリンクを含んでいます。
article
collection
image
line_item
product
variant
そしてLiquidではこれらのオブジェクトに含まれる画像URLを出力し、テーマ上で画像として表示させる際には image_urlとimage_tagのフィルターを組み合わせて使います。
画像出力の基本形
まず簡単な例を見てみます。
{{ product | image_url: width 300 | image_tag }}
上記の例ではproduct のオブジェクトからまず image_urlのフィルターを使ってURLを抜き出し、そしてimage_tagのフィルターで画像として表示させるためのHTMLタグとして出力します。
上記のLiquidコードでは下記のようなHTMLタグが出力されます。
<img src="//cdn.shopify.com/s/files/1/0561/7470/2123/products/image-sample.jpg?v=1654828801&width=300" alt="Image Sample" width="300" height="200">
width と height
デフォルトではwidthとheightは画像URLのアスペクト比率を基準に追加されます。ですが、widthを image_tagのパラメーターとして自分で書き加えることもできます。
{{ product | image_url: width: 400 | image_tag: width: 300 }}
もしくは指定しないようにするためには下記の様にnilのパラメーターを加えます。
{{ product | image_url: width: 400 | image_tag: width: nil }}
同じ様に高さを指定することも、また指定しないようにすることもできます。
sizesのHTMLアトリビュートを加える。
sizesのパラメーターを記述し、画面サイズにより出力される際のサイズを細かく設定することもできます。
srcsetのサイズの指定
デフォルトで imageタグのsrcsetは画像URLによって定義される最大値を自動的に割り当てられますが、自分で指定することもできます。
{{ product | image_url: width: 600 | image_tag: widths: '200, 300, 400' }}
altのテキスト
altのテキストを上書きすることもできます。
{{ product | image_url: width 200 | image_tag: alt: 'Sample Image' }}
Classの指定や他のHTMLアトリビュート
classの指定なども可能です。
{{ product | image_url: width: 200 | image_tag: class: 'custom-class', loading: 'lazy' }}
下記のように出力されます。
<img src="shopify-cdn-url" alt="Sample Image" width="200" height"200" class="custom-class" loading="lazy">
以前つかわれていたimg_url とimg_tagのフィルターはdeprecated (サポート対象外・廃止予定)だぞう。以下は過去のテーマのため残しておきます。
まずimg_urlフィルターをみていきます。このフィルターを使うと画像のURLが返ってくることになります。ただそれにはサイズのパラメーターを指定する必要があります。またこのフィルターは下記のような画像を持つオブジェクトに対して有効です。
product
variant
line item
collection
article
image
下記の例をみてください。
{{ product.featured_image | img_url: '100x100' }}
この例ではimg_urlフィルターを使い 100x100のサイズを指定しています。この値はShopifyに画像をアップロードした際にShopifyによって自動的に作り出されたサイズです。
この場合画像は100x100ピクセルより大きくなることはありません。
もし正方形のサイズをアップロードした場合は、この指定サイズのまま変更されます。
しかし、オリジナルの画像が正方形でないく長方形であれば、Shopifyはその形に従い長い方の辺を100ピクセルとしてサイズ変更します。
基本的には画像のクロップを行わない限り、もとの形(アスペクト比率)を維持したまま、サイズ変更が行われます。
また縦や横だけのサイズを指定する方法もあります。サイズのパラメーターで後述。
新しいパラメーター
サイズ
では基本のパラメーターであるサイズからみてみます。
{{ product.featured_image | img_url: '450x450' }}
この場合、縦と高さが450ピクセルで指定されます。
ただし正方形でない画像は長い方の辺が基準で出力されます。下記の写真は正方形でないため、長い方の辺が450ピクセルとなり出力されます。
逆に高さだけを指定することもできます。'x450'と高さだけを書きます。
{{ product.featured_image | img_url: 'x450'}}
先程と同じ横長の画像を使用した場合、下記のように先程より大きい画像が出力されます。
このように「1辺」だけを指定した場合、Shopifyは他の辺はオリジナルサイズに合わせて、オリジナルのアスペクト日(縦横比)をキープしたまま画像サイズを計算します。
Crop(切り抜き)
正方形で指定通りのサイズで出力したい場合は、正方形のオリジナル画像を予め用意しておくのも一つの方法です。
ですが、Liquidコードを使って画像を切り抜いた状態で出力することも可能です。
下記のコードのようにcropのパラメーターを追加します。
{{ product.featured_image | img_url: '450x450', crop:'center' }}
top
center
bottom
left
right
と切り抜く位置を指定します。
スケール 大きさ
縦横のサイズ比率のように大きさも指定することができます。
下記のコードのようにscaleのパラメーターを使用し、指定できるオプションは
2
3
です。
{{ product.featured_image | img_url: '450x450', crop: 'center, scale:2 }}
*画像を載せましたがnoteだと大きさ固定されるので参考程度に
フォーマット
最後のパラメーターにフォーマットを加えることができます。フォーマットは画像のタイプで下記のオプションが使えます。
jpg
pjpg
{{ product.featured_image | img_url: '450x450', crop: 'center, scale: 2, format:'pjpg'}}
このような指定により画像はプログレッシブJPGとしてレンダリングされます。
Shopifyのシステムでは下記の変換に対応しているようです。
PNG から JPG
PNG から PJPG
JPG からPJPG
キャッシュ
リクエストされた画像が生成されたときについて。Shopifyに画像をアップロードしたとき、生成された画像はShopify CDN(Content Delivery Network)上にキャッシュされ利用可能になります。そのため、テンプレートがレンダリングされるたびに画像生成が行われ、読み込み速度が遅くなるという心配はありません。
まとめ
画像を出力するコードを記述するときに、あたらしいパラメーターを使えば、テンプレートにて画像をレスポンシブにすることが可能になります。HTMLの<picture>要素を使う、もしくはsrcsetやsizesを使う場合にも、これで適切な画像サイズや解像度を提供できるようになります。
この記事が気に入ったらサポートをしてみませんか?