2

次の画像を見てみましょう。

ここに画像の説明を入力してください

水平グリッドがあり、このグリッドにテキストを配置したいと思います。上記の例は間違っています。なぜなら、私が望んでいるのは、各文字がグリッドのセルの1つに正確に配置されているからです。

独自のコマンドで各文字を配置することなく、これを実現するためにimagemagickのテキスト出力を調整できるかどうか疑問に思います。

いくつかの追加の事実:

  • シェルスクリプトのimagemagickを使用しています
  • 私はimagemagickのMVGでかなり複雑な描画を行っているので、テキストをMVGコマンドで配置できると便利です。
  • ソリューションで必要な場合は、グリッドの幅を数ピクセル調整できますが、もちろんすべてのセルの幅は同じである必要があります
  • 私はいつも同じ固定幅フォント(Courier)を使用しています
  • シェルスクリプトのフォントメトリックを解析し、この情報を使用してテキストコマンドに値を適用することができます
  • 私は水平方向の配置のみを気にします。各行を個別にレンダリングするため、垂直方向の配置は重要ではありません。

このすべてを念頭に置いて-私の問題の解決策はありますか?

どうもありがとう!

4

2 に答える 2

2

カーニング オプションを使用して、文字間の間隔を設定できます。

例えば

for i in 0 3 6 9 12 15
do
    convert -kerning $i -font Courier -pointsize 24  label:":Kerning $i:" label_$i.jpg
done

以下の画像を生成します。グリッドに一致させるための適切なカーニング値を見つけるだけです。(クーリエのような等幅フォントの場合)

ここに画像の説明を入力

于 2012-08-01T22:14:16.513 に答える
1

グリッドに強制したい非モノタイプのフォントがある場合は、次のスクリプトを使用できます。

#!/usr/bin/env bash
rm test*png

font=~/Library/Fonts/WittenbergerFrakturMTStd.otf
gridsize=32x32

chr() { 
   case "$1" in
      64 ) echo '\@' ;;
      92 ) echo '\\' ;;
      *  ) printf \\$(printf '%03o' $1)
   esac  
}  

for i in {32..127}; do
   c=$( chr $i )
   echo -n "$c: "
   convert -background transparent -density 90 -pointsize 12 -gravity center -font "$font" label:"$c" -extent $gridsize test-$i.png
done

convert test-{32..127}.png +append test.png
于 2013-04-26T04:54:30.737 に答える