<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Imgix  |  ぼちぼちブログ</title>
	<atom:link href="https://horumont.info/tag/imgix/feed/" rel="self" type="application/rss+xml" />
	<link>https://horumont.info</link>
	<description>教育／労働組合／プログラミング</description>
	<lastBuildDate>Sun, 09 May 2021 00:45:32 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.4.8</generator>

<image>
	<url>https://horumont.info/wp-content/uploads/2020/11/39cab8f0a1adc1a8ac2842b4a25f1e52-100x100.png</url>
	<title>Imgix  |  ぼちぼちブログ</title>
	<link>https://horumont.info</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Gatsby microCMSのブログ　Imgixで画像の処理をする</title>
		<link>https://horumont.info/programming/microcms-gatsby-imgix/</link>
					<comments>https://horumont.info/programming/microcms-gatsby-imgix/#respond</comments>
		
		<dc:creator><![CDATA[ほるもんT]]></dc:creator>
		<pubDate>Sun, 09 May 2021 00:44:10 +0000</pubDate>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[GatsbyJS]]></category>
		<category><![CDATA[Imgix]]></category>
		<category><![CDATA[microCMS]]></category>
		<guid isPermaLink="false">https://horumont.info/?p=472</guid>

					<description><![CDATA[目次 こまったことmicroCMS運営さんにチャットで問い合わせImgixを使って画像を最適化Imgixではもっといろいろできます。 こまったこと microCMSでは、gatsby-plugin-imageに対応してい [&#8230;]]]></description>
										<content:encoded><![CDATA[
  <div id="toc" class="toc tnt-number tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-2" checked><label class="toc-title" for="toc-checkbox-2">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">こまったこと</a></li><li><a href="#toc2" tabindex="0">microCMS運営さんにチャットで問い合わせ</a></li><li><a href="#toc3" tabindex="0">Imgixを使って画像を最適化</a></li><li><a href="#toc4" tabindex="0">Imgixではもっといろいろできます。</a></li></ol>
    </div>
  </div>

<h2><span id="toc1">こまったこと</span></h2>
<p>microCMSでは、gatsby-plugin-imageに対応していないため<br />
graphqlで画像データが渡ってこず、URLだけ渡ってくる仕様。<br />
どうやって画像の最適化をしようかな</p>
<h2><span id="toc2">microCMS運営さんにチャットで問い合わせ</span></h2>
<p>チャットで問い合わせをしました。</p>
<blockquote><p>
  いつもお世話になります。 GatsbyとmicroCMSでブログを作ろうとしています。 gatsby-plugin-imageで>microCMSの画像を扱いたいのですが、graphqlのデータを見ると、urlとwidthとheightしかわたってきてい>ないので、扱うことができません。 なにかやり方があるかご教示お願いしたいです
</p></blockquote>
<p>ご丁寧に対応いただき、次のことがわかりました。<br />
・ImgixというCDNを通して、APIを利用するとよい</p>
<p>あとから考えれば、ドキュメントなどをしっかり読めばわかりそうなことでした😅</p>
<h2><span id="toc3">Imgixを使って画像を最適化</span></h2>
<h3><a class="wp-editor-md-post-content-link" href="https://www.imgix.com/">Imgix</a>とは</h3>
<p>公式サイトより</p>
<blockquote><p>
  Powerful image processing, simple API<br />
  imgix transforms, optimizes, and intelligently caches your entire image library for fast websites and apps using simple and robust URL parameters.</p>
<p>  強力な画像処理、シンプルなAPI<br />
  imgixは、シンプルで堅牢なURLパラメーターを使用して、高速なWebサイトやアプリ用に画像ライブラリ全体を変換、最適化、およびインテリジェントにキャッシュします。
</p></blockquote>
<p>microCMSの画像タイプのコンテンツは基本的にこのCDNを通ってくるということなので<br />
ここのAPIでできることが基本的にできるということです。</p>
<h3>やりたいこと</h3>
<ol>
<li>レンダリングのときに、画像のサイズ、容量を節約</li>
<li>サイズの調整やトリミング</li>
</ol>
<h3>Imgixでは</h3>
<p><a class="wp-editor-md-post-content-link" href="https://docs.imgix.com/apis/rendering">Rendering API</a>を使うとできそう。</p>
<p>画像URLの最後に<code>?</code>をつけて、その後にいろいろなパラメータを付けることで、画像に対していろいろな処理ができます。<br />
例えば</p>
<pre><code class="line-numbers">https://&lt;graphqlで渡ってきた画像のurl&gt;?w=200
</code></pre>
<p>とすると、画像の幅を２００（ｐｘ？）に設定できます。<br />
その後ろに<code>&amp;</code>でつなげれば、複数のパラメータを付けることができます。</p>
<p>いろいろオートの設定もありました。<br />
例えば<br />
1. 画像の圧縮　<code>auto=compress</code><br />
基本的には７５％。<code>q=</code>で圧縮率を指定することもできます。<br />
2. フォーマット選択　<code>auto=format</code><br />
対応しているブラウザなら、自動でwebp形式に変換してくれる。<br />
3. 画像のトリミング　<code>ar=2:1&amp;fit=crop&amp;fp-y=0.5"</code><br />
アスペクト比と中心を決めてトリミングできます。切り抜いた部分以外はデータとしても削除。（残す設定もできる）</p>
<p>とりあえず、今回のプロジェクトでは、<br />
この３つを設定することにしました。</p>
<p>ブログの記事ごとのアイキャッチ画像に対して<br />
これらの加工をして、<br />
各記事ページタイトルのバックにおくことにしました。</p>
<h3>実装したコード</h3>
<ul>
<li>各記事のテンプレートファイル post-template.js</li>
</ul>
<pre><code class="language-javascript line-numbers">&lt;MicroCmsImage                                   
  url={data.microcmsPosts.eye_catch.url}                                     
  compress="auto=compress"                                   
  format="auto=format"                                   
  ar="ar=2:1&amp;fit=crop&amp;fp-y=0.5"
/&gt;                              /&gt;
</code></pre>
<ul>
<li>画像をレンダリングするコンポーネント　microcmsimage.js</li>
</ul>
<pre><code class="language-javascript line-numbers">import React from "react"
import styled from "styled-components"

export default function MicroCmsImg(props) {
  // imgタグを親要素に対して幅いっぱいに表示する
  const ImgWrapper = styled.img`
    width: 100%;
  `
  const { url } = props // 画像のURL
  // url以外のパラメータを１つの文字列型変数にセット
  let array = Object.values(props)
  let param = ""
  array.map(function (elem) {
  // propsの最初はurlなのでそれは入れない
    if (array.indexOf(elem) !== 0) {
      //最初の要素は?をつける
      if (array.indexOf(elem) == 1) {
        param = `?${elem}`
      } else {
        param = `${param}&amp;${a}`
      }
    }
  })

  return (
    &lt;&gt;
　　　// imgのsrcにurlとparamをつなげたものをセット
     &lt;ImgWrapper src={url + param} alt="" /&gt;
    &lt;/&gt;
  )
}

</code></pre>
<h2><span id="toc4">Imgixではもっといろいろできます。</span></h2>
<p>例えば、画像にフィルターをかけることもできます。<br />
モザイク加工したり、blur効果つけたり。<br />
顔認識でそこにクローズアップとか。<br />
文字入れたり、ノイズリダクションに回転。</p>
<p>gatsbyプロジェクトでは、<br />
対応していればgatsby-plugin-imageが使えますが、<br />
そうでないプロジェクトなら、<br />
これを使うのもいいかもしれません。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://horumont.info/programming/microcms-gatsby-imgix/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
