Sommaire Index Rechercher Liens A Propos
[LinuxFocus Image]
[Barre de Navigation]
  Nouveaut�s   Archives

Le Langage Postscript

par Emre Demiralp


Introduction

Dessiner

Ecrire

Mise en couleur

Engrange la balle (du grain), un jour elle te sera utile.
-Proverbe Turc-.

Introduction

C'est le premier d'une s�rie d'article sur PostScript. Le but de cet article n'est pas appr�hender tous les points de d�tails du langage mais assez d'�l�ments pour que vous puisez vous faire une id�e sur PostScript et de vous amuser a programmer des documents. Cependant nous n'allons pas essayer de vous soumettre un article technique, ou un roman, ni une bible sur le sujet, mais nous allons tenter de vous pr�senter les informations n�cessaires pour bien d�buter en PostScript.

Le langage PostScript a �t� cr�� il y a 22 ans par John Gaffney de the Evans & Sutherland Computer Corporation. Il �tait d�velopp� par "Design System" au d�but puis Adobe Syst�mes Incorporated continua le d�veloppement comme un langage outil ind�pendant pour le formatage de page. Maintenant il reste le format le plus utilis� bien que la plus part des utilisateurs ne le sachent pas. Ses capacit�s sont de haut niveau cependant beaucoup d'utilisateurs paresseux qui ne veulent pas entrer dans les d�tails de ce langage pr�f�rez utiliser les autres outils destin�s aux utilisateurs de base qui sont principalement bas�s sur la technique du "What You See Is What You Get". Cependant, beaucoup d'outils WYSIWYG utilisent PostScript comme format de fichier ou comme format d'impression. Ce langage survit toujours tel une aide puissante pour effectuer beaucoup de travaux associ� au dessin, de coloriage , de traitement d'image. D'autre part, si vous d�sirez apprendre ce langage sa structure n'est pas aussi difficile qu'on le dit.

Les commandes PostScript sont ex�cut�es gr�ce a des interpreteurs. Les deux les plus connus font parti des logiciels libres du domaine public et sont disponible sur internet. Il s'agit de "ghostscript" et "ghostview" de l'entreprise Aladdin. Ils sont disponibles sur l'ensemble des plateformes Linux et la plupart des distributions linux les installent par d�faut. nous traitons Ici du programme ghostscript bien qu'on puisse ex�cuter les exemples par d'autres interpr�teur Postscript. Supposez que nous utilisons une plate-forme Linux et que vous vouliez utiliser ghostscript. Le point de d�part peut �tre diff�rent en s'accordant au mod�le d'utilisation. Si nous voulons voir les r�sultats sur l'�cran alors nous pouvons avoir deux possibilit�s: XWindows ou l'affichage direct par la carte graphique. Bien que l'affichage graphique directe par la carte graphique soit disponible sous le linux, il y a certaines limitations � cause de la vari�t� des cartes graphiques. D'autre part si le linux a un serveur X configur�, ghostscript fonctionnera ind�pendamment du type de la carte. Par cons�quent nous supposons que nous lan�ons le serveur X et qu'une fen�tre xterm est ouverte. Alors nous pouvons utiliser ghostscript en tant qu'interpr�te pour chaque commande ou groupe de commandes qui seront entr�es apr�s le prompt .

Initializing... done. Ghostscript 2.6.2 (4/19/95) Copyright (C) 1990-1995 Aladdin Enterprises, Menlo Park, CA. All rights reserved. Ghostscript comes with NO WARRANTY: see the file COPYING for details.
GS>_


Une fen�tre vide doit appara�tre en m�me temps qu'appara�t le prompt de gohstview. Ce dernier va afficher le r�sultat de chacune des commandes donn�es apr�s le prompt GS>, puis il affichera de nouveau un prompt dans l'attente d'une nouvelle commande. Si vous voulez sortir de votre session ghostscript, vous devez entrer la commande quit apres le prompt GS>; .

