Comment puis-je trouver le chemin complet d'une police à partir de son nom d'affichage sur un Mac?
J'utilise L'API javascript de Photoshop pour trouver les polices dans un PSD donné.
Étant donné un nom de police renvoyé par L'API, je veux trouver le fichier de police physique réel auquel ce nom de police correspond sur le disque.
Tout cela se passe dans un programme python fonctionnant sur OSX, donc je suppose que je cherche l'un des:
- Certains Photoshop javascript
- une fonction Python
- une API OSX que je peux appeler à partir de python
4 réponses
Malheureusement, la seule API qui n'est pas obsolète se trouve dans le framework ApplicationServices, qui n'a pas de fichier de support de pont, et n'est donc pas disponible dans le pont. Si vous souhaitez utiliser ctypes, vous pouvez utiliser ATSFontGetFileReference après avoir consulté ATSFontRef.
Cocoa n'a aucun support natif, au moins à partir de 10.5, Pour obtenir l'emplacement d'une police.
Ouvrez un terminal (Applications - >Utilitaires - > Terminal) et tapez ceci:
locate InsertFontHere
Cela va cracher tous les fichiers qui ont le nom que vous voulez.
Avertissement: il peut y avoir beaucoup à parcourir.
Je n'ai pas été en mesure de trouver quoi que ce soit qui fait cela directement. Je pense que vous devrez parcourir les différents dossiers de polices sur le système: /System/Library/Fonts
, /Library/Fonts
, et il peut probablement y avoir un répertoire au niveau utilisateur aussi bien ~/Library/Fonts
.
Il doit y avoir une méthode dans Cocoa pour obtenir une liste de polices, alors vous devrez utiliser les liaisons PyObjC pour l'appeler..
En fonction de ce dont vous avez besoin, vous pourriez probablement utiliser quelque chose comme ce qui suit..
import os
def get_font_list():
fonts = []
for font_path in ["/Library/Fonts", os.path.expanduser("~/Library/Fonts")]:
if os.path.isdir(font_path):
fonts.extend(
[os.path.join(font_path, cur_font)
for cur_font in os.listdir(font_path)
]
)
return fonts