File "svg.php"
Full path: /home/argothem/www/v4_old/fichiers_obsoletes_20220627_043105/plugins-dist/medias/metadata/svg.php
File size: 2.44 KB
MIME-type: text/x-php
Charset: utf-8
<?php
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
* Copyright (c) 2001-2020 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
* Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
\***************************************************************************/
/**
* Informations meta d'un SVG
*
* @package SPIP\Medias\Metadata
**/
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
include_spip('inc/autoriser');
/**
* Déterminer les dimensions d'un svg, et enlever ses scripts si nécessaire
*
* On utilise safehtml qui n'est pas apropriée pour ça en attendant mieux
* cf http://www.slideshare.net/x00mario/the-image-that-called-me
* http://heideri.ch/svgpurifier/SVGPurifier/index.php
*
* @param string $file
* @return array Tableau (largeur, hauteur)
*/
function metadata_svg_dist($file) {
$meta = array();
$texte = spip_file_get_contents($file);
// Securite si pas autorise : virer les scripts et les references externes
// sauf si on est en mode javascript 'ok' (1), cf. inc_version
if ($GLOBALS['filtrer_javascript'] < 1
and !autoriser('televerser', 'script')
) {
include_spip('inc/texte');
$new = trim(safehtml($texte));
// petit bug safehtml
if (substr($new, 0, 2) == ']>') {
$new = ltrim(substr($new, 2));
}
if ($new != $texte) {
ecrire_fichier($file, $texte = $new);
}
}
$width = $height = 150;
if (preg_match(',<svg[^>]+>,', $texte, $s)) {
$s = $s[0];
if (preg_match(',\WviewBox\s*=\s*.\s*(\d+)\s+(\d+)\s+(\d+)\s+(\d+),i', $s, $r)) {
$width = $r[3];
$height = $r[4];
} else {
// si la taille est en centimetre, estimer le pixel a 1/64 de cm
if (preg_match(',\Wwidth\s*=\s*.(\d+)([^"\']*),i', $s, $r)) {
if ($r[2] != '%') {
$width = $r[1];
if ($r[2] == 'cm') {
$width <<= 6;
}
}
}
if (preg_match(',\Wheight\s*=\s*.(\d+)([^"\']*),i', $s, $r)) {
if ($r[2] != '%') {
$height = $r[1];
if ($r[2] == 'cm') {
$height <<= 6;
}
}
}
}
}
$meta['largeur'] = $width;
$meta['hauteur'] = $height;
return $meta;
}