Nous pouvons aussi utiliser ghostscript comme un compilateur. Dans ce cas nous ouvrons un fichier, par exemple, exemple.ps . Toutes les commandes qui doivent �tre ex�cut�es par ghostscript ont �t� �crites dans ce fichier, comme dans le cas d'un programme. Par cons�quent ce fichier est un programme de PostScript. L'ensemble de ce programme ou ses commandes individuelles, seront ex�cut�es gr�ce � ghostscript si nous tapons les commandes suivante au propmt du shell de la fen�tre xterm de Linux

gs sample.ps

alors il y aura l'affichage du r�sultat du programme sample.ps. En fait, PostScript peut �tre utilis� pour d'autres buts comme l'arithm�tiques ou calculs math�matiques etc... ( Nous en parlerons dans d'autres articles sur le PostSript plus tard) Si le programme produit plusieurs pages alors a l'affichage il y aura la premi�re page et un showpage appara�tra; le programme ghostscript est en attente de la touche enter pour la prochaine page.

Comment utiliser PostScript pour dessiner?

Nous pouvons commencer par dessiner gr�ce a PostScript en consid�rant le g�om�trie de la page. Les coordonn�es des points sur la pages ont comme unit� le pixel ( picture element ) qui repr�sente nn soixante douzi�me de pouce dans le langage PostScript. Le point en bas et � gauche de la page a pour coordon�es (0,0) et la taille de la page est horizontalement 612 , et verticalement 792. Ces tailles sont valides pour le type :"letter type". Il y a plusieurs possibilit�s de d�finition de tailles de pages comme

note pour 540 et 720 ou
legal pour 612 et 1008 ou
a4 pour 595 et 842 .

La d�finition de la taille de la page peut �tre trouv�e dans le fichier d'initialisation gs_statd.ps. Vous pouvez d�finir une taille non standard en modifiant d'une mani�re appropri� ce fichier, nous y reviendrons dans cette s�rie d'articles plus tard. Nous admettrons que nous utilisons le type letter dans cette pr�sentation.

La deuxi�me �tape apr�s ces consid�rations sur la taille de la page, est de placer le pinceau � la position initiale du trac�. Ceci peut �tre r�alis� par la commande

x y moveto

Ou x et y sont respectivement l'abscisse ( horizontale ) et l'ordonn� ( verticale ) ou va �tre plac� le pinceau et ou x et y sont consid�r�s comme des nombres entiers correspondant � des pixels. vous pouvez voir que la structure du langage PostScript est un peu diff�rente des autres langages de programmation. Ici les param�tres de la fonction ou de la commande sont donn�s avant la commande elle-m�me. moveto est la commande qui d�place le curseur � l'emplacement donn� par deux nombres qui sont les param�tres. L'interpr�tation du PostScript se d�roule gr�ce a une machine � registre (la pile). On empile les param�tres puis la commandes d�pile le nombre de param�tres dont elle a besoin. Pour la commande moveto, � l'ex�cution elle va d�piler deux �l�ments sur la pile qui sont ses param�tres. Bien que le proc�d� soit presque le m�me pour les autres langages de programmation, la syntaxe pour l'utilisateur peut para�tre diff�rente. R�sumons nous, les param�tres d'une fonction sont rang�s sur la pile, et sont aussi important que l'appel de cette derni�re. De m�me, l'ordre des param�tres est tr�s importants.

Maintenant nous sommes pr�t � tracer une ligne. Commen�ons avec une figure simple: juste un segment. La commande pour r�aliser ceci est

xx yy lineto

O� xx et yy sont les coordonn�es du point correspondant a la fin du segment. Son point de d�part est la position courante du pinceau x et y . Maintenant �crivons un programme permettant de dessiner un rectangle. Cela peut �tre fait avec les informations donn�es ci-dessus. Le programme ci dessous, suppos� �tre dans sample1.ps, a l'allure suivante :

100 100 moveto
300 100 lineto
300 250 lineto
100 250 lineto
100 100 lineto

Bien que nous ayons donn� chaque commande dans les lignes s�par�es, ce n'est pas vraiment n�cessaire. Nous pourrions les donner sur la m�me ligne en ins�rant un espace vide entre les commandes cons�cutives. L'�criture d'un programme d�pend de l'utilisateur. Cependant, si vous voulez �crire des programmes clairs, la s�paration des lignes par un retour � la ligne permet de gagner en clart�. De m�me, Les commentaires sont �galement tr�s importants pour �claircir la structure du programme. la langage PostScript accepte les commentaires comme les autres langages de programmation. Tout ce qui suit un signe de pourcentage dans une ligne est interpr�t� en tant que commentaire. Par cons�quent, en utilisant le caract�re % vous pouvez mettre beaucoup de messages d'avertissement ou explications dans le programme. Par exemple le programme ci-dessus peut �tre r��crit comme suit

