Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Conversion svg -> png en php ?

2 réponses
Avatar
Antoine
Bonsoir,

je recherche une solution pour convertir en php des images svg en images png avec les
contraintes suivantes :

- le serveur n'a pas et ne peut pas avoir imagemagick d'installé
- idéalement, la conversion devrait être capable de préserver l'anticrénelage des svg

Merci d'avance,
Antoine

2 réponses

Avatar
Aurelien Lebrun
"Antoine" a écrit dans le message de
news:
Bonsoir,

je recherche une solution pour convertir en php des images svg en images
png avec les
contraintes suivantes :

- le serveur n'a pas et ne peut pas avoir imagemagick d'installé
- idéalement, la conversion devrait être capable de préserver
l'anticrénelage des svg

Merci d'avance,
Antoine




Un solution simple si tu as les packages python installés sur ton serveur
est d'executer via php ce script assez sympatique fait par un français:

#!/usr/bin/python

'''svgtopng - SVG to PNG converter
Copyright (c) 2007 Guillaume Seguin
Licensed under GNU GPLv2'''

import cairo
import rsvg
from sys import argv
from os.path import exists
import getopt

def usage ():
print "Usage : %s [--width WIDTH] [--height HEIGHT] [-o OUTPUTFILE]
FILE" % argv[0]
raise SystemExit

if __name__ == "__main__":
try:
opts, args = getopt.getopt (argv[1:], 'o:h',
['width=', 'height=', 'output=',
'help'])
except getopt.GetoptError:
usage ()
output = None
width = None
height = None
for o, a in opts:
if o in ('-o', '--output'):
output = str (a)
elif o == '--width':
width = int (a)
elif o == '--height':
height = int (a)
elif o in ('-h', '--help'):
usage ()
if len (args) == 0:
usage ()
file = args[0]

if not exists (file):
usage ()

svg = rsvg.Handle (file = file)

if not output:
if file[-4:] == ".svg":
file = file[:-4]
output = "%s.png" % file
base = "%s%d.png"
i = 1
while exists (output):
output = base % (file, i)
i += 1

if width == 0 and height == 0:
width = svg.props.width
height = svg.props.width
elif width != 0:
ratio = float (width) / svg.props.width
height = int (ratio * svg.props.height)
elif height != 0:
ratio = float (height) / svg.props.height
width = int (ratio * svg.props.width)

surface = cairo.ImageSurface (cairo.FORMAT_ARGB32, width, height)
cr = cairo.Context (surface)

wscale = float (width) / svg.props.width
hscale = float (height) / svg.props.height

cr.scale (wscale, hscale)

svg.render_cairo (cr)

surface.write_to_png (output)
#

Pas besoin d'explications, l'usage étant assez simple:
svntopng [--width largeurenpx] [--height hauteurenpx] [-o nomfichiersortie]
nomfichierentree

Sinon sans utiliser imagemagick, il ne te reste plus qu'a lire de la doc
(plein ^^) et parcourir le svg via pour en dessiner un png, mais la je ne
saurai pas t'aider plus :(
Tu peux partir d'ici : http://www.libpng.org/pub/png/pngdocs.html

a+
Avatar
Antoine
Aurelien Lebrun wrote :

"Antoine" a écrit dans le message de
news:
Bonsoir,

je recherche une solution pour convertir en php des images svg en
images png avec les
contraintes suivantes :

- le serveur n'a pas et ne peut pas avoir imagemagick d'installé
- idéalement, la conversion devrait être capable de préserver
l'anticrénelage des svg

Merci d'avance,
Antoine




Un solution simple si tu as les packages python installés sur ton
serveur est d'executer via php ce script assez sympatique fait par
un français:



J'ai !

<snip>

Pas besoin d'explications, l'usage étant assez simple:
svntopng [--width largeurenpx] [--height hauteurenpx] [-o
nomfichiersortie] nomfichierentree



J'ai pris bonne note de tout ça.

Sinon sans utiliser imagemagick, il ne te reste plus qu'a lire de
la doc (plein ^^)



Oui, plein plein.

et parcourir le svg via pour en dessiner un png,
mais la je ne saurai pas t'aider plus :(
Tu peux partir d'ici : http://www.libpng.org/pub/png/pngdocs.html



Un grand merci, Aurélien, pour cette piste que je vais tester dès demain.

Bonne fin de week-end à tous,
Antoine