Come leggere un file SVG con una determinata dimensione usando PHP Imagick?

Ho il codice seguente:

$image = new Imagick(); $image->setBackgroundColor(new ImagickPixel('green')); $image->setSize(20,20); $image->readImageBlob(file_get_contents('./some/path/image.svg')); 

Carica l' SVG bene ma il setSize viene completamente ignorato. Rende a 550×100, secondo la sua definizione:

 <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="550px" height="100px" viewBox="0 0 550 100" enable-background="new 0 0 550 100" xml:space="preserve"> 

Qualcuno ha esperienza nell'get i file SVG per giocare con setSize ?

La function setSize () è solo per i formati image grezzi, non per SVG. Devi usare scaleImage () invece …

 $image = new Imagick(); $image->setBackgroundColor(new ImagickPixel('green')); $image->readImage('./some/path/image.svg'); $image->scaleImage(20,20); 

A proposito, functionrà benissimo se ridimensionate l'image SVG a una dimensione più piccola (come in questo caso), perché per tutti quelli che invece lo stanno facendo, è necessario fare un'altra cosa. Se cambi la dimensione come sopra, apparirà frastagliato e pixelato. In tal caso è necessario utilizzare setResolution () per aumentare la risoluzione in questo modo:

 $image = new Imagick(); $image->setResolution(2000,2000); $image->setBackgroundColor(new ImagickPixel('green')); $image->readImage('./some/path/image.svg'); $image->scaleImage(1000,1000); 

I valori effettivi per setResolution () dovrebbero essere calcolati come 72 * (final_size / original_size) (beh, penso che sia la formula corretta comunque). Ma qualsiasi valore che sia alless tale valore o superiore functionrà bene.

Per quanto riguarda gli SVG con scalatura verticale: Con la mia configuration corrente ( ImageMagick 6.7.8-1 2012-10-03 Q16 con SVG rw+ ) non è ansible scalare un SVG salvato a 90×30 pixel anche con setResolution() e setImageResolution() . Se invece ri-salva l'SVG con una dimensione maggiore, come 9000×3000, posso tranquillamente ridimensionarlo con le istruzioni sopra riportte.