% Cursor initialization %
100 100 moveto
% Drawing the rectangle %
300 100 lineto
300 250 lineto
100 250 lineto
100 100 lineto

Cependant nous vous pr�sentons des commentaires sur une ligne, nous pourrions les mettre sur la m�me lignes qu'une commande, apr�s celle ci.

Si nous tapons maintenant gs sample1.ps au prompt d'un xterm, la fen�tre de ghostscript appara�t mais sans l'affichage d�sir� du rectangle. La raison de ceci se trouve dans le fait que les commandes ci-dessus sont ex�cut�es virtuellement. En d'autres termes, PostScript regarde leur structure s�mantique et se plaint s' il y a quelque chose d'incorrect mais il n'imprime rien sur la page. Les commandes donn�es ci-dessus peuvent �tre consid�r�es comme l'�tape de conception du dessin. La figure con�ue doit �tre imprim�e sur la page en donnant une commande PostScript s�par�e � cette fin. Cette commande est stroke. Si nous l'ajoutons � la fin du dernier programme, alors l'ex�cution de gs sample1.ps fera appara�tre dans une fen�tre une rectangle de largeur 200 et de hauteur 150 unit�s.

Les lignes ne sont pas obligatoirement horizontales ou verticales. Elles peuvent �tre plac�es dans n'importe quelles directions. A titre d'exemple voici le programme du fichier sample2.ps

% Cursor initialization %
200 200 moveto
% Drawing the rectangle %
400 300 lineto
300 300 lineto
200 200 lineto
stroke

Comme vous pourrez le voir, l'affichage r�sultant de l'interpr�tation ghostscript sera un triangle. Vous pouvez cr�er n'importe quelle sorte de figures compos�e de lignes ( polygones ) en utilisant les commandes moveto et lineto.

Il y a deux autres commandes qui peuvent �tre utilis�es pour construire ainsi des figures. Ce sont rmoveto et rlineto. Elles s'utilisent comme ci-dessous.

x y rmoveto
x y rlineto

Ou x et y sont les distances horizontales et verticales entre les points initiaux et finaux. En d'autres mots la premier commande bouge le curseur par rapport � l'ancienne position de x et de y. La seconde commande agit de m�me, mais dessine en plus une ligne. Ces commandes prennent le position du curseur comme point d'origine de syst�me de coordonn�es.

Tous les exemples utilisent une �paisseur de trait par d�faut �gale � 1 pour le dessin. Or l'utilisateur peut modifier cette valeur n'importe o� dans le programme par la commande:

x setlinewidth
O� x est l'�paisseur du trait, et cette �paisseur sera la m�me jusqu'� la prochaine commande setlinewidth. Il n'y a pas de limitation � propos de l'�paisseur du trait, par d�faut cette �paisseur est �gale � 1.

Bien sur, dessiner avec PostScript ne se limite pas � des lignes. Des arcs de cercle peuvent aussi �tre dessin�s. Nous utiliserons alors les commandes suivantes.

x y r a b arc

ou x, y, r, a et b signifient les coordonn�es horizontales et verticales du centre de l'arc, r: le rayon de l'arc, a est l'angle trigonom�trique correspondant � l'angle de l'arc � tracer. Le sens est le sens des aiguilles d'une montre. Si le point de d�part de l'arc ne correspont pas � la position actuelle du curseur, alors une ligne droite est ajout�e entre la position courante du curseur et le point de d�part de l'arc. Pour mieux comprendre cette situation, essayez le programme sample3.ps suivant.


3 setlinewidth
200 200 moveto
100 200 100 0 75 arc
stroke
300 300 moveto
400 500 200 20 50 arc
stroke

