Convertir SVG vers PNG

Eléphanteau du PHP | 10 Messages

17 juil. 2022, 18:39

Bonjour,
Je souhaite convertir une image SVG généré par un script => https://meteo-gournaysuraronde.fr/Vigil ... lance2.svg en fichier png.
Le seul soucis c'est que j'essaye différentes méthodes de conversion et le png obtenu ne possède que la carte et les pictogrammes sont complètement anarchiques =>https://meteo-gournaysuraronde.fr/Vigil ... lance2.png

$usmap = 'carte_vigilance2.svg';
$im = new Imagick();
$svg = file_get_contents($usmap);

$im->setBackgroundColor(new ImagickPixel('transparent')); //Fond transparent

$im->readImageBlob($svg);

/*png settings*/
$im->setImageFormat("png24");
//$im->resizeImage(720, 445, imagick::FILTER_LANCZOS, 1);  /*Optional, if you need to resize*/

/*jpeg*/
$im->setImageFormat("jpeg");
// $im->adaptiveResizeImage(720, 445); /*Optional, if you need to resize*/

$im->writeImage('carte_vigilance2.png');/*(or .jpg)*/
$im->clear();
$im->destroy();

Je m'aperçois cependant que lorsque je mets l'URL de l'image svg sur le forum les pictogrammes n'apparaissent pas, alors que si on y accède directement sur le serveur via le premier lien, oui ! Peut être est-ce lié ? => Image

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9513 Messages

18 juil. 2022, 10:00

Je ne suis pas un expert en SVG mais je pense que tu as un problème avec ton image d'origine, c'est probablement la raison des bugs de conversion que tu rencontres.
En ouvrant ton image SVG dans le logiciel Inkscape on voit une sorte de trainée des thermomètres vers le bas.
Et en utilisant les solutions de conversion SVG>PNG qu'on trouve en ligne aucune ne réussit à convertir correctement ton image, donc je pense que le problème est à la source.
Quand tout le reste a échoué, lisez le mode d'emploi...

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9513 Messages

18 juil. 2022, 10:05

Le validateur du W3C donne pas mal de pistes à corriger (400 erreurs mais pas d'inquiétude, c'est souvent les mêmes qui se répètent) :
https://validator.w3.org/check?uri=http ... ne&group=0
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 10 Messages

19 juil. 2022, 10:23

Bonjour,
Merci pour ta réponse, j'ai corrigé l'ensemble des problèmes du validateur (d'ailleurs merci cela me sera utile pour d'autres projets !) et j'ai aussi mis les icônes en png plutôt que svg et tout de suite j'ai le rendu que je souhaitais : https://meteo-gournaysuraronde.fr/Vigil ... lance2.png


EDIT : c'est bon tous les icônes sont bien apparus. Par contre le script prend énormément de temps et en tâche cron cela plante, peut être existe-t-il un autre moyen de conversion plus optimisé.

EDIT 2 : Bon en fait en lancant le script plusieurs fois le résultat est aléatoire, des fois il va durer longtemps (20 secondes environ) et la carte sera générée totalement, ou alors il dure 2 secondes, la carte est entière mais il manque les 3/4 des pictos voir tous ...
Même en isolant le script à part de celui générant le SVG ce qui montre que lui est désormais ok (d'ailleurs cette fois les sites convertissent bien, quelques essais et à chaque fois j'avais bien les pictos).

Avatar du membre
Eléphanteau du PHP | 41 Messages

19 juil. 2022, 12:34

perso je suis pas pour donné se genre de travail à php je pense que le mieux c'est de faire tafer l'explorateur web donc de passé par du javascript
https://www.delftstack.com/howto/javasc ... avascript/