2013-07-05 32 views
5

ở phía máy chủ Tôi có một mã nguồn SVG XML được tạo. Điều này sẽ được thay đổi thành hình ảnh để cung cấp bản tải xuống PNG (hoặc JPG) từ mã XML SVG. Tìm kiếm trên web trong một thời gian dài, tôi chỉ tìm thấy giải pháp này bằng ImageMagick. Convert SVG image to PNG with PHP Nhưng tôi không có quyền truy cập vào thư viện ImageMagick vì vậy tôi cần một cách khác để chuyển đổi Mã SVG XML thành hình ảnh bitmap.Tạo PNG từ SVG XML mà không có ImageMagick

Có ai có ý tưởng không?

Brw: Nó không phải là một tùy chọn để tiết kiệm mà svg thực thi một nhị phân hoặc kịch bản trên hệ điều hành để chuyển đổi.

Cảm ơn bạn.

+0

Bạn có nghĩa là bạn tạo tập tin SVG lên một cách nhanh chóng, và cần phải phục vụ một PNG? Bạn có thể cung cấp thêm chi tiết? Bạn đang cố giải quyết vấn đề qua trình duyệt? – andy256

+0

Inkscape có thể xuất SVG dưới định dạng PNG (lưu dưới dạng dường như không hoạt động), nhưng điều này dường như không đáp ứng được các yêu cầu khi tôi hiểu chúng. – andy256

+0

Bạn đã xem [Batik] (http://xmlgraphics.apache.org/batik/), [Cách chuyển đổi SVG thành PNG khi đang di chuyển] (http://stackoverflow.com/questions/8167977/how -to-convert-svg-into-png-on-the-fly), và [Có thư viện Java nào đó để chuyển đổi .svg sang .png hoặc .jpg tại mã?] (http://stackoverflow.com/questions/ 6610792/là-có-một số-java-thư viện-cho-chuyển đổi-svg-to-png-hoặc-jpg-at-code)? Họ sử dụng java, nhưng bạn sẽ có thể móc nó lên. – andy256

Trả lời

0

Bạn cần sử dụng thư viện batik. Tải xuống, đặt ở đâu đó trong dự án của bạn. Sau đó, trong php gọi lệnh batik sử dụng hàm shell_exec(). Nó sẽ mất vài giây và chuyển đổi bạn svg sang png.

Ví dụ: -

outputfile ='path where you want to lace png' 
$tempSVG_filename = '/var/www' . $baseUrl . '/png/temp.svg'; 
$tempSVG_handle = fopen($tempSVG_filename, 'w+'); 
fwrite($tempSVG_handle, $YourSVG); 
fclose($tempSVG_handle); 
$mimetype = 'image/png'; 
$width = '6000'; 

$result = shell_exec('java -jar /var/www/svgtopng/batik-1.7/batik-rasterizer.jar -m ' . $mimetype . ' -d ' . $outputfile . ' -w ' . $width . ' ' . $tempSVG_filename . ' 2>&1'); 
unlink($tempSVG_filename); 
+0

Cảm ơn bạn vì câu trả lời đó, nhưng nó không phù hợp với câu hỏi của tôi, bởi vì: 'Không phải là một tùy chọn để lưu svg đó. trên hệ điều hành để chuyển đổi'. Nhưng chính xác đây là gợi ý của bạn. –

Các vấn đề liên quan