2010-09-02 12 views
6

Ho bisogno dello stesso output di Inkscape e Imagick.Imagick non rende correttamente l'opacità svg

Questo è il risultato previsto, esportato da Inkscape.

corect image

Tuttavia, il codice PHP sotto emette il seguente risultato difettoso.

wrong image

codice PHP: Codice

<?php 
$im = new Imagick(); 

$im->setResolution(400,400); 
$im->setBackgroundColor(new ImagickPixel('transparent')); 
$im->readImageBlob(str_replace(array("color1", "color2"), array("yellow", "blue"), file_get_contents("img.svg"))); 

$im->setImageFormat("png"); 
header("Content-type: image/png"); 
echo $im; 
?> 

SVG:

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="400" height="400"> 
<rect width="100%" height="100%" fill="green" /> 
<path d="M250 150 L150 350 L350 350 Z" opacity="0.9" fill="color1" /> 
<path d="M150 50 L50 250 L250 250 Z" opacity="0.9" fill="color2" /> 
</svg> 
+0

Perché hai bisogno di usare Imagick? È più facile da fare con i veri programmi SVG. – jmz

+0

Ho provato su Windows 7 64bit 2.3.0 stesso problema. Su Linux con 3.1 funziona come dovrebbe. – RedRoosterMobile

risposta

0

Questo è già stato risolto nella versione corrente di Imagick.

1

Quale versione di PHP e ImageMagick stai correndo? Si prega di condividere l'output rilevante di phpinfo(). Potrebbe lo this ImageMagick bug influenzarti? O se non sei aggiornato, un altro bug di ImageMagic potrebbe influenzarti?

EDIT: Non ho un accesso facile a un server con le librerie ImageMagick di PHP installate al momento, ma se ne trovo una, testerò il codice fornito e pubblicherò i risultati.

EDIT2: Sembra others have the same issue, a meno che il post sul forum era anche la tua ...

Secondo this forum post, si potrebbe provare:

$im->setImageFormat("png32"); 

Una persona ha riferito che ha funzionato, ma un altro ha detto no ...

+0

versione PHP => 5.3.2-1ubuntu4.2 versione modulo imagick => 2.1.1-rc1 –

+0

@ Jan: Grazie. Ho postato qualche altro suggerimento. È questo il PHP/imagick che è stato installato tramite 'apt-get' di Ubuntu? Quale versione di Ububtu? Posso installare una macchina virtuale e provarla per te dalla mia parte. Sono spesso in [la chat room di PHP] (http://chat.meta.stackoverflow.com/rooms/60/php) se vuoi parlare di questo attraverso. – Josh

+0

io uso ubuntu 10.04 lynx lucido, imagick e php sono stati installati da synaptic (apt frontend). L'ho testato anche su hosting con PHP versione 5.3.3 e modulo imagick versione 2.3.0 –

0

Inkscape utilizza la proprietà opacity supportata non ubiquitariamente. Utilizzare invece fill-opacity e stroke-opacity.

+0

Degno di nota, ma ho provato a sostituire l'opacità con opacità di riempimento e non fa alcuna differenza in questo esempio. – JMacArthur