8791 sujets

Développement web côté serveur, CMS

Bonjour à tous ! Smiley smile

Je suis en train d'ajouter une rubrique à mon site, qui permettra aux visiteurs de saisir un texte et de l'afficher avec une police de caractère Opentype, pour leur donner un aperçu, sous la forme d'une image générée grâce à la librairie GD de Php. Jusque là, tout va bien Smiley biggrin

Je ne rencontre qu'un seul petit problème actuellement : La librairie GD ne permet apparemment pas d'afficher les ligatures/alternates (autres que les ligatures "classiques" fi, ff, etc) de manière "automatique" - sauf erreur de ma part. Certaines polices ont, par exemple, des suites de caractères un peu plus stylisées (si on écrit par exemple "alsa", une police peut contenir une ligature/alternate "ls" par exemple, pour remplacer "l" et "s" par un "ls" stylisé). Pour corriger ceci et permettre à l'utilisateur d'afficher des ligatures/alternates, j'avais pensé utiliser les expressions régulières ou encore str_replace. Sauf que... je ne saurai pas par quoi remplacer puisque les ligatures "exotiques" et autres alternates n'ont pas de valeur Unicode. Ils n'ont qu'une dénomination dans le fichier de police qui lui est propre.

D'où, une première question, à laquelle je tente de répondre, en espérant que vos connaissances m'aident à progresser dans ce domaine Smiley smile :

- Est-il possible d'accéder à ces ligatures/alternates avec la libraire GD pour pouvoir les afficher ?

Et une seconde question, pour voir plus loin - et qui me fait ne pas poster initialement ce sujet dans la partie "Développement web côté serveur" :

- Est-il possible sinon, grâce à d'autres langages, de générer une image à partir d'un texte, et de bénéficier des fonctions Opentype telles que les ligatures et alternates ?

De nombreuses recherche n'ont pour le moment pas donné de résultat Smiley decu

Je m'en remets à vos lumières pour enrichir mes connaissances Smiley ravi

Merci par avance d'avoir lu mes modestes questions,

Frédéric
Modifié par fredericrich (16 Apr 2012 - 15:25)
Salut Florian, et merci beaucoup pour ta réponse.

Alors, d'après ce que je sais sur le sujet, seul Firefox permet d'afficher les ligatures discrétionnaires grâce à @font-face. Voici ce que j'avais trouvé sur le sujet : https://developer.mozilla.org/en/CSS/-moz-font-feature-settings

Ainsi qu'une page d'exemple : http://people.mozilla.com/~jkew/feature-samples/MEgalopolis.html

Je n'avais encore jamais utilisé <canvas>, mais tu viens de me convaincre d'y jeter plus qu'un œil parce que ça pourrait m'être très utile - peut-être pas directement pour ceci, mais dans le futur je pense pouvoir m'en servir. Merci pour cette suggestion !

Je ne l'avais pas précisé - mea culpa Smiley confused - mais utiliser @font-face poserait tout de même un petit problème en ce qui me concerne : les fichiers de police que je vais utiliser peuvent être assez lourds, même au format WOFF - 500ko à 1Mo. Ce qui me fait beaucoup hésiter quant au fait d'utiliser cette propriété dans ce cas de figure précis. L'idée de créer une image avec GD (ou une autre librairie voire un autre langage) me semblait moins gourmand du coup.
Modifié par fredericrich (16 Apr 2012 - 22:27)
Pour le coup de la taille des polices, tu peux être voir du côté du font-face generator de font-squirrel qui te permet de créer un subset limité en mode expert.

Côté serveur, une idée peux être un script en Python pour FontForge, mais je ne m'y connais suffisamment pas pour te dire si c'est effectivement réalisable/hébergeable.

