This application is not used any more and exists only for history. Post new tickets on the Github account.
Cette application n'est plus utilisée, et existe uniquement pour son historique. Postez les nouveaux tickets sur le compte github.

Ticket #1181 (assigned new feature)

Opened 4 years ago

Last modified 2 years ago

Ajout d'un convertisseur svg vers png ou jpeg dans jImagemodifier.

Reported by: flav Owned by: flav
Priority: normal Milestone:
Component: jelix:utils Version:
Severity: normal Keywords:
Cc: Blocked By:
Blocking: Documentation needed: no
Hosting Provider: Php version:

Description

(necessite ImageMagick?)

Je pense qu'il serait interessant de pouvoir transformer un svg en jpeg ou en png grâce à la classe jImagemodifier.

Dans ce cas, il faudra peut-être au moins compléter la documentation de la balise image.

Je me lance ?

Attachments

jResponseSvgToPng.class.php (3.2 KB) - added by flav 4 years ago.
Version simpliste à faire évoluer. Ne prend en charge que SVG vers PNG.

Change History

comment:1 Changed 4 years ago by laurentj

  • Version 1.1.6 deleted
  • Component changed from jelix:plugins:tpl to jelix:utils

Tu comptes t'y prendre comment ? jImageModifier, c'est pour transformer une image, pas la convertir. Si ton patch fait 3 lignes, pourquoi pas, mais si c'est pour rajouter une grosse lib, il vaudra mieux avoir une classe spécifique.

Ensuite, quel est l'intérêt ? Tout les navigateurs modernes (y compris IE9) savent afficher du SVG.

comment:2 Changed 4 years ago by flav

IE9 est encore loin d'être assez vieux... De plus, l'intégration de svg dans du html ne semble être gérée correctement qu'à partir de firefox 4.

L'interêt serait de pouvoir utiliser le moteur de vignettes directement dans le squelette.

Admettons que je crée une réponse xml pour générer certains svg. Je transmet par methode get certains paramètres du genre la couleur d'un objet, la valeur de l'attribut display d'un calque... Je construit enfin mon svg à l'aide d'un template (svg étant un xml).

Ca me donne un contexte définit par une url (fichier source). Je veux enfin une vignette de ce svg. Quoi de plus naturel alors que d'utiliser la balise image? De plus, si l'image peut être convertie, elle n'est plus calculée côtée client, et n'est calculée, pour chaque contexte, qu'une seule fois côté serveur pour générer la vignette en cache.

Le calcule d'un svg demande beaucoup de ressources. Pour une vignette, il peut être interessant, au delà même d'éventuels problèmes de compatibilité des navigateurs, de ne pas avoir à faire faire ce calcul systèmatiquement côté client. Surtout si l'on a une liste de 36 vignettes dans une page...

comment:3 Changed 4 years ago by laurentj

  • Documentation needed unset

comment:4 Changed 4 years ago by laurentj

Sauf que :

  • IE8 peut très bien afficher du SVG, il y a des plugins pour ça il me semble
  • Firefox sait très bien afficher du SVG, depuis la version 1.0 ou 2.0 (direct dans du XHTML ou via la balise object comme de nombreux navigateurs)
  • jImageModifier ne se base que sur des fichiers sources locaux, pas via http. ce qui est nécessaire pour savoir la date du contenu, et donc si le cache est ok ou pas. On peut toujours essayer de se baser sur un fichier récupéré via http, mais il y a intérêt à bien mettre tous les entêtes http nécessaires dans le script qui génère le svg, pour avoir sa date de modification, ce que ne vont pas faire la moitié des développeurs, donc l'image sera régénérée à chaque fois.
  • Tu ne m'a toujours pas dit comment tu allais faire pour la conversion proprement dite :-)
  • enfin, pour résoudre pas mal de souci, je ne verrais pas du tout ça via jImageModifier et encore moins via le plugin de template image. Je pense qu'il serait plus pertinent que la version png du svg soit générée en même temps que le SVG, ou qu'il y ait une autre action demandant la version png d'un svg en donnant les paramètres qu'il faut (et avec donc sa propre URL). La réponse pourrait alors plus facilement gérer le cache, tant au niveau du fichier png, qu'au niveau des entêtes HTTP. Bref, dans la réponse png :
  • calcul d'un ID unique pour le cache, en fonction des paramètres du SVG et du nom de ce svg
  • check si le fichier cache est ok (présent et valide, en comparant avec la date du template)
  • si pas ok, on génère directement le SVG (en le stockant dans un fichier temp ou dans une string) puis on effectue la conversion avec je ne sais quel outils (pas souvenir que gd sache faire ça). Et on envoie le png resultant (avec des entetes HTTP sur sa durée de validité etc pour le cache du navigateur)
  • si par contre le cache ok, on renvoi soit directement le fichier png, soit, après check des entête http à propos de la validité du cache du navigateur, on peut juste renvoyer au navigaeur que son cache est ok.

Je trouve cela bien plus simple et plus sain de faire ça que de hacker jImageModifier. Ce n'est pas son rôle à mon avis.

comment:5 Changed 4 years ago by flav

C'est vrai que si jImageModifier commence à faire des conversions de type d'image, on a pas fini. L'idée de paramétrée la réponse me convient. C'est en effet plus propre.

Si je parvient à faire ça, il faudra que je poste une contribution, sous une forme ou sous une autre. Une documentation ne devra-t-elle pas être liée à cette contribution ? On verra ça plus tard sur un éventuel nouveau ticket ?

comment:6 Changed 4 years ago by flav

J'oubliais : La conversion svg->png est effectuée par imagemagick. Je sais plus comment on fait, mais ça prend pas plus d'une ligne à priori. :-)

comment:7 Changed 4 years ago by flav

Je pense que je vais simplement m'inspirer de jResponseTcpdf pour creer une classe jResponseImage capable d'effectuer des conversions en gérant un cache comme tu l'as décris.

Changed 4 years ago by flav

Version simpliste à faire évoluer. Ne prend en charge que SVG vers PNG.

comment:8 Changed 4 years ago by flav

Je me suis basé sur la réponse LatexToPdf?. Ça permet de définir un squelette SVG avec des éléments pratique pour cacher/afficher ou pour modifier des couleurs par exemple, puisque le SVG, c'est du XML.

Bon j'ai pas pris en compte la conversion vers d'autres formats. Cette réponse pourrait être plus généraliste, en permettant la conversion vers d'autres formats, voire peut-être en permettant de prendre en charge globalement imagemagick. Il existe aussi batik qui est plutôt bien réputé.

Je n'ai pas le temps d'aller plus loin pour l'instant. Ça demanderait une connaissance approfondie d'imagemagick. Mais si vous voulez, je m'y collerais volontiers plus tard.

comment:9 Changed 2 years ago by laurentj

  • Status changed from new to reviewing
  • Owner set to flav

comment:10 Changed 2 years ago by laurentj

  • Status changed from reviewing to assigned

Je propose de mettre ça en dehors du framework jelix, et de le référencer sur booster.jelix.org

Note: See TracTickets for help on using tickets.