Nous devons par cons�quent faire attention et placer le curseur � la position de d�part de l'arc. Toutefois, il y a une autre fa�on de s'affranchr de cet effet. Le point courant peut avoir des valeurs vides. Il n'y a alors pas de position design�e pour le curseur. En d'autre termes, il n'a pas de valeurs de param�tre pour le d�but du trac�. Une fois le trac� commenc�, le point de destination devient le point courant. Avec la commande newpath PostScript efface les coordon�es du curseur et consid�re que le dessin commence � cet endroit du programme. Par cons�quent, le programme ci-dessus peut �tre modifi� en rempla�ant la cinqui�me ligne avec une ligne qui ne contient que la commande newpath. Avec ceci, le resultat du programme ci-dessus sera le m�me sans le segment de ligne suppl�mentaire.

La commande arc peut aussi dessiner un cercle. Pour cela il suffit de donner comme angle de d�part 0 et comme angle de fin 360. Avec newpath on obtient un cercle complet. La commande arc peut aussi �tre utilis�e pour tracer des ellipses. On les obtient en jouant sur les propri�t�s d'echelles de PostScript. L'utilisateur peut changer ind�pendamment les unit�s des �chelles horizontales et verticales avec la commande suivante:

x y scale

O� x et y sont respectivement le facteur horizontal et vertical d'agrandissement. Ceci veut dire que s'ils valent 1 cela n'aurait pas d'effet sur le dessin. L'effet d'agrandissement persiste jusqu'� une autre commande scale. La commande suivante de redimensionnement n'annule pas les effets de la pr�c�dente mais les combine avec elle. Supposons que la commande d'�chelles pr�c�dente avait les coefficients x1, y1 et que la nouvelle a des facteurs x2, y2 , les effets combin�s de ces deux commandes seront les facteurs x1*x2, y1*y2. Ce fait doit �tre gard� pr�sent � l'esprit afin d'�viter des effets ind�sirables lors de l'affichage tels que des lignes qui sortent du papier. PostScript assume par d�faut la non existence de facteurs d'�chelle. Le programme PostScript suivant, sauv� dans le fichier sample4.ps illustre ces redimensionnements.

3 setlinewidth
200 200 100 0 360 arc
stroke
newpath
2 1 scale
200 300 50 0 360 arc
stroke
newpath
1 4 scale
100 150 40 0 360 arc
stroke

On peut noter que l'agrandissement affecte chacune des tailles y compris aussi la largeur de ligne. Les largeurs des lignes des ellipses et du cercle cr��s par le programme ci-dessus sont la cons�quence de ce ph�nom�ne.

le langage PostScript a deux autres commandes pour dessiner des arcs. Un d'elles, arcn, est principalement la m�me que arc � l'exception de la direction du dessin. arc de arcn dessine dans le sens des aiguilles d'une montre. La commande du dessin du troisi�me arc dessine un arc circulaire qui est tangent � deux lignes donn�es aux points extr�mes. Elle peut �tre �cite comme suit.

x1 y1 x2 y2 r arcto xt1 yt1 xt2 yt2

o� xt1, yt1, xt2, yt2 repr�sentent les coordonn�es verticales et horizontales de l'arc tandis que les lignes tangentes ont les valeurs x0, y0, x1, y1 et x1, y1, x2, y2 respectivement et r repr�sente le rayon de l'arc Si le trac� n'est pas neuf ou que le point courant ne coincide pas avec le d�but de l'arc, alors une ligne joindra le points courant avec avec le d�but de l'arc. A la fin du trac�, le point courant devient xt2,yt2. Bien que l'arc soit circulaire malgr� l'utilisation de facteurs d'�chelles non uniformes (facteurs horizontaux et verticaux diff�rents), il peut �tre convertit en arc d'ellipse.

Le langage PostScript poss�de aussi une commandes permettant de tracer des courbes de B�ziers qui sont efficaces pour tracer des courbes d'interpolation ou d'extrapolation de points. La commande PostScript est curveto et peut �tre utilis�e pour cr�er un courbe d'interpolation ou d'extrapolation de points, son utilisation est la suivante:

x1 y1 x2 y2 x3 y3 curveto

