2012-06-18 17 views
10

Tengo un problema con el plugin de exportación de raphaeljs (https://github.com/ElbertF/Raphael.Export). en un elemento de ruta Uso el atributo fill y como fuente doy una URL de imagen para completar. Pero cuando lo exporto a SVG, veo una definición de elemento de ruta, pero cuando lo exporto a PNG, no lo veo de nuevo.Error al exportar raphaeljs a jpg con fondo de ruta como imagen

Así que en mi aplicación que añadir una attr-path elemento de la siguiente manera:

paper.path("M 195 10 L 300 L 195 z").attr({'stroke-width': 0,'fill': 'url(images/alfen/02/murek.png)'}); 

y exportar esto con paper.toSVG()

y en mi SVG puedo encontrar un camino:

<path transform="matrix(1,0,0,1,0,0)" fill="url(images/alfen/02/murek.png)" stroke="#000" d="M203,183.94389438943895L948,183.94389438943895L948,195L203,195Z" stroke-width="0"></path> 

Pero cuando transformo esto a PNG con:

<?php 
    $json  = $_POST['json']; 
    $output  = str_replace('\"','"',$json); 
    $filenameSVG = 'test'; 

    file_put_contents("$filenameSVG.svg", $output); 

    $konwert = "convert $filenameSVG.svg $filenameSVG.jpg"; 

    system($konwert); 

No puedo encontrar este camino cumplido con mi historial. ¿Alguien puede ayudar?

+0

Una estimación rápida: o bien proporcionar la URL completa (con nombre de dominio), o si eso no funciona, una ruta local de la imagen (en el atributo 'fill')? 'convert' no conoce su sitio web, dominio ni nada al respecto. – Wrikken

+0

en mi svg también tengo ' ' y esto se convierte adecuadamente – gerpaick

+0

Sí, y no se inicia con' url ('allí, y que se puede interpretar como una ruta local Pero. ¿Por qué discutir? Prueba ¡Ya te cuento! :) – Wrikken

Respuesta

1

Si puede obtener la salida correcta para svg pero no funciona en php, hay varias cosas que debe verificar.

  • Como una comprobación de validez asegurarse de que su JSON malformación $ _POST [ 'json'] no va a regresar
  • La siguiente línea en su php me confunde: $output = str_replace('\"','"',$json);
  • Podría ser que el JSON que estés regresar es un objeto único, pero todavía no estoy seguro de por qué está buscando todo el archivo y no está buscando un objeto anidado específico como $output = str_replace('\"','"',$json['filename_and_path']); y si el JSON que devuelve es una sola línea, puede haber mejores formas de manejarlo - - es decir, publicarlo como una cadena o incluso devolver cada uno con una matriz y un índice.

Y para estas cosas:

$konwert = "convert $filenameSVG.svg $filenameSVG.jpg"; 
system($konwert); 

El usuario no puede ser la alimentación system() con variables válidas en su cadena. Para estar seguro de que recomiendo concatenando correctamente la cadena como:

$konwert = "convert".$filenameSVG.".svg ".$filenameSVG.".jpg"; 

También vas a necesitar la ruta absoluta al archivo en el servidor para ejecutar el comando o de lo contrario no se encuentra el archivo. El código $konwert = "convert".$filenameSVG.".svg ".$filenameSVG.".jpg"; obviamente solo funcionará para usted si esos dos archivos están ubicados en el directorio raíz de su proyecto.

Yo tampoco creo que usted debe utilizar system() en este caso. Según entiendo, debería usar passthru() para tratar con binarios de imágenes. También está exec(), pero en realidad, creo que lo que necesita aquí es passthru(). Ver: http://www.php.net/manual/en/function.passthru.php

0

Parece que su ruta solo está configurando un contenedor para la imagen. ¿No podría usar:

paper.image('images/alfen/02/murek.png', 50, 50, 300, 195); 

Parece que es más confiable. Puede usarlo como su iniciador y agregar los caminos que desee. He tenido problemas al utilizar una imagen como relleno porque parece que nunca se renderizan donde yo esperaba.

Y todavía se puede utilizar: paper.toSVG()

que era capaz de conseguir que la versión para convertir sin ningún problema.

Cuestiones relacionadas