123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 |
- <?php
- /***************************************************************************\
- * SPIP, Systeme de publication pour l'internet *
- * *
- * Copyright (c) 2001-2014 *
- * 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. *
- \***************************************************************************/
- if (!defined("_ECRIRE_INC_VERSION")) return;
- /**
- * Tourner un document
- *
- * http://code.spip.net/@action_tourner_dist
- *
- * lorsque les arguments sont passes dans arg en GET :
- * id_document-angle
- *
- * @param int $id_document
- * @param int $angle
- * angle de rotation en degre>0
- * @return void
- */
- function action_tourner_dist($id_document=null, $angle=null) {
- if (is_null($id_document) OR is_null($angle)){
- $securiser_action = charger_fonction('securiser_action', 'inc');
- $arg = $securiser_action();
- if (!preg_match(",^\W*(\d+)\W?(-?\d+)$,", $arg, $r)) {
- spip_log("action_tourner_dist $arg pas compris");
- }
- else{
- array_shift($r);
- list($id_document,$angle) = $r;
- }
- }
- if ($id_document AND autoriser('modifier','document',$id_document))
- action_tourner_post($id_document,$angle);
- }
- /**
- * Tourner un document
- *
- * http://code.spip.net/@action_tourner_post
- *
- * @param int $id_document
- * @param int $angle
- * angle de rotation en degre>0
- * @return
- */
- function action_tourner_post($id_document,$angle)
- {
- $row = sql_fetsel("fichier,extension", "spip_documents", "id_document=".intval($id_document));
- if (!$row) return;
- include_spip('inc/charsets'); # pour le nom de fichier
- include_spip('inc/documents');
- // Fichier destination : on essaie toujours de repartir de l'original
- $var_rot = $angle;
- include_spip('inc/distant'); # pour copie_locale
- $src = _DIR_RACINE . copie_locale(get_spip_doc($row['fichier']));
- if (preg_match(',^(.*)-r(90|180|270)\.([^.]+)$,', $src, $match)) {
- $effacer = $src;
- $src = $match[1].'.'.$match[3];
- $var_rot += intval($match[2]);
- }
- $var_rot = ((360 + $var_rot) % 360); // 0, 90, 180 ou 270
- if ($var_rot > 0) {
- $dest = preg_replace(',\.[^.]+$,', '-r'.$var_rot.'$0', $src);
- spip_log("rotation $var_rot $src : $dest");
- include_spip('inc/filtres');
- include_spip('public/parametrer'); // charger les fichiers fonctions #bugfix spip 2.1.0
- $res = filtrer('image_rotation',$src,$var_rot);
- $res = filtrer('image_format',$res,$row['extension']);
- list($hauteur,$largeur) = taille_image($res);
- $res = extraire_attribut($res,'src');
- include_spip('inc/getdocument');
- deplacer_fichier_upload($res,$dest);
- }
- else {
- $dest = $src;
- $size_image = @getimagesize($dest);
- $largeur = $size_image[0];
- $hauteur = $size_image[1];
- }
- // succes !
- if ($largeur>0 AND $hauteur>0) {
- $set = array(
- 'fichier' => set_spip_doc($dest),
- 'largeur'=>$largeur, 'hauteur'=>$hauteur,
- 'distant'=>'non' // le document n'est plus distant apres une transformation
- );
- if ($taille = @filesize($dest))
- $set['taille'] = $taille;
- sql_updateq('spip_documents', $set, "id_document=".intval($id_document));
- if ($effacer) {
- spip_log("rotation : j'efface $effacer");
- spip_unlink($effacer);
- }
- // pipeline pour les plugins
- pipeline('post_edition',
- array(
- 'args' => array(
- 'table' => 'spip_documents',
- 'table_objet' => 'documents',
- 'spip_table_objet' => 'spip_documents',
- 'type' =>'document',
- 'id_objet' => $id_document,
- 'champs' => array('rotation'=>$angle,'orientation'=>$var_rot,'fichier'=>$row['fichier']),
- 'serveur' => $serveur,
- 'action'=>'tourner',
- ),
- 'data' => $set
- )
- );
- }
- }
- // Appliquer l'EXIF orientation
- // cf. http://trac.rezo.net/trac/spip/ticket/1494
- // http://code.spip.net/@tourner_selon_exif_orientation
- function tourner_selon_exif_orientation($id_document, $fichier) {
- if (function_exists('exif_read_data')
- AND $exif = exif_read_data($fichier)
- AND (
- $ort = $exif['IFD0']['Orientation']
- OR $ort = $exif['Orientation'])
- ) {
- spip_log("rotation: $ort");
- $rot = null;
- switch ($ort) {
- case 3:
- $rot = 180;
- case 6:
- $rot = 90;
- case 8:
- $rot = -90;
- }
- if ($rot)
- action_tourner_post(array(null,$id_document, $rot));
- }
- }
- ?>
|