Subversion Repositories eFlore/Projets.eflore-projets

Compare Revisions

Ignore whitespace Rev 267 → Rev 268

/trunk/services/modules/0.1/chorodep/cartes/TaxonsCartes.php
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];