2012-06-18 8 views
10

Mam problem z wtyczką eksportu raphaeljs (https://github.com/ElbertF/Raphael.Export). w elemencie ścieżki Używam atrybutu fill i jako źródło podaję adres URL obrazu do wypełnienia. Ale kiedy eksportuję to do SVG, widzę definicję elementu ścieżki, ale kiedy eksportuję ją do PNG, nie widzę ponownie.Błąd w eksporcie raphaeljs do jpg z tłem ścieżki jako obrazkiem

Więc w moim app dodam attr do path elementu tak:

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

i wyeksportować ten z paper.toSVG()

iw moim SVG znajdę ścieżkę:

<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> 

Ale kiedy przekształcam to do PNG za pomocą:

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

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

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

    system($konwert); 

Nie mogę znaleźć ścieżki wypełnionej moim tłem. Czy ktokolwiek może pomóc?

+0

Szybkie przypuszczenie: podaj pełny adres URL (z nazwą domeny) lub, jeśli to nie działa, lokalną ścieżkę do obrazu (w atrybucie "wypełnij")? 'convert' nie zna twojej witryny, domeny ani niczego w tej sprawie. – Wrikken

+0

w moim svg mam również macierz ' 'i jest to poprawnie przekształcone – gerpaick

+0

Tak, i nie zaczyna się od' url ('tam, i może być interpretowane jako ścieżka lokalna.) dlaczego dyskutować? Test Mówię Ci! :) – Wrikken

Odpowiedz

1

Jeśli jesteś w stanie uzyskać poprawne wyjście do svg, ale nie uda ci się przejść do php w php, musisz sprawdzić kilka rzeczy.

  • Jako kontrola poprawności upewnić się, że $ _POST [ „json”] nie wraca zniekształcone json
  • Następna linia w php myli mnie: $output = str_replace('\"','"',$json);
  • To może być to, że jesteś json Powracanie jest pojedynczym obiektem, ale nadal nie jestem pewien, dlaczego przeszukujesz cały plik i nie szukasz konkretnego obiektu zagnieżdżonego, takiego jak $output = str_replace('\"','"',$json['filename_and_path']);, a jeśli json, który zwrócisz, JEST pojedynczą linią, mogą istnieć lepsze sposoby na jej obsłużenie - - tj. opublikuj jako łańcuch lub nawet zwróć każdy z tablicą i indeksem.

A dla tych rzeczy:

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

Nie może być karmienie system() z ważnych zmiennych w ciąg. Aby mieć pewność, polecam prawidłowo łącząc ciąg jak:

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

Będziesz też potrzebował absolutnej filepath do pliku na serwerze, aby wykonać polecenie lub inny nie znajdzie plik. Kod $konwert = "convert".$filenameSVG.".svg ".$filenameSVG.".jpg"; najwyraźniej zadziała, jeśli te dwa pliki znajdują się w katalogu głównym projektu.

Nie sądzę, że powinieneś używać w tym przypadku system(). Rozumiem, że powinieneś używać passthru() do obsługi plików binarnych obrazów. Jest też exec(), ale naprawdę, myślę, że to, czego potrzebujesz, to passthru(). Zobacz: http://www.php.net/manual/en/function.passthru.php

0

Wygląda na to, że twoja ścieżka właśnie tworzy pojemnik dla obrazu. Nie można użyć:

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

Wydaje się, że może to być bardziej wiarygodne. Możesz użyć tego jako startera i dodać ścieżki, które Ci się podobają. Miałem problemy z używaniem obrazu jako wypełnienia, ponieważ nigdy nie wydają się renderować tam, gdzie ich oczekuję.

I nadal można używać: paper.toSVG()

udało mi się dostać tę wersję do konwersji bez żadnych problemów.