Changeset 93467 in spip-zone


Ignore:
Timestamp:
Dec 8, 2015, 11:08:42 PM (5 years ago)
Author:
marcimat@…
Message:

On ajoute la possibilité, avec SPIP 3.1 à jour, de calculer le positionnement
du point d'intérêt avec la fonction image_recadre, ajouté avec r93466.

On utilise une partie du code de image_proportions() du plugin Image Responsive

Exemple :

  • [(#FICHIER|image_recadre{16:9, -, focus})]
  • [(#FICHIER|image_recadre{300:100, -, focus}|image_reduire{300, 100)]
Location:
_plugins_/centre_image/trunk
Files:
2 added
2 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/centre_image/trunk/centre_image_fonctions.php

    r92511 r93467  
    11<?php
    2 
     2/**
     3 * Fonctions utiles au plugin Centre image
     4 *
     5 * @plugin     Centre image
     6 * @copyright  2015
     7 * @author     ARNO*
     8 * @licence    GNU/GPL
     9 * @package    SPIP\Centre_image\Fonctions
     10 */
     11
     12if (!defined('_ECRIRE_INC_VERSION')) return;
    313
    414/**
     
    616 *
    717 * Retourne les coordonnées `[0.5, 0.5]` par défaut (si le calcul échoue par exemple).
     18 *
     19 * @uses centre_image_visage() Si la constante `_SPIP_CENTRE_IMAGE` définie à `visage`
     20 * @uses centre_image_densite() sinon
    821 *
    922 * @param string $fichier
     
    1427 *     - y entre 0 (en haut) et 1 (en bas)
    1528**/
    16 
    17 function centre_image ($fichier) {
    18        
    19         if (defined('_SPIP_CENTRE_IMAGE') AND _SPIP_CENTRE_IMAGE == "visage") return centre_image_visage ($fichier);
    20         else return centre_image_densite ($fichier);
    21 }
    22 
    23 function centre_image_densite ($fichier) {
     29function centre_image($fichier) {
     30        if (defined('_SPIP_CENTRE_IMAGE') AND _SPIP_CENTRE_IMAGE == "visage") {
     31                return centre_image_visage($fichier);
     32        } else {
     33                return centre_image_densite($fichier);
     34        }
     35}
     36
     37/**
     38 * Retourne les coordonnées du point d'intérêt de l'image transmise
     39 *
     40 * Retourne les coordonnées `[0.5, 0.5]` par défaut (si le calcul échoue par exemple).
     41 *
     42 * @param string $fichier
     43 *     Chemin du fichier ou balise `<img>`
     44 * @return float[]
     45 *     Tableau (x, y) des coordonnées du point d'intéret ;
     46 *     - x entre 0 (à gauche) et 1 (à droite)
     47 *     - y entre 0 (en haut) et 1 (en bas)
     48**/
     49function centre_image_densite($fichier) {
    2450        static $spip_centre_image = array();
    2551
     
    5480                if (file_exists($fichier_forcer) and filemtime($fichier_forcer) > filemtime($fichier)) {
    5581                        $res = json_decode(file_get_contents($fichier_forcer),TRUE);
    56                 }
    57                 else if (file_exists($fichier_json) and filemtime($fichier_json) > filemtime($fichier)) {
     82                } elseif (file_exists($fichier_json) and filemtime($fichier_json) > filemtime($fichier)) {
    5883                        $res = json_decode(file_get_contents($fichier_json),TRUE);
    5984                } else {
     
    114139
    115140
    116 /*
     141/**
    117142 * Détection du visage (attention: super-lourd)
    118  */
    119 
    120 function centre_image_visage ($fichier) {
     143 *
     144 * Retourne les coordonnées du point d'intérêt de l'image transmise
     145 * en s'appuyant sur une (lourde) fonction de détection de visage
     146 *
     147 * Retourne les coordonnées `[0.5, 0.5]` par défaut (si le calcul échoue par exemple).
     148 *
     149 * @param string $fichier
     150 *     Chemin du fichier ou balise `<img>`
     151 * @return float[]
     152 *     Tableau (x, y) des coordonnées du point d'intéret ;
     153 *     - x entre 0 (à gauche) et 1 (à droite)
     154 *     - y entre 0 (en haut) et 1 (en bas)
     155**/
     156function centre_image_visage($fichier) {
    121157        static $spip_centre_image_visage = array();
    122         if (preg_match("/src\=/", $fichier)) $fichier = extraire_attribut($fichier, "src");
     158        if (preg_match("/src\=/", $fichier)) {
     159                $fichier = extraire_attribut($fichier, "src");
     160        }
    123161        $fichier = preg_replace(",\?[0-9]*$,", "", $fichier);
    124162
    125163        // on mémorise le résultat -> don
    126         if (isset($spip_centre_image_visage["$fichier"]) AND $spip_centre_image_visage["$fichier"]) return $spip_centre_image_visage["$fichier"];
    127        
    128        
     164        if (isset($spip_centre_image_visage["$fichier"]) AND $spip_centre_image_visage["$fichier"]) {
     165                return $spip_centre_image_visage["$fichier"];
     166        }
     167
    129168        if (file_exists($fichier)) {
    130169
     
    141180                $cache = sous_repertoire($cache, $l2);
    142181                $forcer = sous_repertoire(_DIR_IMG, "cache-centre-image");
    143                                
     182
    144183                $fichier_json = "$cache$md5.json";
    145184                $fichier_forcer = "$forcer$md5.json";
     
    152191                        $res = json_decode(file_get_contents($fichier_json),TRUE);
    153192                } else {
    154                
     193
    155194                        include_spip ("inc/FaceDetector");
    156195                        $detector = new svay\FaceDetector('detection.dat');
    157196                        $detector->faceDetect($fichier);
    158197                        $face = $detector->getFace();
    159                        
     198
    160199                        if ($face) {
    161200                                $l = largeur($fichier);
    162201                                $h = hauteur($fichier);
    163                        
     202
    164203                                $x = ($face["x"] + ($face["w"] / 2)) / $l ;
    165204                                $y = ($face["y"] + ($face["w"] / 2)) / $h;
    166                                
    167        
     205
    168206                                $res = array("x" => $x, "y" => $y);
    169207                        } else {
    170208                                $res = array("x" => 0.5, "y" => 0.33);
    171209                        }
    172                                
    173                         file_put_contents($fichier_json, json_encode($res,TRUE));               
     210
     211                        file_put_contents($fichier_json, json_encode($res, TRUE));
    174212                }
    175213
     
    177215
    178216                return $res;   
    179        
    180        
    181         }
    182 
    183 }
    184 
     217        }
     218}
    185219
    186220
  • _plugins_/centre_image/trunk/paquet.xml

    r93452 r93467  
    22        prefix="centre_image"
    33        categorie="multimedia"
    4         version="0.6.7"
     4        version="0.7.0"
    55        etat="dev"
    66        compatibilite="[3.0.18;3.1.*]"
Note: See TracChangeset for help on using the changeset viewer.