2012-06-18 8 views
10

Tôi gặp sự cố với plugin xuất raphaeljs (https://github.com/ElbertF/Raphael.Export). trong phần tử đường dẫn Tôi sử dụng thuộc tính fill và làm nguồn tôi cung cấp url hình ảnh để chèn lấp. Nhưng khi tôi xuất nó sang SVG, tôi thấy định nghĩa phần tử đường dẫn, nhưng khi tôi xuất nó sang PNG, tôi không thấy lại.Lỗi khi xuất raphaeljs thành jpg với nền đường dẫn như hình ảnh

Vì vậy, trong ứng dụng của tôi, tôi thêm một attr-path yếu tố như thế này:

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

và tôi xuất khẩu này với paper.toSVG()

và SVG của tôi, tôi tìm thấy một con đường:

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

Nhưng khi tôi chuyển đổi thành PNG với:

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

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

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

    system($konwert); 

Tôi không thể tìm thấy đường dẫn này được đáp ứng với nền của tôi. Ai có thể giúp được không?

+0

Dự đoán nhanh: cung cấp url đầy đủ (có tên miền) hoặc nếu không thành công, đường dẫn cục bộ tới hình ảnh (trong thuộc tính 'điền')? 'convert' không biết trang web, tên miền của bạn hay bất kỳ thứ gì về nó. – Wrikken

+0

trong svg của tôi, tôi cũng có ma trận ' 'và điều này được chuyển đổi đúng cách – gerpaick

+0

Có, và nó không bắt đầu bằng' url ('ở đó, và nó có thể được hiểu là đường dẫn cục bộ. thử nghiệm tôi nói ya! :) – Wrikken

Trả lời

1

Nếu bạn có thể nhận được kết quả chính xác cho svg nhưng nó sẽ không png trong php có một số điều bạn sẽ cần phải kiểm tra.

  • Là một kiểm tra sanity chắc chắn $ _POST [ 'json'] không trở về json bị thay đổi của bạn
  • Dòng tiếp theo trong chương trình PHP confuses me: $output = str_replace('\"','"',$json);
  • Có thể là các json bạn trở về là một đối tượng duy nhất, nhưng tôi vẫn không chắc tại sao bạn đang tìm kiếm toàn bộ tệp và không tìm kiếm một đối tượng lồng nhau cụ thể như $output = str_replace('\"','"',$json['filename_and_path']); và nếu json bạn trả về IS là một dòng, có thể có cách tốt hơn để xử lý nó - - tức là đăng nó dưới dạng một chuỗi hoặc thậm chí trả về mỗi chuỗi với một mảng và chỉ mục.

Và đối với công cụ này:

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

Bạn có thể không được cho ăn system() với các biến có giá trị trong chuỗi của bạn. Để chắc chắn tôi khuyên bạn nên đúng concatenating chuỗi như:

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

Bạn cũng sẽ cần filepath tuyệt đối đến tập tin trên máy chủ của bạn để thực hiện lệnh trên hoặc nếu không nó sẽ không tìm thấy tập tin. Mã số $konwert = "convert".$filenameSVG.".svg ".$filenameSVG.".jpg"; rõ ràng sẽ chỉ hoạt động cho bạn nếu hai tệp đó nằm trong thư mục gốc của dự án của bạn.

Tôi cũng không nghĩ bạn nên sử dụng system() trong trường hợp này. Sự hiểu biết của tôi là bạn nên sử dụng passthru() để xử lý các tệp nhị phân hình ảnh. Ngoài ra còn có exec() nhưng thực sự, tôi nghĩ rằng những gì bạn cần ở đây là passthru(). Xem: http://www.php.net/manual/en/function.passthru.php

0

Dường như đường dẫn của bạn chỉ đang thiết lập vùng chứa cho hình ảnh. Bạn không thể sử dụng:

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

Dường như nó có thể đáng tin cậy hơn. Bạn có thể sử dụng nó như là khởi động của bạn và thêm bất kỳ con đường nào bạn thích với nó. Tôi đã có vấn đề bằng cách sử dụng một hình ảnh như là một điền bởi vì họ dường như không bao giờ làm cho nơi tôi mong đợi họ.

Và bạn vẫn có thể sử dụng: paper.toSVG()

tôi đã có thể nhận được rằng phiên bản để chuyển đổi mà không cần bất kỳ rắc rối.