Post by AntoineBonsoir,
je recherche une solution pour convertir en php des images svg en images png avec les
- 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 <***@segu.in>
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+