Ambroise Maupate

 

Graphiste et Web designer freelance à Nevers et Besançon, Ambroise Maupate, étudiant à l'ÉSAAB vous présente son portfolio.

AM SaViGnac | Exporter en SVG avec Java

Catatype

Consulter le javadoc.

Consulter les sources sur GitHub

Qu'est-ce que SaViGnac ?

AM SaViGnac est un projet initié suite à la rencontre du problème de l'exportation d'images depuis des programmes JAVA. Ayant proposé plusieurs projets où l'ordinateur crée une image en fonction de mes contraintes, le système d'exportation d'images matricielles fourni par l'API Java ne me suffisait plus. Je me suis tourné vers une approche vectorielle qui s'accorderait mieux à la visée graphique de mes expérimentations ; ainsi j'ai choisi de me lancer dans l'élaboration d'une API de dessin vectoriel qui reprend les standards du format SVG dictés par le W3C.


Cette API que j'ai nommé SaViGnac (en référence au publicitaire français), devra pouvoir être utilisée de manière transparente à la place des objets "Graphics" fournis par JAVA avec l'API AWT pour ensuite exporter un fichier .svg réutilisable dans n'importe quel logiciel de dessin vectoriel. Les avantages de ce choix pour le vectoriel sont de libérer l'ordinateur de calculs importants losqu'il s'agit de créer une image matricielle (faite de pixels) et d'obtenir une image agrandissable à l'infini sans perte de qualité (c'est à dire, tous les avantages d'une image vectorielle par rapport à une image pixellisée).


L'API SaViGnac est en développement, mais je travaille déjà à son implémentation dans divers projets de design génératif (CataType, LogoFactory, MIC) et ainsi permettre d'exporter une composition vectorielle qui pourra être remaniée dans Illustrator.


Qu'est-ce qu'une API ? Définition sur Wikipedia

Une API (Application Programming Interface) est une bibliothèque de fonctions qui a pour but d'étendre les capacités d'un programme. Une API n'est pas un programme à part entière, elle ne fait que complèter les fonctions d'un programme existant, ainsi, AM SaViGnac pourra permettre à AM CataType d'exporter en SVG. Et dans une optique plus large, elle pourra être réutilisée par d'autres développeurs à des fins de dessin vectoriel.


Reconstruction et remise en question - 20 août 2010

Après un accident de sauvegarde, j'ai perdu mon projet SaViGnac ainsi que toutes les sources (Maudite Time Machine qui avait exclu mon dossier "Programmation"). Par nécessité pour le projet RDB/5 Logo Factory, j'ai donc entrepri de réecrire SaViGnac sur de nouvelles bases.

L'API est donc plus proche de AWT car chaque SVGObject hérite de son homologue AWT : un SVGRectangle est ainsi un java.awt.Rectangle auquel j'ai ajouté les fonctions de dessin SVG dans un fichier.

Le parser SVG a aussi été revu entièrement, il utilise les classes de l'API jdom, ce qui facilite grandement l'écriture du fichier SVG.


Exemple de code - 20 août 2010

import amsavignac.document.SVGDocument;

import java.awt.Color;

public class Main {


public static void main(String[] args) {


SVGDocument svgW = new SVGDocument("px");

svgW.setSVGView(300, 200);

svgW.addDescription("This is a svg file");


svgW.addGroup();

svgW.addDescription("This is a svg group");

svgW.rotate(30, 50,50);


svgW.setPaint(new java.awt.GradientPaint(0,0,Color.red, 100, 100, Color.blue));

svgW.fillRect( 0, 0, 100, 100);


svgW.setPaint(java.awt.Color.MAGENTA);

svgW.drawRect(200, 100, 50, 150);


svgW.closeGroup();

svgW.addGroup("This is an other group");


svgW.writeFile("test.svg");

}

}


Voici le fichier SVG généré :

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">


<svg xmlns="http://www.w3.org/2000/svg" width="300.0px" height="200.0px" viewBox="0px 0px 300.0px 200.0px" version="1.1">


<desc>This is a svg file</desc>


<g transform="rotate(30.0) translate(50.0px,50.0px)">

<desc>This is a svg group</desc>


<rect x="0.0" y="0.0" width="100.0" height="100.0" id="rectangle95992" fill="url(#gradient8283)" />


<rect x="200.0" y="100.0" width="50.0" height="150.0" id="rectangle82155" stroke="rgb(255,0,255)" stroke-width="1" />


<defs>

<linearGradient id="gradient8283" gradientUnits="userSpaceOnUse" x1="0.0px" y1="0.0px" x2="100.0px" y2="100.0px">

<stop offset="0%" stop-color="rgb(255,0,0)" />

<stop offset="100%" stop-color="rgb(0,0,255)" />

</linearGradient>

</defs>

</g>


<g>

<desc>This is an other group</desc>

</g>


</svg>

 

Aperçu du code ci-dessus


Ambroise Maupate 2010
- Design graphique, Web et interactif
+33 (0)6 23 32 18 64

Tous les travaux présentés dans ce portfolio sont la propriété intellectuelle d'Ambroise Maupate. Reproduction et utilisation interdites sans avis du webmaster.