Question

Mon programme (win32, Delphi) doit afficher les caractères spéciaux dans certaines colonnes d'une table. Pour ce faire, que j'utilise une police spéciale pour les colonnes. Je suis la police de mon client. Il est une police .FON. Il fonctionne bien sur l'écran, mais je reçois souvent des problèmes dès que je veux l'utiliser pour imprimer quelque chose.

Je voudrais convertir cette police .FON dans la police TrueType (.TTF) pour éviter les problèmes. Je ne me soucie pas si la police n'échelle pas bon. Je devrais regarde exactement la même que celle utilisée sur l'écran avec la même taille que la taille par défaut de la police d'origine. Ne quelqu'un sait une façon de le faire?

(Il ne faut pas besoin d'une solution de code source. La police ne changera pas. Assez de si je trouve un outil pour le faire)

Edit: idéal serait d'avoir une police TrueType où chaque pixel de la police d'origine est converti en un carré noir vectoriel (I testé par redessiner quelques caractères manuellement, il fonctionne comme je veux ).

Edit 2, solution utilisée: Utiliser FontForge + autotrace , puis faire des corrections j'étais manuellement en mesure d'obtenir une police vectorielle qui suivent le contour des pixels de la police bitmap. Ce vecteur échelles de police un peu mieux que la police d'origine et résoudre mes problèmes d'impression. Voir accepté après pour plus de détails.

Mais je suis toujours intéressé si quelqu'un connaît une solution entièrement automatisée.

Était-ce utile?

La solution

FontForge + Autotrace puis faire quelques corrections manuellement.

Tout d'abord intégrer Autotrace dans Fontforge, consultez Autotracing bitmaps à FontForge . Voici comment je l'ai fait, comme je ne pouvais pas utiliser la version win32 de FontForge:

  1. Téléchargez, décompressez et commencer Portable Ubuntu Tres . Il est une version spéciale de Linux qui fonctionne sous Windows!
  2. Choisissez Système-> Administration-> Ajout / Suppression de programmes, recherchez FontForge et installez-le (mot de passe administrateur est 123456). Je suis FontForge la version 20090622 installated.
  3. Télécharger autotrace-0.31.1.tar.gz de http: //autotrace.sourceforge. net / index.html # télécharger et le copier dans votre répertoire personnel dans Ubuntu Portable.
  4. choisissez Ubuntu Portable Applications-> Accessoires-> Terminal pour compiler et installer autotrace:

    sudo bash  (password is 123456)
    gunzip autotrace-0.31.1.tar.gz
    tar xf autotrace-0.31.1.tar
    cd autotrace-0.31.1
    ./configure
    make
    make install
    

Ensuite, convertir votre police:

  1. Démarrer FontForge en Portable Ubuntu et ouvrez la .fon.
  2. Enregistrer votre police comme police .bdf (Charger un fichier .FON comme arrière-plan n'a pas fonctionné pour moi, donc je devais convertir la police en premier):. Fichier-> Générer les polices de caractères et choisissez BDF en tant que format
  3. Créer une nouvelle police et importer la police BDF comme police de fond:. Fichier-> Importer et ne pas oublier de sélectionner « comme fond d'écran »
  4. Sélectionner tous les caractères et démarrer une autotrace tout en maintenant la touche Maj enfoncée afin que vous puissiez entrer les paramètres pour autotrace. J'ai utilisé les paramètres suivants, qui ont amélioré la reconnaissance du contour des pixels, mais je ne l'ai pas trouvé les paramètres parfaits:

    -corner-surround=1 -line-threshold=10
    
  5. Corriger les caractères manuellement en utilisant principalement la fonction « Ajouter un point de courbe ». Activation Affichage-> Show-> Presque horizontal / vertical Lignes rend le travail beaucoup plus facile.
  6. Générer une police TrueType. Fichier-> Générer les polices de caractères et choisir le format TrueType comme

Autres conseils

Je sais que cette question est vieux, mais pour ce qu'il vaut la peine que je suis en mesure de convertir facilement un vieux .fon à l'aide .ttf PixFont . Je courais comme un administrateur (pas - un ancien installe exécutable scolaire en place). Elle a également suscité une bonne TTF même si le .fon d'origine il manquait quelques Glyphes correctes

Et, alors qu'il est pas libre, à 29 $ est presque, en particulier par rapport aux produits commerciaux très chers là-bas.

Pour ceux qui ne veulent pas compiler fontforge (pour Windows) saisir téléchargement ici: http://www.mpetroff.net/software/fontforge-windows/

qui utilise de construction Potrace au lieu de autotrace. Les meilleurs paramètres que j'ai pour la police que je convertissait (vgasys.fon) étaient les suivants:

--turdsize 0 --opttolerance 0 --unit 1 --longcurve --gamma 0 --blacklevel 0 --cleartext

Il était encore heures de travail manuel pour obtenir la police en regardant bien (en ajoutant et supprimant des points).

Utilisation FontForge Je suis en mesure de générer une police TrueType correspondant, ce qui donne exactement les mêmes caractères que le police d'origine lorsqu'il est utilisé à la bonne taille. Peut être je encore besoin de quelques options tweak, parce que j'utilisé ma police d'origine au format = 11. La nouvelle police fonctionne bien seulement à la taille = 10,5, ce qui est impossible à utiliser dans delphi. La police ressemble vraiment horrible à tous les autres dimensions.

  1. Charger la police .FON dans FontForge
  2. Choisissez Fichier-> Générer les polices de caractères
  3. Sélectionnez "(truqué) de bitmap MS ne sfnt (TTF)" comme type, Entre un nom de fichier et cliquez sur "Enregistrer".

Apparemment, il utilise une possibilité de stocker les polices bitmap dans une police TrueType-. La police qui en résulte n'a pas les problèmes que j'eus avec les polices bitmap, mais il est vide sur l'completly imprimante afin qu'elle ne résout pas mon problème.

Une note sur FontForge : Je n'ai pas réussi à installer la version Windows de FontForge (basé Cygwin). Au lieu de cela, j'INSTALLÉ Portable Ubuntu Tres, qui est une version de Linux qui fonctionne sur Windows. Il est facile à installer: Décompressez le fichier et lancez l'exe. Ensuite, choisissez Système-> Administration-> Ajout / Suppression de programmes et la recherche de FontForge et l'installer (mot de passe administrateur est 123456). Je suis FontForge la version 20090622 installated.

Une possibilité pourrait être d'utiliser l'outil de ligne de commande SBIT32 Microsoft fom . Il est facile de convertir le fichier .FON dans un fichier .bdf en utilisant FontForge . Mais alors vous devez écrire un fichier paramètres (.met). Je n'ai pas essayé, parce que je suppose que je recevrais une truetype-police avec bitmaps intégrés de police, et il est possible de générer de telles polices directement avec FontForge de (type "(truqué) MS bitmap ne sfnt (TTF)" Fichier-> Générer les polices de caractères).

Je trouve que la voie la plus facile d'obtenir une bonne version TTF d'un FON est d'utiliser l'un des éditeurs de polices bitmap en ligne gratuits. Vous devez saisir manuellement chaque glyphe, mais le processus est beaucoup plus simple que de venir à bout de FontForge. Il y a deux rédacteurs en chef que je connais, et ils produisent tous les deux TTF qui fonctionnent bien sous Windows et Linux.

BitFontMaker est le plus simple des deux. Je aime son interface propre, mais je fini par ne pas l'utiliser parce que les polices monospaced ne peuvent avoir la largeur des cellules de 10 à 14 pixels.

FontStruct nécessite l'enregistrement et utilise une interface Flash. Je suis en mesure de faire de nouvelles polices assez vite une fois que je me suis habitué à l'interface. (Il est peut-être une coïncidence, mais je remarque une légère hausse du spam sur le compte e-mail je vous inscrire.)

Les deux éditeurs définir la ligne automatiquement l'espacement. Une astuce pour obtenir l'espacement que vous voulez est d'ajouter un pixel de haut sur un caractère, utilisez un éditeur de police de vecteur pour le retirer de la TTF. ( lumière de type fonctionne bien et est beaucoup plus facile à utiliser que FontForge.)

Il est peu probable que vous pouvez accomplir avec un simple outil gratuit. http://www.fontlab.com ont des outils pour le faire, mais ils sont très chers.

Selon la description du produit BitFonter 3.0 semble être en mesure de le faire:

  

" conversion puissante de bitmaps et les polices bitmap de type 1 et, polices TrueType et OpenType grâce à l'intégration avec FontLab et TypeTool. "

999 $ US est un peu cher pour convertir une seule police.

Je me suis retrouvé la recherche de ces polices à utiliser avec un projet sur lequel je travaille. Craintive à l'idée de modifier manuellement tous les glyphes comme mentionné dans les autres réponses, je continuais à chercher. Finalement, je suis tombé sur un site qui a la police d'origine ainsi que quelques variantes plus récentes .ttf. Si vous ne vous inquiétez pas que certains des glyphes ont été redistribuées (ils sont tous encore présents) c'est une bonne alternative: Oldschool PC Fonts . En prime pour moi, ce support étendu scripts latin, grec, cyrillique et en hébreu, plus un tas de glyphes supplémentaires et des symboles Unicode.

je ne pouvais pas autotrace au travail, j'ai donc écrit un script Python pour tracer des images en noir et blanc en polygones vectoriels, un pour chaque pixel.

Donc, avec un dossier d'images de glyphe, vous pouvez le convertir dans un dossier de fichiers svg.

Ensuite, dans l'union Inkscape + chemin Simplify pour nettoyer chaque glyphe. (Peut être faisable sur la ligne de commande avec Inkscape)

Importer Enfin, le svg correspondant dans FontForge pour chaque glyphe.

-> gist.gisthub.com

from PIL import Image
import svgwrite
import os
import argparse


def bmp_to_svg(filename, multiply =1):

    img = Image.open(filename)
    w, h = img.size
    pixel_acc = img.load()

    generated_paths = paths_gen(pixel_acc, w,h, multiply=multiply)

    dwg = svgwrite.Drawing(profile='tiny')
    for path in generated_paths:
        options = path
        kwoptions = {} #{"fill":"black"}
        dwg.add(dwg.polygon(options, **kwoptions))

    #clip_path = dwg.defs.add(dwg.clipPath())
    #clip_path.add(dwg.Rect(insert=(0,0), size=((w*multiply)+1, (h*multiply)+1)))
    return dwg

def paths_gen(pixel_acc, w, h, multiply = 1):
    m = multiply
    paths = []
    for y in range(0,h):
        for x in range(0,w):
            pix = pixel_acc[x,y]
            brightval = sum(pix) /3
            if brightval < 128:
                paths.append([
                        ##top left
                        (x * m, y * m),
                        ##top right
                        ((x+1) * m, y * m),
                        ##bottom right
                        ((x+1) * m, (y+1) * m),
                        ##bottom list
                        ((x) * m, (y+1) * m),
                        ##close back to top left
                        #(x, y), 
                    ])
    return paths


def main():
    parser = argparse.ArgumentParser(
        description='Script to convert black and white images into vector art')
    parser.add_argument("input_dir")
    parser.add_argument("ouput_dir")
    parser.add_argument("in_ext", default="bmp", help="file extension of images in input folder")
    parser.add_argument("-m", "--multiply", default=1, type=int)
    ## TODO
    #parser.add_argument("-u", "--union", store=True, help="unifies adjecent polgons")
    #parser.add_argument("-s", "--simplify", store=True, help="removes points that are part of a straight line")
    #parser.add_argument("-c", "--compress", store=True, help="same as '--union --simplify'")

    args = parser.parse_args()


    cdir = os.path.abspath(args.input_dir)

    fn_gen = ( x for x in os.listdir(cdir)
                 if x.endswith('.'+args.in_ext)
             )

    for count, filename in enumerate(fn_gen):

        full_filename =  os.path.join(cdir, filename)

        new_fn = "{}_.svg".format(filename)
        new_fullfn =  os.path.join(args.ouput_dir, new_fn)


        svg = bmp_to_svg(full_filename, multiply=args.multiply)
        print "Converted file: '{}'".format(full_filename)
        svg.filename = new_fullfn
        svg.save()

if __name__ == '__main__':
    main()

Je devais passer par beaucoup de tracas pour trouver la solution qui a fonctionné pour moi.

Autotrace semble produire une sortie parfaite de pixel, si l'entrée est mise à l'échelle, à partir de mon expérience de mise à l'échelle au moins 8x fonctionne parfaitement.

Mise à l'échelle de l'entrée est trop compliquées grâce au logiciel fermé.

BitFonter peut ouvrir BDF polices (qui ne supportent Unicode) et il peut échelle. Le problème avec la version de démonstration est que la moitié des Glyphes sont « corrompu » lors de l'exportation (pixels supprimés au hasard), ce qui rend Autotrace produire à nouveau une sortie indésirable. Mais, j'ai remarqué il y a un modèle auquel les caractères sont « corrompus »: les premier et deuxième Glyphes sont corrompus, les troisième et quatrième ne sont pas, les cinquième et sixième sont corrompus, et ainsi de suite. Donc, j'ai fait un fichier BDF complémentaire par mise à l'échelle à nouveau, mais puis retirer les deux premiers Glyphes. Ensuite, la combinaison de ces deux peut être fait en FontForge: ouvert ces deux fichiers de sortie, « Reencode » dans « Codage » à « Glyphe commande », sélectionnez tous dans sortie2 et copier, en output1 cliquez sur le troisième glyphe et appuyez sur Ctrl + Maj + V. Cela combiner les deux fichiers de sortie et de faire tous les caractères mis à l'échelle parfaitement intègres, sauf pour les deux premiers glyphes peut être fait manuellement. Enregistrer le résultat.

Effectuer la « Autotrace » sur cette sortie à l'échelle. Ensuite, tous les glyphes, Element \ Transformations \ Transform, puis utilisez les paramètres suivants: Origine:. Glyphe Origine, échelle ... l'inverse uniformément les de ce que vous escaladé la BDF avant (en cas de mise à l'échelle 8x qui est de 12,5%)

Il y a plus de points que nécessaire, cela peut être résolu en utilisant l'élément \ Simplifier \ Simplifier, cela simplifiera les contours. Dans ce cas spécifique des lignes étant en lignes horizontales et verticales, cette opération devrait être sans perte.

Alors, après tout cela, je remarque que les Glyphes apparemment ne disposent pas d'informations Unicode. Ouvrir ce que la police a exactement les caractères de la police qui en résulte, utilisez le codage \ Reencode \ ISO 10646-1 (Unicode, BMP) sur cette police, puis utilisez Compact. Ensuite, copiez tous les caractères de la police qui a toutes les bonnes lignes sur la police qui a tous les encodages Unicode droit.

Si vous ne pouvez pas suivre une étape, laissez-moi savoir ce qui se passe. Ceci est vraiment et il était excessivement complexe une tonne de tracas d'essayer d'utiliser et de combiner les effets de chaque outil que je pouvais trouver, mais je l'ai trouvé la solution. Il est automatisé, ce qui rend plus facile pour les polices avec des tonnes de personnages que de redessiner tous les caractères manuellement. Cela devrait aider à toute personne qui a dessiné Glyphes bitmap et dispose d'un fichier de police bitmap valide mais ne peut pas utiliser encore.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top