読者です 読者をやめる 読者になる 読者になる

WHITELEAF:Kindle応援サイト

KindleでWEB小説を読もう! Narou.rb 公開中

imagefttext の オプション引数 extrainfo について

PHP

PHP で TrueType フォントの描画については、2種類の関数があります。それが imagettftext と imagefttext です。
両者共通するのが文字の描画間隔についての設定がまったくないということで、特に文字の左右の間隔の設定がないのが非常に困るわけですが、マニュアルを見ると imagefttext には extrainfo というオプションを渡せばなんか起きるらしい。
しかし、マニュアルには
  この関数は、現在のところ詳細な情報はありません。引数のリストのみが記述されています。
これはヒドイ・・・('A`)
コメントを見ると linespacing を指定することで、縦の間隔はいじれることが分かりました($extrainfo = Array("linespacing" => 1); を渡す)。が、文字の左右の間隔を弄るオプションはあるのかないのか不明・・・・なので PHP のソースを追いかけます。

ext/gd/gd.c L.4250 php_imagettftext_common 関数にて

if (extended && EXT) {	/* parse extended info */
	HashPosition pos;

	/* walk the assoc array */
	zend_hash_internal_pointer_reset_ex(HASH_OF(EXT), &pos);
	do {
		zval ** item;
		char * key;
		ulong num_key;

		if (zend_hash_get_current_key_ex(HASH_OF(EXT), &key, NULL, &num_key, 0, &pos) != HASH_KEY_IS_STRING) {
			continue;
		}

		if (zend_hash_get_current_data_ex(HASH_OF(EXT), (void **) &item, &pos) == FAILURE) {
			continue;
		}
	
		if (strcmp("linespacing", key) == 0) {
			convert_to_double_ex(item);
			strex.flags |= gdFTEX_LINESPACE;
			strex.linespacing = Z_DVAL_PP(item);
		}

	} while (zend_hash_move_forward_ex(HASH_OF(EXT), &pos) == SUCCESS);
}

どう見ても linespacing しか定義されていません。本当にあr(ry