Discussion:
Conversion svg -> png en php ?
(trop ancien pour répondre)
Antoine
2008-08-24 08:27:10 UTC
Permalink
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
Aurelien Lebrun
2008-09-06 12:33:15 UTC
Permalink
Post by Antoine
Bonsoir,
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+
Antoine
2008-09-07 17:27:47 UTC
Permalink
Post by Aurelien Lebrun
Post by Antoine
Bonsoir,
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
J'ai !
Post by Aurelien Lebrun
<snip>
svntopng [--width largeurenpx] [--height hauteurenpx] [-o
nomfichiersortie] nomfichierentree
J'ai pris bonne note de tout ça.
Post by Aurelien Lebrun
Sinon sans utiliser imagemagick, il ne te reste plus qu'a lire de
la doc (plein ^^)
Oui, plein plein.
Post by Aurelien Lebrun
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

Continuer la lecture sur narkive:
Loading...