SF Symbolsに収録されている文字を、名称で指定してデスクトップにPNG画像で書き出すAppleScriptです。
同フォントは、アプリ上のアイコン素材3,300個以上をフォント化し、再利用しやすくすることで、アイコンで何かの意図を示すことを規格化したいという、現代における象形文字の再発明みたいな存在です。
文化や人種を超えた、非言語コミュニケーションを促進するための基盤としてAppleが整備を行なっているものなんでしょう。文化を縦断したインフラみたいな。
アイコン素材を自分で作るのはつらいので、正直助かっています。Appleが配布しているSF Symbols 3アプリケーションを使って画面上でいろいろ探して、文字を指定できます。
一応、SF Symbols.app自体にも指定フォントを画像化する機能はついているのですが、レンダリング時の指定解像度が低すぎて、プレゼン資料や本のイラストとして利用するには不便すぎます(本来の利用目的である、タブバーのアイコンに指定するのには向いている解像度なんでしょうけれども)。
そこで、指定のフォントの文字を名称で指定するとPNG画像にレンダリングするAppleScriptを作成してみました。
文字を指定するのはできているのですが、フォントのファミリーとかマルチカラーとかの指定の方法がよくわかりません。
AppleScript名:SF Symbolsを名称で指定してPNG画像化 v1a.scptd |
— – Created by: Takaaki Naganoya – Created on: 2022/04/14 — – Copyright © 2022 Piyomaru Software, All Rights Reserved — use AppleScript version "2.8" — Monterey (12) or later use framework "Foundation" use framework "AppKit" use framework "QuartzCore" use scripting additions set aName to "paperplane.circle.fill" set anImage to current application’s NSImage’s imageWithSystemSymbolName:(aName) accessibilityDescription:(missing value) set resImg to resizeNSImage(anImage, 50.0) of me set aDesktopPath to current application’s NSString’s stringWithString:(POSIX path of (path to desktop)) set savePath to aDesktopPath’s stringByAppendingString:((current application’s NSUUID’s UUID()’s UUIDString())’s stringByAppendingPathExtension:"png") set fRes to saveNSImageAtPathAsPNG(resImg, savePath) of me on resizeNSImage(aSourceImg, aScale) set aSize to aSourceImg’s |size|() set newWidth to (width of aSize) * aScale set newheight to (height of aSize) * aScale set targFrame to current application’s NSMakeRect(0, 0, newWidth, newheight) set targImage to current application’s NSImage’s alloc()’s initWithSize:{newWidth, newheight} set aKey to {current application’s NSImageHintInterpolation} set aObj to current application’s NSNumber’s numberWithInt:(current application’s NSImageInterpolationLow) set hintRec to current application’s NSDictionary’s dictionaryWithObject:aObj forKey:aKey targImage’s lockFocus() aSourceImg’s drawInRect:targFrame fromRect:(current application’s NSZeroRect) operation:(current application’s NSCompositeCopy) fraction:1.0 respectFlipped:true hints:hintRec targImage’s unlockFocus() return targImage end resizeNSImage –NSImageを指定パスにPNG形式で保存 on saveNSImageAtPathAsPNG(anImage, outPath) set imageRep to anImage’s TIFFRepresentation() set aRawimg to current application’s NSBitmapImageRep’s imageRepWithData:imageRep set pathString to current application’s NSString’s stringWithString:outPath set newPath to pathString’s stringByExpandingTildeInPath() set myNewImageData to (aRawimg’s representationUsingType:(current application’s NSPNGFileType) |properties|:(missing value)) set aRes to (myNewImageData’s writeToFile:newPath atomically:true) as boolean return aRes –成功ならtrue、失敗ならfalseが返る end saveNSImageAtPathAsPNG |