2011-01-06 21 views
8

Próbuję tworzyć grafiki wektorowe w PHP. Ive tried Cairo i nie udało mi się go uruchomić. Rozumiem, że imageMagick ma funkcję wektorową, ale dokumentacja na php.net jest bardzo słaba, czy ktoś może mnie poprowadzić we właściwym kierunku? Pomysły mają umożliwić zapisanie grafiki na EPS. Muszę też móc używać różnych czcionek do wypisywania tekstu.Tworzenie grafiki wektorowej za pomocą PHP

+0

Czy rozważałeś użycie formatu PDF zamiast EPS? (Generalnie istnieje większe wsparcie dla tworzenia plików PDF.) –

+0

nope plik będzie wymagał edycji w programie Adobe Illustrator. Nie jestem pewien, czy to możliwe z plikiem PDF. Zamierzam zaglądać do tego z SVG, którego używa Kair, ale nie mogę znaleźć dobrej dokumentacji na opakowaniu PHP. Mam Cairo do zainstalowania, ale nie wiem, jak zacząć tworzyć obraz. PHP po prostu przepuszcza wszędzie błędy – jef2904

+0

Nie potrzebujesz wrappera do svg z php. Musisz tylko podać poprawny "header" i wydrukować svg tak jak w HTML-u. – zzzzBov

Odpowiedz

0
+0

Ok, zajrzałem do obu linków, a drugi sprawia, że ​​wydaje mi się niemożliwym zrobienie tego, co chcę z Imagemagick i magickwand. Zgadnij Zrzuć to i spróbuj zajrzeć do cairo – jef2904

+0

To jest nieprawidłowe i nie powinno zawierać pozytywnej odpowiedzi. Imagemagick rasteryzuje obrazy wektorowe, ale nie wektoryzuje obrazów rastrowych. – CommonKnowledge

+0

Tak Imagemagick może tworzyć MVG. Nigdy nie napisałem, że imagemagick potrafi wektoryzować rastry. Skąd to wybierzesz? Niezależnie od ... rolleyes ... – Diablo

4

Chociaż szukasz stworzyć EPS Chciałbym jeszcze mieć na celu tworzenie PDF. PDF są w pełni edytowalne w jakiejkolwiek poważnej pakietu: Adobe Illustrator, Corel Draw, Xara Pro itp

TCPDF działa dobrze i tam jest kilka próbek kodu w tym czcionek oraz wsparcie dla obrazów wektorowej EPS i ai wyjście do PDF

EPS/AI przykład http://www.tcpdf.org/examples/example_032.pdf

Wszystkie przykłady i php kod http://www.tcpdf.org/examples.php

2

wiem co to jest dość stare pytanie, ale miałem jakiś problem kilka tygodni temu i rozwiązać go dla siebie, nadzieję, że ta odpowiedź pomaga kogoś. Biblioteka w Kairze posiada powiązania PHP, ale ma również kilka błędów, które przerywają konwersję między formatami - zapomnij o tym. Na początku potrzebujemy czegoś rodzimego. Spójrz na format SVG - otwórz obraz wektorowy w edytorze (korzystam z Inkscape) i zapisz go jako plik SVG. Po tym możesz go zmienić za pomocą php tak jak plik xml. Dodawanie niestandardowych czcionek w 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, mamy SVG z potrzebnych czcionek, ale musimy EPS. Do konwersji SVG do EPS użyłem Inkscape z prostego skryptu bash svg2eps.sh:

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

można nazwać to z PHP:

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

Inne wskazówki:

1) Zainstaluj najnowszą wersję Inkscape. Testowałem go na openSuse 12.3 - działa świetnie.

2) Zainstaluj wszystkie czcionki niestandardowe w czcionkach systemowych.

0

Nie mogę ci powiedzieć, jak tworzyć obrazy wektorowe w PHP, ale może chcesz nieco inne podejście - tworzyć obrazy rastrowe w PHP i konwertować je do wektorów? Działa dobrze w przypadku białych obrazów o pewności co do koloru.

<?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); 
Powiązane problemy