LoginSignup
5
5

More than 5 years have passed since last update.

Photoshopで書体毎の文字画像を一括生成

Last updated at Posted at 2016-07-11

ExtendScript Toolkitで使うスクリプトです。
指定した文字で指定した個数分、手持ちの書体からランダムに選ばれたものの文字画像を生成します。
画像解析の精度を確認するための画像を生成したりするのに使えるかと思います。

生成された画像の例

JPEG_0.jpgJPEG_2.jpgJPEG_3.jpg

ExtendScript Toolkit

AdobeのアプリケーションをJavaScriptで自動化するためのツール。
Macなら下記から起動:
/Applications/Adobe ExtendScript Toolkit CC/ExtendScript Toolkit.app

ExtendScript
function makeTypeImage(textValue, generatedCount) {
    ///生成する個数のリミッター(システム書体数が多すぎる時に、ここの値を修正して使用)
    const MAX_GENERATED_COUNT = 10000;
    ///保存先を指定
    folderName = Folder.selectDialog("フォルダを選択してください");
    if (!folderName) {
        return;
    }
    ///システム書体一覧を取得
    var PsFonts = app.fonts;
    ///何個生成するか(0より小さい数値を入力するとシステム書体全てが対象)
    var varGeneratedCount = PsFonts.length;
    if (generatedCount > 0) {
        varGeneratedCount = generatedCount;
    }
    ///書体が多すぎる時のリミッター
    if (varGeneratedCount > MAX_GENERATED_COUNT) {
        varGeneratedCount = MAX_GENERATED_COUNT;
    }
    ///ピクセルで指定するための設定
    var originalUnit = preferences.rulerUnits;
    preferences.rulerUnits = Units.PIXELS;
    for (var i = 0; i < varGeneratedCount; i++) {
        ///書類作成(100×100ピクセル)
        var docRef = app.documents.add(100, 100);
        var artLayerRef = docRef.artLayers.add();
        artLayerRef.kind = LayerKind.TEXT;
        var textItemRef = artLayerRef.textItem;
        textItemRef.contents = textValue;
        ///書体名を指定(必ずPostScript名)
        ///PsFonts[数値]の数値を書体数の範囲内でランダムにすると使用書体の固定化がされない。
        ///注意事項として、アイコンの書体が指定された場合、画像解析としては使いものにならない。
        var varFontNumber = i;
        if (generatedCount > 0) {
            varFontNumber = Math.floor(Math.random() * PsFonts.length);
        }
        var varTextFont = String(PsFonts[varFontNumber].postScriptName);
        textItemRef.font = varTextFont;
        ///フォントサイズ
        textItemRef.size = 80;
        ///フォント座標指定
        textItemRef.position = new Array(50, 80);
        textItemRef.justification = Justification.CENTER;
        ///レイヤー結合
        activeDocument.mergeVisibleLayers();
        var fileobj = new File(folderName + "/JPEG_" + String(i));
        ///JPEGで保存
        var saveOptions = new JPEGSaveOptions;
        saveOptions.embedColorProfile = true;
        saveOptions.formatOptions = FormatOptions.STANDARDBASELINE;
        saveOptions.quality = 12;
        // 他、各プロパティを設定
        app.activeDocument.saveAs(fileobj, saveOptions, false, Extension.LOWERCASE)
        activeDocument.close(SaveOptions.DONOTSAVECHANGES);
        docRef = null
        artLayerRef = null
        textItemRef = null
    }
}
///makeTypeImage(文字列、生成する個数);
makeTypeImage("A", 15);

画像サイズとか、フォントサイズとか適宜変更してください。
このスクリプトのポイントは、書体の指定はPostScript名で指定することだと思います。

使用環境:
Adobe Photoshop CC(2015.5)

テキストレイヤーのフォント指定のアレコレ
http://d.hatena.ne.jp/Takomaru/20130618/1371574276
PhotoshopドキュメントをJavaScriptで別名保存する
http://d.hatena.ne.jp/chalcedony_htn/20140725/1406299387

修正

16/07/11
指定個数が1より小さい値を指定した場合、全て書体を使用するようにしてましたが、その際に書体を重複させないために、ランダムではなく連番で指定されるようにしました。
生成個数にリミッターを追加しました。

5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5