<?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>Pillow | hgrs&#039;s Blog</title>
	<atom:link href="/archives/tag/pillow/feed" rel="self" type="application/rss+xml" />
	<link>/</link>
	<description>文字好きエンジニアの技術メモ</description>
	<lastBuildDate>Sun, 19 May 2019 05:10:02 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.3.1</generator>

<image>
	<url>/wp-content/uploads/2019/05/cropped-port_512-32x32.png</url>
	<title>Pillow | hgrs&#039;s Blog</title>
	<link>/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Pillow(PIL)でOpenTypeフィーチャーを設定する方法</title>
		<link>/archives/158.html</link>
					<comments>/archives/158.html#respond</comments>
		
		<dc:creator><![CDATA[hgrs]]></dc:creator>
		<pubDate>Fri, 17 May 2019 03:50:44 +0000</pubDate>
				<category><![CDATA[技術メモ]]></category>
		<category><![CDATA[Pillow]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[フォント]]></category>
		<guid isPermaLink="false">/?p=158</guid>

					<description><![CDATA[はじめに Pythonで画像を作りたい際に便利に使えるのがPillowです。 需要があるのか知りませ...]]></description>
										<content:encoded><![CDATA[<h2>はじめに</h2>
<p>Pythonで画像を作りたい際に便利に使えるのがPillowです。</p>
<p>需要があるのか知りませんが、そのPillowの機能を利用してOpenTypeフィーチャーを設定し、綺麗に文字を組んでみましょう！</p>
<h2><a href="https://pillow.readthedocs.io/en/stable/">Pillow</a>とは</h2>
<p>PIL（Python Imaging Library）のフォークです。</p>
<p>Pythonで画像を扱う際に使われます。Pythonで画像を扱うときに僕はだいたいOpenCVかこのPillowを使います。</p>
<h2><a href="https://docs.microsoft.com/en-us/typography/opentype/spec/featurelist">OpenTypeフィーチャー</a>とは</h2>
<p>わかりやすいところでいうとカーニングやリガチャ（今回試すのもこの2つです）です。カーニングは文字と文字の間隔のことで、それを自動で調整してくれる機能があります。リガチャは特定の文字が続く際に字の形を変える機能です。</p>
<p>どちらも、後で出てくる実際の出力画像を見ればわかると思います。</p>
<h2>前準備</h2>
<p>PillowでOpenTypeフィーチャーを利用するには、<code>libraqm</code>というライブラリをあらかじめインストールしておかなければなりません。</p>
<p>ここではmacOSを例にインストール方法を説明します。ほかのOSの方は<a href="https://github.com/HOST-Oman/libraqm">こちら</a>のリポジトリを参考に進めてください。</p>
<h3>依存ライブラリのインストール</h3>
<p><code>brew</code>を利用しインストールするので、入れてない人は入れましょう。</p>
<pre><code class="language-bash">$ brew install freetype harfbuzz fribidi gtk-doc</code></pre>
<h3>libraqmのインストール</h3>
<p>まず<a href="https://github.com/HOST-Oman/libraqm/releases">libraqmのリポジトリのリリースページ</a>から最新版をダウンロードし、解凍します。<br />
<img decoding="async" src="/wp-content/uploads/2019/05/980d4088b0b0506dec8a9b577bab91a7.png" alt="libraqmのインストール" /><br />
ターミナルで、そのディレクトリに移動しましょう。そこで以下のコマンドを実行します。</p>
<pre><code class="language-bash">$ ./configure
$ make
$ make install</code></pre>
<p>これでインストールが完了です。PillowでOpenTypeフィーチャーが使えるようになります。</p>
<p>では使い方を見ていきましょう！</p>
<h2>実際に使ってみる</h2>
<p>実際のコードがこちらになります。</p>
<pre><code class="language-python">from PIL import Image, ImageDraw, ImageFont

# 白いキャンバスを用意
image = Image.new(&#039;L&#039;, (1200, 630), 255)
# 描画用意
draw = ImageDraw.Draw(image)

# TrueType/OpenTypeフォントの読み込み
truetype_font = ImageFont.truetype(&#039;mplus-1p-regular.ttf&#039;, size=200)
# フォントのセット
draw.font = truetype_font
# テキスト描画（OpenTypeフィーチャーを有効）
draw.text((0, 0), &#039;fi, AW, ON&#039;, fill=0, features=[&#039;liga&#039;, &#039;kern&#039;])
# テキスト描画（OpenTypeフィーチャーを無効: マイナスを先頭に入れる）
draw.text((0, 300), &#039;fi, AW, OFF&#039;, fill=0, features=[&#039;-liga&#039;, &#039;-kern&#039;])

# 画像の保存
image.save(&#039;out.png&#039;)</code></pre>
<p>このコードで保存される画像がこちらになります。<br />
<img decoding="async" src="/wp-content/uploads/2019/05/a.png" alt="PillowでOpenTypeフィーチャー" /><br />
綺麗に出力されましたね！</p>
<p><code>ImageDraw.text()</code>において<code>features</code>を設定することで、利用するOpenTypeフィーチャーを指定できます。また、ここで指定する文字列は<a href="https://docs.microsoft.com/en-us/typography/opentype/spec/featurelist">OpenTypeの仕様書にあるリスト</a>から選択します。</p>
<p>他にも色々なものを試してみましょう。</p>
<h2>おわりに</h2>
<p>かなりマニアックな内容でしたが僕は何かと文字画像を作る機会が多いので、おさらいまでにまとめてみました。</p>
<p>これからも文字に関する記事が増えると思いますが、お付き合いください。</p>
]]></content:encoded>
					
					<wfw:commentRss>/archives/158.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
