10
votes

Extraire la géométrie de la police

J'aimerais pouvoir extraire la géométrie pour chaque lettre dans un fichier de polices TrueType. Chaque lettre aurait un ensemble de coordonnées, en supposant que chaque lettre soit dans sa propre réseau.

Comme une image dit mille mots - je voudrais obtenir les sommets pour des lettres similaires à l'image ci-dessous (avec la permission de http://polymaps.org/ )

text alt

Mise à jour

Grâce à l'indice d'utilisation GDI, qui est maintenant intégré à .NET System.Drawing.Drawing2D, j'ai reçu le code suivant pour créer des polygones WKT. Aucune courbe bézier possible. Et même après que les lettres ont été retournées et tournées, des chemins ne rejoindront toujours pas correctement. xxx

text alt text alt


4 commentaires

Je suppose que ce serait assez facile de faire apparaître du texte dans Adobe Illustrator et de convertir le texte en chemin. C'est plus une question pour SuperUserer.com, cependant.


J'espérais le faire sans un logiciel coûteux et construit autour d'un script réutilisable


À propos de votre «A» A l'air incorrect: le problème est qu'il y a deux chemins. En plus de Pathdata, vous devrez examiner les try de tremblement parallèle msdn.microsoft.com/en-us/Library/... . Lorsque le type de point est 0, vous devrez fermer la dernière figure et commencer une nouvelle.


OH YA, et vous pouvez également appeler "Aplatissez ()" sur le pavillon graphique pour convertir les courbes de Bézier en segments de ligne droite.


5 Réponses :


2
votes

texte alt

dans Adobe Illustrator xxx < P> Ceci convertira le texte en chemins en ancrages et courbes de Bézier.

Mis à part à l'aide d'une application, je ne sais pas comment faire cette programmation.


2 commentaires

Très agréable. Jamais utilisé Illustrator, mais je vois qu'il y a un essai disponible au téléchargement. Incluent-il un langage de script pour extraire les coordonnées au texte?


Malheureusement, je ne connais pas la réponse à cela :(



4
votes

Pour Windows, vous pouvez utiliser GDIPLUS. Créez un graphiquePath et appelez ajoutestring () sur ça.

Examinez ensuite les pathdata ou les points de passage.


0 commentaires

0
votes

Peut-être que vous pouvez utiliser une bibliothèque de polices telle que FreeType 2 pour décoder la police?


0 commentaires

0
votes

Inkscape est gratuit et comprend Texte à la fonctionnalité de chemin . Certaines fonctionnalités d'inkscape sont dirigées par la commande, mais je ne sais pas si cela gérera votre problème exactement. Le format natif de l'inkscape est SVG.


0 commentaires

2
votes

J'avais besoin de la sortie dans MATLAB, a donc pris la réponse correctement marquée à l'aide de l'interface MATLAB.NET. Code source affiché ci-dessous

clear all
% Import .NET Framework System.Drawing
NET.addAssembly('System.Drawing');      

% Display all available System Fonts (optional)
    AvailableFonts = System.Drawing.Text.InstalledFontCollection();
    for i=1:AvailableFonts.Families.Length
        disp(AvailableFonts.Families(i).Name);
    end

% Get GraphicsPath of chosen Font and text string
% https://msdn.microsoft.com/en-us/library/ms142533(v=vs.110).aspx

FontData= System.Drawing.Drawing2D.GraphicsPath();

text='Hello World';
font=System.Drawing.FontFamily('Arial');
style=cast(System.Drawing.FontStyle.Regular,'Int32');
emSize=48;
origin=System.Drawing.Point(0,0);
format=System.Drawing.StringFormat();

FontData.AddString(text,font,style,emSize,origin,format);

%Extract X,Y data from FontData

for i=1:FontData.PathPoints.Length
    x(i)=FontData.PathPoints(i).X;
    y(i)=-FontData.PathPoints(i).Y; 
end

plot(x,y)


0 commentaires