を使用して複数の単一文字画像を作成しようとしていますconvert
。目的は、プラスチックの専門家にキーボードのキーキャップに印刷できる画像を提供することです。
これImageMagickドキュメント次のことを提案してください:
printf "\u2318" | convert -size 100x100 label:@- -font unifont-Medium command.png
または
echo ⌘ | convert -size 100x100 label:@- -font unifont-Medium command.png
または
convert -size 100x100 label:'⌘' -font unifont-Medium command.png
印刷する必要がある観光スポット記号ですが、疑問符が生成されます。
私はフォントセットに実際にこの文字が含まれていることを確認しました(使用しましたcharmap
)。unifont-Medium
私のシステムの他のフォントもこの文字の外観を提供していることを知っています。 unifontをインストールする前に見ることができましたが、名前が何であるかわからないからです。
また、LaTeX(すべてのアドオンやパッケージを含むTexLive)を試しましたが、utf8x
特殊文字をサポートしていません。
imagemagickやその他の特殊文字を使用して漢字を印刷する方法に関するフォーラムの質問がたくさんあります。以下は私にとって効果的でした。
convert -background lightblue -fill blue -pointsize 32 \
label:' é è à ù ç Ö ÿ ‘ ’ “ ” ° ² ³ € x ÷ ' label_i8n.gif
しかし、実際に私にとって重要なUTF-8文字では動作しません。
ランダムなUnicode文字を画像に変換するには?
修正する:あきらめました。バグのようです。代わりにSVGを作成してレンダリングするためのいくつかのスクリプトを作成しました。オープンソースは次のとおりです。ムーブメント・ドヴォルザーク
答え1
同じコマンドを試しましたが、同じ結果が得られました。
$ printf "\u2318" | convert -size 100x100 label:@- \
-font unifont-Medium command.png
しかし、文字GをUnicodeに変更するとうまくいきます。
$ printf "\u0047" | convert -size 100x100 label:@- \
-font unifont-Medium command.png
この質問を次に投稿します。ImageMagickディスカッションサイトなぜこれが起こるのかを確認してください。これを行う方法や続行方法がわからない場合は、私が助けることができます。
デバッグ変換
スイッチを追加して、何が起こっているのかを-debug annotate
確認できます。convert
はい
$ printf "\u2318" | convert -size 100x100 label:@- -font unifont-Medium -pointsize 40 -debug annotate command.png
2014-04-10T09:37:04-04:00 0:00.020 0.010u 6.7.8 Annotate convert[16619]: annotate.c/RenderFreetype/1220/Annotate
Font /usr/share/fonts/msttcorefonts/arialbd.ttf; font-encoding none; text-encoding none; pointsize 12
2014-04-10T09:37:04-04:00 0:00.020 0.010u 6.7.8 Annotate convert[16619]: annotate.c/GetTypeMetrics/798/Annotate
Metrics: text: ⌘; width: 6.375; height: 14; ascent: 11; descent: -3; max advance: 24; bounds: 0.625,0 6.78125,8; origin: 7,0; pixels per em: 12,12; underline position: -5.0625; underline thickness: 3.35938
2014-04-10T09:37:04-04:00 0:00.020 0.010u 6.7.8 Annotate convert[16619]: annotate.c/RenderFreetype/1220/Annotate
Font /usr/share/fonts/msttcorefonts/arialbd.ttf; font-encoding none; text-encoding none; pointsize 12
2014-04-10T09:37:04-04:00 0:00.020 0.010u 6.7.8 Annotate convert[16619]: annotate.c/GetTypeMetrics/798/Annotate
Metrics: text: ⌘; width: 6.375; height: 14; ascent: 11; descent: -3; max advance: 24; bounds: 0.625,0 6.78125,8; origin: 7,0; pixels per em: 12,12; underline position: -5.0625; underline thickness: 3.35938
2014-04-10T09:37:04-04:00 0:00.020 0.010u 6.7.8 Annotate convert[16619]: annotate.c/RenderFreetype/1220/Annotate
Font /usr/share/fonts/msttcorefonts/arialbd.ttf; font-encoding none; text-encoding none; pointsize 24
2014-04-10T09:37:04-04:00 0:00.020 0.010u 6.7.8 Annotate convert[16619]: annotate.c/GetTypeMetrics/798/Annotate
Metrics: text: ⌘; width: 12.75; height: 28; ascent: 22; descent: -5; max advance: 48; bounds: 1.25,0 13.5781,18; origin: 15,0; pixels per em: 24,24; underline position: -5.0625; underline thickness: 3.35938
2014-04-10T09:37:04-04:00 0:00.020 0.010u 6.7.8 Annotate convert[16619]: annotate.c/RenderFreetype/1220/Annotate
Font /usr/share/fonts/msttcorefonts/arialbd.ttf; font-encoding none; text-encoding none; pointsize 48
2014-04-10T09:37:04-04:00 0:00.020 0.010u 6.7.8 Annotate convert[16619]: annotate.c/GetTypeMetrics/798/Annotate
Metrics: text: ⌘; width: 25.5156; height: 55; ascent: 43; descent: -10; max advance: 96; bounds: 2.48438,0 27.1406,35.5; origin: 29,0; pixels per em: 48,48; underline position: -5.0625; underline thickness: 3.35938
2014-04-10T09:37:04-04:00 0:00.020 0.010u 6.7.8 Annotate convert[16619]: annotate.c/RenderFreetype/1220/Annotate
Font /usr/share/fonts/msttcorefonts/arialbd.ttf; font-encoding none; text-encoding none; pointsize 96
2014-04-10T09:37:04-04:00 0:00.020 0.020u 6.7.8 Annotate convert[16619]: annotate.c/GetTypeMetrics/798/Annotate
Metrics: text: ⌘; width: 53.0312; height: 110; ascent: 87; descent: -20; max advance: 192; bounds: 4.96875,0 54.2812,70; origin: 59,0; pixels per em: 96,96; underline position: -5.0625; underline thickness: 3.35938
2014-04-10T09:37:04-04:00 0:00.020 0.020u 6.7.8 Annotate convert[16619]: annotate.c/RenderFreetype/1220/Annotate
Font /usr/share/fonts/msttcorefonts/arialbd.ttf; font-encoding none; text-encoding none; pointsize 96
2014-04-10T09:37:04-04:00 0:00.020 0.020u 6.7.8 Annotate convert[16619]: annotate.c/GetTypeMetrics/798/Annotate
Metrics: text: ⌘; width: 53.0312; height: 110; ascent: 87; descent: -20; max advance: 192; bounds: 4.96875,0 54.2812,70; origin: 59,0; pixels per em: 96,96; underline position: -5.0625; underline thickness: 3.35938
2014-04-10T09:37:04-04:00 0:00.020 0.020u 6.7.8 Annotate convert[16619]: annotate.c/RenderFreetype/1220/Annotate
Font /usr/share/fonts/msttcorefonts/arialbd.ttf; font-encoding none; text-encoding none; pointsize 95
2014-04-10T09:37:04-04:00 0:00.020 0.020u 6.7.8 Annotate convert[16619]: annotate.c/GetTypeMetrics/798/Annotate
Metrics: text: ⌘; width: 52.0781; height: 109; ascent: 86; descent: -20; max advance: 190; bounds: 4.92188,0 53.7188,70; origin: 58,0; pixels per em: 95,95; underline position: -5.0625; underline thickness: 3.35938
2014-04-10T09:37:04-04:00 0:00.020 0.020u 6.7.8 Annotate convert[16619]: annotate.c/RenderFreetype/1220/Annotate
Font /usr/share/fonts/msttcorefonts/arialbd.ttf; font-encoding none; text-encoding none; pointsize 94
2014-04-10T09:37:04-04:00 0:00.020 0.020u 6.7.8 Annotate convert[16619]: annotate.c/GetTypeMetrics/798/Annotate
Metrics: text: ⌘; width: 51.1406; height: 108; ascent: 85; descent: -20; max advance: 188; bounds: 4.85938,0 53.1562,68; origin: 57,0; pixels per em: 94,94; underline position: -5.0625; underline thickness: 3.35938
2014-04-10T09:37:04-04:00 0:00.020 0.020u 6.7.8 Annotate convert[16619]: annotate.c/RenderFreetype/1220/Annotate
Font /usr/share/fonts/msttcorefonts/arialbd.ttf; font-encoding none; text-encoding none; pointsize 93
2014-04-10T09:37:04-04:00 0:00.020 0.020u 6.7.8 Annotate convert[16619]: annotate.c/GetTypeMetrics/798/Annotate
Metrics: text: ⌘; width: 51.1875; height: 107; ascent: 84; descent: -20; max advance: 186; bounds: 4.8125,0 52.5781,67; origin: 57,0; pixels per em: 93,93; underline position: -5.0625; underline thickness: 3.35938
2014-04-10T09:37:04-04:00 0:00.020 0.020u 6.7.8 Annotate convert[16619]: annotate.c/RenderFreetype/1220/Annotate
Font /usr/share/fonts/msttcorefonts/arialbd.ttf; font-encoding none; text-encoding none; pointsize 92
2014-04-10T09:37:04-04:00 0:00.020 0.020u 6.7.8 Annotate convert[16619]: annotate.c/GetTypeMetrics/798/Annotate
Metrics: text: ⌘; width: 50.2344; height: 106; ascent: 83; descent: -19; max advance: 184; bounds: 4.76562,0 52.0156,67; origin: 56,0; pixels per em: 92,92; underline position: -5.0625; underline thickness: 3.35938
2014-04-10T09:37:04-04:00 0:00.020 0.020u 6.7.8 Annotate convert[16619]: annotate.c/RenderFreetype/1220/Annotate
Font /usr/share/fonts/msttcorefonts/arialbd.ttf; font-encoding none; text-encoding none; pointsize 91
2014-04-10T09:37:04-04:00 0:00.030 0.020u 6.7.8 Annotate convert[16619]: annotate.c/GetTypeMetrics/798/Annotate
Metrics: text: ⌘; width: 50.2969; height: 105; ascent: 82; descent: -19; max advance: 182; bounds: 4.70312,0 51.4531,65.4688; origin: 56,0; pixels per em: 91,91; underline position: -5.0625; underline thickness: 3.35938
2014-04-10T09:37:04-04:00 0:00.030 0.020u 6.7.8 Annotate convert[16619]: annotate.c/RenderFreetype/1220/Annotate
Font /usr/share/fonts/msttcorefonts/arialbd.ttf; font-encoding none; text-encoding none; pointsize 90
2014-04-10T09:37:04-04:00 0:00.030 0.020u 6.7.8 Annotate convert[16619]: annotate.c/GetTypeMetrics/798/Annotate
Metrics: text: ⌘; width: 49.3438; height: 103; ascent: 81; descent: -19; max advance: 180; bounds: 4.65625,0 50.8906,65.4688; origin: 55,0; pixels per em: 90,90; underline position: -5.0625; underline thickness: 3.35938
2014-04-10T09:37:04-04:00 0:00.030 0.020u 6.7.8 Annotate convert[16619]: annotate.c/RenderFreetype/1220/Annotate
Font /usr/share/fonts/msttcorefonts/arialbd.ttf; font-encoding none; text-encoding none; pointsize 89
2014-04-10T09:37:04-04:00 0:00.030 0.020u 6.7.8 Annotate convert[16619]: annotate.c/GetTypeMetrics/798/Annotate
Metrics: text: ⌘; width: 48.3906; height: 102; ascent: 81; descent: -19; max advance: 178; bounds: 4.60938,0 50.3281,64; origin: 54,0; pixels per em: 89,89; underline position: -5.0625; underline thickness: 3.35938
2014-04-10T09:37:04-04:00 0:00.030 0.020u 6.7.8 Annotate convert[16619]: annotate.c/RenderFreetype/1220/Annotate
Font /usr/share/fonts/msttcorefonts/arialbd.ttf; font-encoding none; text-encoding none; pointsize 88
2014-04-10T09:37:04-04:00 0:00.030 0.020u 6.7.8 Annotate convert[16619]: annotate.c/GetTypeMetrics/798/Annotate
Metrics: text: ⌘; width: 48.4375; height: 101; ascent: 80; descent: -19; max advance: 176; bounds: 4.5625,0 49.7656,64; origin: 54,0; pixels per em: 88,88; underline position: -5.0625; underline thickness: 3.35938
2014-04-10T09:37:04-04:00 0:00.030 0.020u 6.7.8 Annotate convert[16619]: annotate.c/RenderFreetype/1220/Annotate
Font /usr/share/fonts/msttcorefonts/arialbd.ttf; font-encoding none; text-encoding none; pointsize 87
2014-04-10T09:37:04-04:00 0:00.030 0.020u 6.7.8 Annotate convert[16619]: annotate.c/GetTypeMetrics/798/Annotate
Metrics: text: ⌘; width: 47.5; height: 100; ascent: 79; descent: -18; max advance: 174; bounds: 4.5,0 49.1875,63; origin: 53,0; pixels per em: 87,87; underline position: -5.0625; underline thickness: 3.35938
2014-04-10T09:37:04-04:00 0:00.030 0.020u 6.7.8 Annotate convert[16619]: annotate.c/RenderFreetype/1220/Annotate
Font /usr/share/fonts/msttcorefonts/arialbd.ttf; font-encoding none; text-encoding none; pointsize 86
2014-04-10T09:37:04-04:00 0:00.030 0.020u 6.7.8 Annotate convert[16619]: annotate.c/GetTypeMetrics/798/Annotate
Metrics: text: ⌘; width: 47.5469; height: 99; ascent: 78; descent: -18; max advance: 172; bounds: 4.45312,0 48.625,63; origin: 53,0; pixels per em: 86,86; underline position: -5.0625; underline thickness: 3.35938
2014-04-10T09:37:04-04:00 0:00.030 0.020u 6.7.8 Annotate convert[16619]: annotate.c/RenderFreetype/1220/Annotate
Font /usr/share/fonts/msttcorefonts/arialbd.ttf; font-encoding none; text-encoding none; pointsize 86
2014-04-10T09:37:04-04:00 0:00.030 0.020u 6.7.8 Annotate convert[16619]: annotate.c/GetTypeMetrics/798/Annotate
Metrics: text: ⌘; width: 47.5469; height: 99; ascent: 78; descent: -18; max advance: 172; bounds: 4.45312,0 48.625,63; origin: 53,0; pixels per em: 86,86; underline position: -5.0625; underline thickness: 3.35938
2014-04-10T09:37:04-04:00 0:00.030 0.020u 6.7.8 Annotate convert[16619]: annotate.c/RenderFreetype/1220/Annotate
Font /usr/share/fonts/msttcorefonts/arialbd.ttf; font-encoding none; text-encoding none; pointsize 86
アップデート#1 - 追加デバッグ
この問題は私を悩ませていたので、ついにそれを見つけたようです。問題はフォント選択であり、特定の文字の外観を表示できないことです。
まず、このコマンドを使用してから利用可能なフォントを確認できます
convert
。ここから始めましょう。$ convert -list font | head -8 Path: /etc/ImageMagick/type-ghostscript.xml Font: AvantGarde-Book family: AvantGarde style: Normal stretch: Normal weight: 400 glyphs: /usr/share/fonts/default/Type1/a010013l.pfb ...
上記は例示であり、各フォントには上記と同様の行があります。しかし、このコマンドを実行すると、何百ものフォントがあることがわかります。
$ convert -list font | grep Font | wc -l 262
次に、
\u2318
私たちが持っている各フォントを使って文字をエンコードする作業を完了します。これは複雑に聞こえますが、Bashを介してよく考えられたいくつかのシングルライナーの場合は非常にマイナーです。$ for i in $(convert -list font | grep Font | awk '{print $2}'); \ do convert -font $i -pointsize 36 label:⌘ ${i}.gif;done
このコードスニペットはforループを使用して、各フォントに対して変更されたバージョンのコマンドを実行します
convert
。それでは、結果を見てみましょう。多くのフォントはこの特定の文字の外観を表示できませんが、いくつかの可能性があります。これは、必ずしもImageMagickのバグではなく、フォント自体の制限であることを示しているようです。以下は、この文字の外観を表示できるフォントの一覧です。
- DejaVu-Sans-Bold
- DejaVu-Sans-Bold-Oblique
- DejaVu-Sans-Book
- DejaVu-Sans-Condensed-Bold
- DejaVu-Sans-Condensed-Bold-Olique
- DejaVu-Sans-Condensed
- DejaVu-Sans-Condensed-Oblique
- DejaVu-Sans-Mono-Bold
- DejaVu-Sans-Mono-Bold-Oblique
- DejaVu-Sans-Mono-Book
- DejaVu-Sans-Mono-Oblique
- DejaVu-Sans-Oblique
- DejaVu-serif-bold
- DejaVu-serif-bold-italic
- DejaVu セリフ本
- DejaVu-Serif-Condensed-Bold
- DejaVu-Serif-Condensed-Bold-Italic
- DejaVu-Serif-Condensed
- DejaVu-Serif-Condensed-Italic
- DejaVu-セリフチェ-イタリック体
- 無料モノクロ - 一般
- FreeSerif - 一般
- STIX - 数学 - 一般
- STIX - 一般
- VL-ゴシック-一般
私は全体の〜260個の結果
.gif
ファイルを視覚的に見て、何がうまくいかなかったかを確認しました。以下は、あなたが見ることができるように動作するいくつかの例です。
引用する
答え2
短い答え:パンゴ
pango:⌘
代わりに使用してくださいlabel:⌘
。 PangoはFontconfigを使用して、各文字の外観に適したフォントを見つけます。
convert -pointsize 128 pango:⌘ command.png
説明する
パンゴImageMagickがテキストをレンダリングするために使用できるライブラリです。 ImageMagickおよびImageMagickにlabel
比べて長所と短所があります-draw text
。選択したフォントにグリフがない場合は、他のフォントに置き換えられます。パンゴが使うものフォント構成正しいフォントを選択してください。
$'\uXXXX'
目的の文字を貼り付ける代わりに、Bash やその他の最新のシェルで使用できる構文を使用して、16 進 Unicode 番号を指定できます。
convert -pointsize 128 pango:$'\u2318' command.png
フォント構成
フォント構成単一のUnicode文字コードを文字セットとして指定して、特定の文字の外観をレンダリングできるフォントを一覧表示できます。
$ fc-list :charset=2318
/usr/share/fonts/truetype/dejavu/DejaVuSerif-Bold.ttf: DejaVu Serif:style=Bold
/home/b9/.local/share/fonts/DaxlinePro-Light.otf: DaxlinePro,DaxlinePro\-Light:style=Light,Regular
/usr/share/fonts/truetype/dejavu/DejaVuSansMono.ttf: DejaVu Sans Mono:style=Book
/usr/share/fonts/truetype/dejavu/DejaVuSansCondensed-Oblique.ttf: DejaVu Sans,DejaVu Sans Condensed:style=Condensed Oblique,Oblique
/usr/share/fonts/truetype/dejavu/DejaVuSerifCondensed-BoldItalic.ttf: DejaVu Serif,DejaVu Serif Condensed:style=Condensed Bold Italic,Bold Italic
/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf: DejaVu Sans:style=Book
/home/b9/.local/share/fonts/DaxlinePro-ExtraBold.otf: DaxlinePro,DaxlinePro\-ExtraBold:style=ExtraBold,Regular
/home/b9/.local/share/fonts/DaxlinePro-Bold.otf: DaxlinePro,DaxlinePro\-Bold:style=Bold,Regular
/usr/share/fonts/truetype/dejavu/DejaVuSerifCondensed.ttf: DejaVu Serif,DejaVu Serif Condensed:style=Condensed,Book
/usr/share/fonts/truetype/dejavu/DejaVuSerifCondensed-Italic.ttf: DejaVu Serif,DejaVu Serif Condensed:style=Condensed Italic,Italic
/home/b9/.local/share/fonts/DaxlinePro-Black.otf: DaxlinePro,DaxlinePro\-Black:style=Black,Regular
/usr/share/fonts/truetype/dejavu/DejaVuSerif-BoldItalic.ttf: DejaVu Serif:style=Bold Italic
/usr/share/fonts/truetype/dejavu/DejaVuSansMono-Oblique.ttf: DejaVu Sans Mono:style=Oblique
/usr/share/fonts/truetype/dejavu/DejaVuSerifCondensed-Bold.ttf: DejaVu Serif,DejaVu Serif Condensed:style=Condensed Bold,Bold
/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf: DejaVu Sans:style=Bold
/usr/share/fonts/truetype/dejavu/DejaVuSansMono-BoldOblique.ttf: DejaVu Sans Mono:style=Bold Oblique
/usr/share/fonts/truetype/ancient-scripts/Symbola_hint.ttf: Symbola:style=Regular
/usr/share/fonts/truetype/dejavu/DejaVuSansCondensed-BoldOblique.ttf: DejaVu Sans,DejaVu Sans Condensed:style=Condensed Bold Oblique,Bold Oblique
/usr/share/fonts/truetype/dejavu/DejaVuSansCondensed.ttf: DejaVu Sans,DejaVu Sans Condensed:style=Condensed,Book
/usr/share/fonts/truetype/freefont/FreeSerif.ttf: FreeSerif:style=Regular,нормален,normal,obyčejné,Mittel,µεσαία,Normaali,Normál,Normale,Gemiddeld,odmiana zwykła,Обычный,Normálne,ปกติ,menengah,прямій,Navadno,vidējs,normalusis,عادی,vừa,Arrunta,सामान्य
/usr/share/fonts/opentype/freefont/FreeMono.otf: FreeMono:style=Regular,нормален,normal,obyčejné,Standard,µεσαία,Normaali,Normál,Normale,Standaard,Normalny,Обычный,Normálne,menengah,прямій,navadno,vidējs,normalusis,thường,Arrunta,सामान्य
/usr/share/fonts/truetype/dejavu/DejaVuSansCondensed-Bold.ttf: DejaVu Sans,DejaVu Sans Condensed:style=Condensed Bold,Bold
/usr/share/fonts/truetype/dejavu/DejaVuSansMono-Bold.ttf: DejaVu Sans Mono:style=Bold
/usr/share/fonts/truetype/dejavu/DejaVuSans-Oblique.ttf: DejaVu Sans:style=Oblique
/home/b9/.local/share/fonts/DaxlinePro-Regular.otf: DaxlinePro,DaxlinePro\-Regular:style=Regular
/home/b9/.local/share/fonts/DaxlinePro-Thin.otf: DaxlinePro,DaxlinePro\-Thin:style=Thin,Regular
/usr/share/fonts/truetype/dejavu/DejaVuSerif-Italic.ttf: DejaVu Serif:style=Italic
/usr/share/fonts/opentype/freefont/FreeSerif.otf: FreeSerif:style=Regular,нормален,normal,obyčejné,Mittel,µεσαία,Normaali,Normál,Normale,Gemiddeld,odmiana zwykła,Обычный,Normálne,ปกติ,menengah,прямій,Navadno,vidējs,normalusis,عادی,vừa,Arrunta,सामान्य
/home/b9/.local/share/fonts/DaxlinePro-Medium.otf: DaxlinePro,DaxlinePro\-Medium:style=Medium,Regular
/usr/share/fonts/truetype/unifont/unifont.ttf: Unifont:style=Regular
/usr/share/fonts/truetype/freefont/FreeMono.ttf: FreeMono:style=Regular,нормален,normal,obyčejné,Standard,µεσαία,Normaali,Normál,Normale,Standaard,Normalny,Обычный,Normálne,menengah,прямій,navadno,vidējs,normalusis,thường,Arrunta,सामान्य
/usr/share/fonts/truetype/dejavu/DejaVuSerif.ttf: DejaVu Serif:style=Book
/home/b9/.local/share/fonts/boecklinsuniverse/BoecklinsUniverse.ttf: Boecklins Universe:style=Regular
/usr/share/fonts/truetype/dejavu/DejaVuSans-BoldOblique.ttf: DejaVu Sans:style=Bold Oblique
人々はこの情報を使ってImageMagickを使ってさまざまなフォントを試して、フォントがどのように見えるかを確認することができます。例えば、
convert -font Unifont -pointsize 128 pango:⌘ command.png
ウグレフ(名前は変更されることがあります)
便宜のために、私が書いたスクリプトを使用することもできます。ugrep
(名前は変更されることがあります)特定の文字を含むインストール済みフォントを一覧表示するには、次のコマンドを使用します-l
。
$ ugrep -l command key
⌘ U+2318 PLACE OF INTEREST SIGN (command key)
FreeMono
Unifont
Symbola
FreeSerif
DaxlinePro
Boecklins Universe
ターミナルがSixelグラフィックをサポートしている場合、Ugrepは以下を使用して各フォントの文字レンダリングを表示することもできます。-L
N:
ugrep -L2 command key