Autre idée, un support des ligatures dans Cufon semble dans les tuyaux (https://github.com/sorccu/cufon/issues/38), ça peux-être intéressant de voir comment c'est implémenté.
Modifié par Florian_R (17 Apr 2012 - 10:45)
Merci Florian pour ta réponse,

En fait, quand je parlais de 500ko à 1mo, c'était pour une police déjà passée au generator de Font Squirrel Smiley confused - au passage, ça pose des questions niveau licence ce genre d'outil, vous ne trouvez pas ?

Mais c'est vrai que j'ai volontairement pris une de mes polices un peu... "extrêmes" au niveau poids - un énorme nombre de points, plusieurs alphabets, etc, etc. Dans d'autres cas ça pourrait tout à fait fonctionner - la plupart de mes autres polices "basiques" passeront comme une lettre à la poste avec leur quelques ko. Disons que je voudrais éviter quand même d'utiliser une solution susceptible de mettre de côté certaines polices, ou de rendre difficilement utilisable leur aperçu.

J'ai essayé Cufon à l'instant même. Malheureusement, le problème de la taille reste le même : J'ai généré le fichier JavaScript, qui s'est avéré faire dans les 700ko.

Pour ce qui est de FontForge, je le connais comme éditeur de polices, mais qu'entends-tu par "un script en Python pour FontForge" ?
Modérateur
C'est assez intéressant comme problème, bien que je n'aie pas de possibilité toute faite. Vu la taille impressionnante des polices, elles doivent contenir une variété de glyphes colossales, non pas juste de l'occidental/cyrillique mais la plupart des langues non?

Du coup ce sont sûrement des polices payantes avec licence ou ce sont tes propres polices? Dans le cas d'une licence il y a plein de problèmes de droits, notamment généralement l'interdiction de modifier le fichier d'origine (oui bon c'est bête mais c'est comme ça).

Côté serveur, j'ai pensé à un Quark ou Indesign server, mais ça me paraît un peu lourd pour le coup, Mais peut-être d'autres solutions genre Web-to-print pourraient convenir.

L'autre aspect qui m'interpellent, c'est que ce sont des ligatures «optionnelles», comment alors l'utilisateur choisi-t-il dans un textarea?
Florian, merci pour le lien, je vais étudier ça tout de suite Smiley cligne

Kustolovic, merci pour ta gentille remarque sur l'intérêt de ce problème Smiley biggrin Alors, la taille d'une police dépend plus du nombre de points que du nombre de caractères - même si ça joue aussi dans une moindre mesure. Tu peux trouver des polices d'apparence "Trash" composées d'un très grand nombre de points et d'un alphabet latin seulement qui vont peser plus d'1mo, et trouver des polices basiques avec plein d'alphabets, qui vont peser 10 fois moins. Pour la petite histoire, un fichier de police "extrême" existe, composé de 65535 caractères de 8 points chacun - utilisé uniquement pour des tests bien évidemment - et ce fichier ne pèse "que"... 590 ko.

En l'occurrence, il s'agit de mes propres polices - celle que je teste ne contient que l'alphabet latin, la plupart des caractères spéciaux de cet alphabet, le cyrillique, et les ligatures/alternates. Tu as entièrement raison, en général il est interdit de modifier le fichier d'origine d'une police - commerciale ou non, d'où mon questionnement sur la légitimité d'un tel générateur puisque cela modifie bien le fichier original, mais c'est un autre débat (donner l'accès à un outil qui peut permettre un usage normalement illégal ne doit pas occulter l'usage légal initial pour lequel il est conçu).

J'avoue honnêtement ne pas m'être posé la question du choix (ligatures ou non). Bien qu'avec GD, les ligatures ne s'affichent pas, j'aurai donc une solution pour ne pas les proposer Smiley biggrin Mon but est le suivant : Sur mon modeste site, je crée une rubrique pour mes polices, avec pour chacune d'entre elles, la possibilité pour la personne qui navigue de taper un texte pour voir ce que ça donne avec la police en question. Je vois ça comme ça : dans un textarea, l'utilisateur devrait écrire son texte normalement, et si les ligatures existent, le texte d'aperçu les utilise, un peu comme ici - oublions la partie dynamique, l'affichage peut se faire sans problème après avoir validé un formulaire. On voit que lorsqu'on tape un texte, et qu'une ligature existe, elle remplace automatiquement la séquence tapée. Bien sur, on peut se poser la question du choix, c'est légitime. Mettre les ligatures en avant en est un, pour montrer simplement l'étendue des caractères de la police. Libre ensuite à la personne de les utiliser une fois la police téléchargée et installée.

GD m'avait l'air tellement adapté - et pour être honnête je n'ai jamais utilisé autre chose pour générer une image à partir d'un texte - que j'ai du mal à entrevoir d'autres solutions. Pour être honnête, l'idéal serait vraiment de rester dans le même registre, à savoir générer une image à partir d'un texte. Smiley smile