o� la courbe commence au point courant dont les coordonn�es sont consid�r�es �tre x0, y0. Elle est tangente � la ligne entre les points x0,y0 et x1, y1 au point de d�part. La courbe se termine au point x3, y3 et est tangente � la ligne entre les points x2, y2 et x3, y3. Par d�faut cesw quatre points sont consid�r�s comme diff�rents et ils d�terminent la forme de la figure. the curve starts at the current point whose coordinates are assumed to be x0, y0 . It is tangent to the line between the points x0, y0 and x1, y1 at the beginning point. The curve ends at the point x3, y3 and is tangent to the line between x2, y2 and x3, y3 . By default all these four points are assumed to be different and they determine the shape of the figure.

La possibilit� caligraphique de PostScript

PostScript a plusieurs fontes standards qui sont utilis�e pour la PAO. Il a aussi des possibilit�s de cr�ation de fontes auxquelles on peut acc�der en d�finnissant des biblioth�ques. Le programme PostScript suivant (sample5.ps) en illustre l'utilisation.

/Times-Roman findfont
15 scalefont
setfont
100 500 moveto
(I love PostScript!) show
/Times-Italic findfont
20 scalefont
setfont
100 450 moveto
(I love PostScript!) show
/Times-Bold findfont
25 scalefont
setfont
100 400 moveto
(I love PostScript!) show
/Helvetica findfont
30 scalefont
setfont
100 350 moveto
(I love PostScript!) show
/Courier findfont
35 scalefont
setfont
100 300 moveto
(I love PostScript!) show
/Helvetica-Bold findfont
40 scalefont
setfont
100 250 moveto
(I love PostScript!) show
showpage

Comme vous pouvez le voir dans ce programme la commande findfont permet de charger la fonte d�sir�e. Le nom de la fonte avec / est donn� � la commande comme param�tre. le nombre avant la commande scalefont est le facteur d'agrandissement, param�tre de cette commande. Ensuite, la commande setfont charge la fonte qui est alors pr�te pour sa future utilisation dans le programme. Apr�s le positionnement du curseur gr�ce � la commande movetoavec des param�tres appropri�s, le texte � afficher est entre parenth�ses; ce dernier est le param�tre de la commande show. La commande showpage finalise le travail en r�alisant l'affichage, ou impression. Le programme ci-dessus montre l'utilisation de diverses fontes de types et tailles diff�rentes. Le nombre de fontes disponible pour PostScript peut �tre trouv� en recherchant les emplacements des fontes dans les r�pertoires linux par la commande locate. Le texte peut suivre une ligne, une courbe ou tout autre trac�. Ainsi tous les d�lires artistiques sont permis et m�me favoris�s.

La mise en couleur gr�ce � PostScript

Le langage PostScript a plusieurs commandes pour peindre des figures ou cr�ez les images color�es. Commen�ons par mentionner les commandes de coloriage. Par d�faut, PostScript utilise le noir comme couleur de remplissage. Par cons�quent la sortie des tous les programmes pr�c�dents �tait en noir et blanc Pour utiliser la couleur avec PostScript, on a le choix entre trois types de commandes diff�rentes. Le premier est bas� sur le format rgb. Dans ce format on d�crit chaque couleur par sa composante rouge, vert et bleu. Les composantes de couleur peuvent prendre les valeurs 0 � 256. Les intensit�s peuvent �tre des valeurs fractionnaires d�cimales jusqu' � la pr�cision de trois chiffres comme par exemple 111,223. La commande setrgbcolor doit �tre appel� comme suit.

x y z setrgbcolor

O� x, y, z sont les param�tres d'intensit� pour le rouge, vert et bleus et setrgbcolor est la commande. Dans cette convention 1 0 0 est la couleur rouge du setrgbcolor tandis que 0 1 0 setrgbcolor est le vert. Le noir correspond au cas o� toutes les valeurs sont �gales � 1. L'affectation d'une couleur au trac� par cette commande perdurera jusqu' � la prochaine commande de changement de couleur. Quand ceci se produit l'effet de la premi�re configuration dispara�t compl�tement et la nouvelle configuration est utilis�e . Vous pouvez changer autant de fois la couleur que vous voulez. En utilisant finement les couleurs, vous pouvez cr�ez vos images juste comme vous voulez.

