J'essaye de convertir un SVG en PNG mais je suis troublé avec lui.Imagick rendant une image noire
Avec ce lien, vous pouvez télécharger un SVG et le fichier affichera le résultat: http://clound.com.br/labs/svg/export/imagick/index.php
Le SVG que je suis en train de télécharger est ceci: http://clound.com.br/labs/svg/export/images/cover.svg
Mon code sur la page de téléchargement est la suivante:
<?php
if ($_FILES){
$target_path = 'output/'. basename($_FILES['uploadedfile']['name']);
$mime = $_FILES['uploadedfile']['type'];
if ($_FILES['uploadedfile']['error']){
die('Error on upload.');
}
if (move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)){
echo '<embed style="border:solid 1px gray;" src="'.$target_path.'" type="image/svg+xml" pluginspage="http://www.adobe.com/svg/viewer/install/" /><br/>';
$im = new Imagick();
$svg = file_get_contents($target_path);
/*loop to color each state as needed, something like*/
$dom = new DOMDocument();
$dom->loadXML($svg);
removeFillRule($dom, 'g');
removeFillRule($dom, 'mask');
removeFillRule($dom, 'path');
removeFillRule($dom, 'image');
$svg = $dom->saveXML();
echo $svg;
$im->readImageBlob($svg);
/*png settings*/
$im->setImageFormat("png32");
$im->writeImage('output/image.png');/*(or .jpg)*/
$im->clear();
$im->destroy();
echo '<img src="output/image.png"/><br/>';
}
else
{
echo "There was an error uploading the file, verify permission and try again!";
}
}
function remove_children(&$node) {
while ($node->firstChild) {
while ($node->firstChild->firstChild) {
remove_children($node->firstChild);
}
$node->removeChild($node->firstChild);
}
}
function removeFillRule($dom, $element){
$path = $dom->getElementsByTagName($element);
foreach ($path as $key=> $value) {
$path->item($key)->removeAttribute('fill-rule');
}
}
Ma version sur le serveur est la suivante:
ImageMagick 6.7.6-8 2012-05-02 Q16
http://www.imagemagick.org
Et avez-vous une erreur ou autre chose? – j0k
Non, vous pouvez essayer de télécharger les images que j'ai posté sur le lien ... Je pense que quelque chose ne va pas avec mon code source SVG ... Il a été généré par BonsaiJS mais si vous essayez de sauvegarder cette image http : //clound.com.br/labs/svg/export/images/cover.svg il ne montre rien ... –
J'ai essayé votre code avec ce fichier svg http://www.w3schools.com/svg/ circle1.svg obtenir une erreur de la fonction removeChild() où l'utilisez-vous? – Mateusz