21,7 → 21,7 |
const CODE_REFTAX_DEFAUT = 'bdtfx'; |
const TYPE_ID_DEFAUT = 'nn'; |
const CARTE_DEFAUT = 'france_02'; |
const FORMAT_DEFAUT = '550'; |
const FORMAT_DEFAUT = '587x550'; |
const VERSION_DEFAUT = '+'; |
const MIME_SVG = 'image/svg+xml'; |
const MIME_PNG = 'image/png'; |
28,6 → 28,7 |
const PRESENCE_CHOROLOGIE = '1'; |
|
private $config = array(); |
private $convertisseur = ''; |
private $cheminCartesBase = ''; |
private $formatsSupportes = array(self::MIME_SVG, self::MIME_PNG); |
private $reftaxSupportes = array(self::CODE_REFTAX_DEFAUT); |
50,6 → 51,7 |
$this->Bdd = $conteneur->getBdd(); |
$this->tableOntologie = $conteneur->getParametre('bdd_table_ontologies'); |
$this->config = $conteneur->getParametre('Cartes'); |
$this->convertisseur = $this->config['convertisseur']; |
$this->tableMeta = $conteneur->getParametre('bdd_table_meta'); |
$this->tableOntologie = $conteneur->getParametre('bdd_table_ontologies'); |
$this->cheminCartesBase = $this->config['chemin']; |
401,21 → 403,37 |
|
private function convertirEnPNG($svg) { |
$png = null; |
if (extension_loaded('imagick')) { |
$png = $this->convertirEnPNGAvecImageMagick($svg); |
if (isset($this->convertisseur)) { |
if ($this->convertisseur == 'imagick') { |
if (extension_loaded('imagick')) { |
$png = $this->convertirEnPNGAvecImageMagick($svg); |
} else { |
$message = "Impossible de générer l'image sur le serveur. Extenssion ImageMagick abscente."; |
$code = RestServeur::HTTP_CODE_ERREUR; |
throw new Exception($message, $code); |
} |
} else if ($this->convertisseur == 'rsvg') { |
$png = $this->convertirEnPNGAvecRsvg($svg); |
} else { |
$message = "Le convertisseur indiqué '{$this->convertisseur}' ne fait pas parti de la liste ". |
"des convertisseurs disponibles : imagick, rsvg."; |
$code = RestServeur::HTTP_CODE_ERREUR; |
throw new Exception($message, $code); |
} |
} else { |
$message = "Impossible de générer l'image sur le serveur. Extenssion ImageMagick abscente."; |
$message = "Veuillez indiquer le convertisseur de svg à utiliser pour le service."; |
$code = RestServeur::HTTP_CODE_ERREUR; |
throw new Exception($message, $code); |
} |
return $svg; |
return $png; |
} |
|
private function convertirEnPNGAvecImageMagick($svg) { |
$convertisseur = new Imagick(); |
$convertisseur->setBackgroundColor(new ImagickPixel('transparent')); |
$convertisseur->readImageBlob($svg); |
$convertisseur->setImageFormat("png24"); |
$convertisseur->resizeImage($this->imgLargeur, $this->imgHauteur, imagick::FILTER_LANCZOS, 0); |
$convertisseur->setImageFormat('png32'); |
$convertisseur->resizeImage($this->imgLargeur, $this->imgHauteur, imagick::FILTER_LANCZOS, 0, true); |
$png = $convertisseur->getImageBlob(); |
$convertisseur->clear(); |
$convertisseur->destroy(); |
422,6 → 440,27 |
return $png; |
} |
|
private function convertirEnPNGAvecRsvg($svg) { |
$idFichier = md5($svg); |
$fichierPng = $this->config['cache']['stockageChemin'].$idFichier.'.png'; |
$fichierSvg = $this->config['cache']['stockageChemin'].$idFichier.'.svg'; |
file_put_contents($fichierSvg, $svg); |
$rsvg = exec("rsvg-convert $fichierSvg -d 75 -p 75 -o $fichierPng"); |
$this->indexerFichierPng($fichierPng); |
$png = file_get_contents($fichierPng); |
return $png; |
} |
|
private function indexerFichierPng($fichierPng) { |
$img = imagecreatefrompng($fichierPng); |
imagetruecolortopalette($img, false, 32); |
imagealphablending($img, false); |
$alpha = imagecolorallocatealpha($img, 0, 0, 0, 127); |
imagefill($img, 0, 0, $alpha); |
imagesavealpha($img, true); |
imagepng($img, $fichierPng, 9, PNG_ALL_FILTERS); |
} |
|
public function getParametreTableau($cle) { |
$tableau = array(); |
$parametre = $this->config[$cle]; |