Browse Source

SVG est une image comme les autres : ajoute le support pour l'upload de SVG

issue_4494
cedric@yterium.com 3 years ago
parent
commit
ca8358ad60
  1. 2
      action/ajouter_documents.php
  2. 2
      action/tourner.php
  3. 1
      base/typedoc.php
  4. 7
      inc/documents.php
  5. 2
      inc/vignette.php
  6. 5
      medias_administrations.php
  7. 22
      metadata/image.php
  8. 37
      metadata/svg.php
  9. 4
      paquet.xml

2
action/ajouter_documents.php

@ -517,7 +517,7 @@ function verifier_taille_document_acceptable(&$infos) {
if (@file_exists($img) and $img !== $infos['fichier']) {
spip_unlink($infos['fichier']);
@rename($img, $infos['fichier']);
$size = @getimagesize($infos['fichier']);
$size = @spip_getimagesize($infos['fichier']);
$infos['largeur'] = $size[0];
$infos['hauteur'] = $size[1];
$infos['taille'] = @filesize($infos['fichier']);

2
action/tourner.php

@ -92,7 +92,7 @@ function action_tourner_post($id_document, $angle) {
deplacer_fichier_upload($res, $dest);
} else {
$dest = $src;
$size_image = @getimagesize($dest);
$size_image = @spip_getimagesize($dest);
$largeur = $size_image[0];
$hauteur = $size_image[1];
}

1
base/typedoc.php

@ -24,6 +24,7 @@ $tables_images = array(
// Autres images (peuvent utiliser le tag <img>)
'bmp' => 'BMP',
'svg' => 'SVG',
);
// Multimedia (peuvent utiliser le tag <embed>)

7
inc/documents.php

@ -129,11 +129,11 @@ function vignette_automatique($img, $doc, $lien, $x = 0, $y = 0, $align = '', $c
} else {
$f = charger_fonction('vignette', 'inc');
$img = $f($e, false);
$size = @getimagesize($img);
$size = @spip_getimagesize($img);
$img = "<img src='$img' " . $size[3] . ' />';
}
} else {
$size = @getimagesize($img);
$size = @spip_getimagesize($img);
$img = "<img src='$img' " . $size[3] . ' />';
}
// on appelle image_reduire independamment de la presence ou non
@ -180,8 +180,7 @@ function vignette_automatique($img, $doc, $lien, $x = 0, $y = 0, $align = '', $c
*/
function image_du_document($document, $connect = null) {
if ($e = $document['extension']
and isset($GLOBALS['meta']['formats_graphiques'])
and (strpos($GLOBALS['meta']['formats_graphiques'], $e) !== false)
and in_array($e, formats_image_acceptables())
and (!test_espace_prive() or $GLOBALS['meta']['creer_preview'] == 'oui')
and $document['fichier']
) {

2
inc/vignette.php

@ -63,7 +63,7 @@ function inc_vignette_dist($ext, $size = true, $loop = true) {
}
$largeur = $hauteur = 0;
if ($v and $size = @getimagesize($v)) {
if ($v and $size = @spip_getimagesize($v)) {
$largeur = $size[0];
$hauteur = $size[1];
}

5
medias_administrations.php

@ -200,6 +200,11 @@ function medias_upgrade($nom_meta_base_version, $version_cible) {
// ajout de vtt
array('creer_base_types_doc')
);
$maj['1.4.0'] = array(
// update de SVG
array('creer_base_types_doc')
);
include_spip('base/upgrade');
include_spip('base/medias');
maj_plugin($nom_meta_base_version, $version_cible, $maj);

22
metadata/image.php

@ -17,7 +17,7 @@ if (!defined('_ECRIRE_INC_VERSION')) {
function metadata_image_dist($fichier) {
$meta = array();
if ($size_image = @getimagesize($fichier)) {
if ($size_image = @spip_getimagesize($fichier)) {
$meta['largeur'] = intval($size_image[0]);
$meta['hauteur'] = intval($size_image[1]);
$meta['type_image'] = decoder_type_image($size_image[2]);
@ -36,21 +36,25 @@ function metadata_image_dist($fichier) {
// https://code.spip.net/@decoder_type_image
function decoder_type_image($type, $strict = false) {
switch ($type) {
case 1:
case IMAGETYPE_GIF:
return 'gif';
case 2:
case IMAGETYPE_JPEG:
return 'jpg';
case 3:
case IMAGETYPE_PNG:
return 'png';
case 4:
case IMAGETYPE_SWF:
return $strict ? '' : 'swf';
case 5:
case IMAGETYPE_PSD:
return 'psd';
case 6:
case IMAGETYPE_BMP:
return 'bmp';
case 7:
case 8:
case IMAGETYPE_TIFF_II:
case IMAGETYPE_TIFF_MM:
return 'tif';
case IMAGETYPE_WEBP:
return 'webp';
case IMAGETYPE_SVG:
return $strict ? '' : 'svg';
default:
return '';
}

37
metadata/svg.php

@ -34,52 +34,23 @@ include_spip('inc/autoriser');
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');
$texte = spip_file_get_contents($file);
$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;
}
}
}
ecrire_fichier($file, $new);
}
}
$meta['largeur'] = $width;
$meta['hauteur'] = $height;
return $meta;
$metadata = charger_fonction('image', 'metadata');
return $metadata($file);
}

4
paquet.xml

@ -1,11 +1,11 @@
<paquet
prefix="medias"
categorie="multimedia"
version="2.22.1"
version="2.23.0"
etat="stable"
compatibilite="[3.3.0-dev;3.3.*]"
logo="prive/themes/spip/images/portfolio-32.png"
schema="1.3.6"
schema="1.4.0"
>
<nom>Medias</nom>

Loading…
Cancel
Save