2011-01-06 74 views
8

Im tratando de crear gráficos vectoriales en PHP. Lo he intentado en El Cairo y no he podido hacerlo funcionar. Entiendo que imageMagick tiene funcionalidad vectorial, pero la documentación en php.net es muy pobre ¿Puede alguien llevarme en la dirección correcta? La idea es poder guardar el gráfico en EPS. También necesito poder usar diferentes tipos de letra para el texto de salida.Creación de gráficos vectoriales con PHP

+0

¿Ha considerado utilizar PDF en lugar de EPS? (En general, hay más soporte para crear PDF.) –

+0

, básicamente, el archivo debe ser editable a través de Adobe Illustrator. No estoy seguro si eso es posible con un PDF. Voy a ver cómo hacerlo con SVG, que es lo que usa Cairo, pero no puedo encontrar una buena documentación sobre el envoltorio de PHP. Tengo que instalar Cairo pero no sé cómo comenzar a crear una imagen. PHP simplemente pasa por todos los errores – jef2904

+0

no necesitas un contenedor para hacer svg con php. Solo necesita especificar el 'encabezado' correcto e imprimir el svg como lo haría con html. – zzzzBov

Respuesta

0
+0

Ok miré en ambos enlaces y el segundo hace que parezca imposible hacer lo que quiero con Imagemagick y Magickwand. Supongo que lo dejaré caer y más mirar a cairo – jef2904

+0

Esto es incorrecto y no debería tener una respuesta positiva. Imagemagick hace rasterización de imágenes vectoriales, pero no vectoriza imágenes de trama. – CommonKnowledge

+0

Sí Imagemagick puede crear MVG. Nunca escribí imagemagick puede vectorizar rásteres. ¿De dónde escogiste eso? Lo que sea ... rolleyes ... – Diablo

4

A pesar de que está mirando para crear eps yo todavía tienen por objeto crear un PDF. de PDF son totalmente editables en cualquier paquete importante: Adobe Illustrator, Corel Draw, Xara Pro etc

TCPDF funciona bien y hay un montón de ejemplos de código, incluyendo las fuentes y soporte para imágenes vectoriales EPS y AI salida a PDF

eps/ai ejemplo http://www.tcpdf.org/examples/example_032.pdf

todos los ejemplos y código php http://www.tcpdf.org/examples.php

2

sé lo que es bastante vieja pregunta, pero yo tenía algún problema de hace unas semanas y solucionarlo para mí, espero que esta respuesta ayude a alguien. La biblioteca de El Cairo tiene enlaces PHP, pero también tiene algunos errores que rompen la comunicación entre formatos. Olvídalo. Necesitamos algo nativo aquí al comienzo. Mire el formato SVG: abra su imagen vectorial en el editor (uso Inkscape) y guárdela como archivo SVG. Después de eso, puede cambiarlo a través de php al igual que el archivo xml. Adición de fuentes personalizadas en SVG:

$text_path = 'm 100,200' 
$font_name = 'Some_font.ttf'; 
$font_size = '20px'; 
$font = base64_encode('font_file_content'); 
$text = 'Bla bla bla'; 
$font_svg = '<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> 
      <defs> 
      <path d="' . $text_path . '" id="font_id_123"/> 
      <style type="text/css"> 
      <![CDATA[ 
       @font-face { 
       font-family: ' . $font_name . '; 
       src: url("data:font/ttf;charset=utf-8;base64,' . $font . '"); 
      ]]> 
      </style> 
      </defs> 
      <text style="font-family: ' . $font_name . '; font-size: ' . $font_size . ';"> 
      <textPath xlink:href="#font_id_123">' . $text . '</textPath> 
      </text> 
      </svg>'; 

$content = file_get_contents($svg_file);  // $svg_file - your vector image 
$content = substr($content, 0, -6);   // cut last '</svg>' tag from file 
$newContent = $content . $font_svg . '</svg>'; // add font to the end 
file_put_contents($svg_file, $newContent);  // save changes 

Ok, tenemos SVG con las fuentes necesarias, pero necesitamos EPS. Para la conversión de SVG a EPS Solía ​​Inkscape con sencillo svg2eps.sh escritura del golpe:

#!/bin/bash 
inkscape -f $1 -z -T -E $2 

se le puede llamar desde PHP:

exec('/path/to/svg2eps.sh /path/to/in.svg path/to/out.eps'); 

Otros consejos:

1) Instale la última versión de Inkscape. Lo probé en openSuse 12.3 - funciona muy bien.

2) Instale todas las fuentes personalizadas en las fuentes del sistema.

0

No puedo decirle cómo crear imágenes vectoriales en PHP, pero tal vez le gustaría un enfoque un poco diferente: crear imágenes de trama en PHP y convertirlas en vectores? Funciona bien para las imágenes blancas & en color negro, no estoy seguro de las de color.

<?php 
$im = imagecreatetruecolor(500,500); 
//draw something on $im 

imagepng($im, 'image.png'); 


$url = 'http://server.com/image.png'; //change to your server's domain 
$data = json_decode(file_get_contents('http://api.rest7.com/v1/raster_to_vector.php?url=' . $url . '&format=svg')); 

if (@$data->success !== 1) 
{ 
    die('Failed'); 
} 
$vec = file_get_contents($data->file); 
file_put_contents('vectors.svg', $vec); 
Cuestiones relacionadas