Le deuxi�me type est bas� sur un format � quatre composantes. Celui s'appelle le format cmyk. Les quatre couleurs de base sont, alors, cyan, magenta, jaune et noir. Chaques composantes contribuent � la couleur finale avec une intensit� allant de 0 � 1. La commande correspondante au changement de couleur gr�ce au format cmyk est setcmykcolor.

w x y z setcmykcolor

O�w, x, y, z sont les param�tres d'intensit� pour la couleur : composantes cyan, magenta, jaunes et noirs respectivement. Les valeurs flottantes peuvent �galement �tre utilis�es pour des param�tres d'intensit�. Cette commande s'applique �galement jusqu'� l'�mission de la prochaine commande. Quand ceci est fait les nouvelles couleurs changent le r�glage pr�c�dent. Il n'y a pas de limitation de changement de couleur.

La Troisi�me commande peut �tre utilis� comme ceci :

x y z sethsbcolor

O�x, y, z correspondent aux intensit�s de trois composantes de la couleur. Le Premier correspond � hue qui d�termine l'emplacement de la couleur dans le spectre de la lumi�re. Le second, saturation et le troisi�me, brightness corresponds � la saturation et l'�clat de la couleur. Ce format est souvent pr�f�r� quand l'emplacement de la couleur dans le spectre par l'interm�diaire d'une boucle ou de l'�clat et/ou de la saturation deviennent les propri�t�s � contr�ler.

Deux commandes importantes du langage PostScript pour le dessin sont fill et closepath. L'exemple suivant (sample6.ps ) va vous �clairer sur ces commandes de remplissage et de coloriage avec PostScript.

1 1 0 0 setcmykcolor
100 100 moveto
300 100 lineto
300 250 lineto
100 250 lineto
100 100 lineto
stroke
1 0.5 0.8 0 setcmykcolor
5 setlinewidth
200 200 moveto
400 300 lineto
300 300 lineto
closepath fill
stroke
1 0 0 setrgbcolor
3 setlinewidth
200 200 moveto
100 200 100 0 75 arc
stroke
%300 300 moveto
newpath
400 500 200 20 50 arc
stroke
0 0 1 0.2 setcmykcolor
3 setlinewidth
200 200 100 0 360 arc
stroke
1 0 0 setrgbcolor
newpath
2 1 scale
200 300 50 0 360 arc
fill
stroke
0 1 0 setrgbcolor
newpath
1 4 scale
100 150 40 0 360 arc
fill
stroke

O� la commande closepath ferme un chemin en joignant deux extr�mit�s par une ligne droite tandis que fill sert � remplir l'int�rieur d'un chemin ferm� avec la couleur courante.

PostScript peut aussi cr�er les tonalit�s du gris. Ceci peut �tre fait gr�ce a la commande

x setgray

o� x est l'intensit� du niveau de gris et sa valeur va de de 0, qui correspond au noir, � 1 qui correspond au blanc. Le programme suivant ( sample7.ps ) en fait la d�monstration.

0.2 setgray
10 setlinewidth
100 700 moveto
200 0 rlineto
stroke
newpath
0.3 setgray
10 setlinewidth
100 600 moveto
200 0 rlineto
stroke
newpath
0.4 setgray
10 setlinewidth
100 500 moveto
200 0 rlineto
stroke
newpath
0.5 setgray
10 setlinewidth
100 400 moveto
200 0 rlineto
stroke
newpath
0.6 setgray
10 setlinewidth
100 300 moveto
200 0 rlineto
stroke
newpath
0.7 setgray
10 setlinewidth
100 200 moveto
200 0 rlineto
stroke
newpath
0.8 setgray
10 setlinewidth
100 100 moveto
200 0 rlineto
stroke

Apr�s la lecture de cet article, vous pouvez �crire des programmes compliqu�s et complets pour les utilisateurs qui trouvent PostScript enthousiasmant. Dans les prochains articles, nous traiterons plus � fond les d�tails du langage PostScript. Toutes les questions et recommandations sont les bienvenues.


Traduit en fran�ais par Charles Vidal


© 1998 Emre Demiralp
Ce site Web est maintenu par Miguel A Sepulveda.