Changeset 77081 in spip-zone


Ignore:
Timestamp:
Oct 8, 2013, 2:40:38 PM (6 years ago)
Author:
kent1@…
Message:

Indentation et petites améliorations de perf

File:
1 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/doc2img/trunk/inc/doc2img_convertir.php

    r75040 r77081  
    3636        $ret = array();
    3737        if(class_exists('Imagick')){
    38             include_spip('inc/documents');
     38                include_spip('inc/documents');
    3939                include_spip('inc/config');
    40                 include_spip('action/editer_document');
    4140
    4241                /**
     
    4544                 */
    4645                if(!isset($GLOBALS['visiteur_session'])
    47                 OR !is_array($GLOBALS['visiteur_session']))
     46                        OR !is_array($GLOBALS['visiteur_session']))
    4847                        $GLOBALS['visiteur_session'] = sql_fetsel('*','spip_auteurs','webmestre="oui"');
    4948
    50             $config = lire_config('doc2img',array());
     49                $config = lire_config('doc2img',array());
    5150                $format_cible = $config['format_cible'] ? $config['format_cible'] : 'png';
    52             $document = doc2img_document($id_document);
    53 
    54             /**
    55              * Chargement du document en mémoire
    56              * On détermine le nombre de pages du document
    57              * On libère la ressource automatiquement si on utilise la class
    58              * car on réouvre chaque page par la suite
    59              */
    60 
    61             $frame = 0;
    62 
    63                 $resolution = (isset($config['resolution']) && intval($config['resolution']) > 150) ? $config['resolution'] : 150;
    64                 $ajouter_documents = charger_fonction('ajouter_documents', 'action');
    65 
    66                 if($type == 'full'){
    67                         try{
    68                                 $image = new Imagick($document['fichier']);
    69                                 $identify = $image->identifyImage();
    70                                 $nb_pages = $image->getNumberImages();
    71                                 $image->clear();
    72                                 $image->destroy();
    73 
    74                                 /**
    75                                  * Est ce que ce document a déja été converti
    76                                  * Si oui, on supprime son ancienne conversion
    77                                  */
    78                                 $documents_doc2img = sql_select('L1.id_document',
    79                                                                                                 'spip_documents AS L1 LEFT JOIN spip_documents_liens AS L2 ON L1.id_document=L2.id_document',
    80                                                                                                 'L1.mode="doc2img" AND L2.objet="document" AND L2.id_objet='.intval($id_document));
    81 
    82                                 $documents_a_supprimer = array();
    83                                 while($document_doc2img = sql_fetch($documents_doc2img)){
    84                                         $documents_a_supprimer[] = $document_doc2img['id_document'];
     51                $document = doc2img_document($id_document);
     52               
     53                if($document){
     54                        include_spip('action/editer_document');
     55                        /**
     56                         * Chargement du document en mémoire
     57                         * On détermine le nombre de pages du document
     58                         * On libère la ressource automatiquement si on utilise la class
     59                         * car on réouvre chaque page par la suite
     60                         */
     61                        $frame = 0;
     62                        $resolution = (isset($config['resolution']) && intval($config['resolution']) > 150) ? $config['resolution'] : 150;
     63                        $ajouter_documents = charger_fonction('ajouter_documents', 'action');
     64
     65                        if($type == 'full'){
     66                                try{
     67                                        $image = new Imagick($document['fichier']);
     68                                        $identify = $image->identifyImage();
     69                                        $nb_pages = $image->getNumberImages();
     70                                        $image->clear();
     71                                        $image->destroy();
     72
     73                                        /**
     74                                         * Est ce que ce document a déja été converti
     75                                         * Si oui, on supprime son ancienne conversion
     76                                         */
     77                                        $documents_a_supprimer = array();
     78                                        $documents_doc2img = sql_allfetsel('L1.id_document',
     79                                                                                                        'spip_documents AS L1 LEFT JOIN spip_documents_liens AS L2 ON L1.id_document=L2.id_document',
     80                                                                                                        'L1.mode="doc2img" AND L2.objet="document" AND L2.id_objet='.intval($id_document));
     81                                        foreach($documents_doc2img as $document_doc2img){
     82                                                $documents_a_supprimer[] = $document_doc2img['id_document'];
     83                                        }
     84                                        if(count($documents_a_supprimer) > 0){
     85                                                $supprimer_document = charger_fonction('supprimer_document','action');
     86                                                foreach ($documents_a_supprimer as $id_document_supprimer) {
     87                                                        $supprimer_document($id_document_supprimer);
     88                                                }
     89                                        }
     90                                        unset($documents_a_supprimer,$documents_doc2img,$identify);
     91                                        /*
     92                                         * chaque page est un fichier qu'on sauve dans la table doc2img indexé
     93                                         * par son numéro de page
     94                                         */
     95                                        do {
     96                                                $image_frame = new Imagick();
     97                                                        if(is_numeric($resolution) && ($resolution <= '600'))
     98                                                                $image_frame->setResolution($resolution,$resolution);
     99                                                        /*
     100                                                         *on accede à la page $frame
     101                                                         */
     102                                                        $image_frame->readImage($document['fichier'].'['.$frame.']');
     103                                                        $image_frame->setImageFormat($format_cible);
     104
     105                                                        if(is_numeric($config['compression']) && ($config['compression'] > 50) && ($config['compression'] <= 100))
     106                                                                $image_frame->setImageCompressionQuality($config['compression']);
     107
     108                                                        //calcule des dimensions
     109                                                        //$dimensions = doc2img_ratio($image_frame,$config);
     110
     111                                                        /**
     112                                                         * nom du fichier cible, c'est à dire la frame (image) indexée
     113                                                         */
     114                                                        $frame_name = $document['name'].'-'.$frame.'.'.$format_cible;
     115                                                        $dest = $document['cible_url'].$frame_name;
     116                                                        /**
     117                                                         * on sauvegarde la page
     118                                                         */
     119                                                        //$image_frame->resizeImage($dimensions['largeur'], $dimensions['hauteur'],Imagick::FILTER_LANCZOS,1);
     120                                                        $image_frame->writeImage($dest);
     121
     122                                                        /**
     123                                                         * On ajoute le document dans la table spip_documents avec comme type "doc2img"
     124                                                         * Il sera automatiquement lié au document original
     125                                                         */
     126                                                        $files = array(array('tmp_name'=>$dest,'name'=>$frame_name));
     127                                                        $x = $ajouter_documents('new', $files,'document', $id_document, 'doc2img');
     128                                                        unset($files);
     129                                                        if(($frame == 0) && ($config['logo_auto']=='on') && in_array($format_cible,array('png','jpg'))){
     130                                                                $id_vignette = $document['id_vignette'];
     131                                                                $frame_tmp = $document['cible_url'].$document['name'].'-logo.'.$format_cible;
     132                                                                $image_frame->writeImage($frame_tmp);
     133                                                                $files = array(array('tmp_name'=>$frame_tmp,'name'=>$frame_name));
     134                                                                if(is_numeric($id_vignette) && ($id_vignette > 0))
     135                                                                        $vignette = $ajouter_documents($id_vignette, $files,'', 0, 'vignette');
     136                                                                else
     137                                                                        $vignette = $ajouter_documents('new', $files,'', 0, 'vignette');
     138       
     139                                                                if (is_numeric(reset($vignette)) AND $id_vignette = reset($vignette))
     140                                                                        document_modifier($id_document,array("id_vignette" => intval($id_vignette)));
     141                                                                spip_unlink($document['cible_url'].$frame_tmp);
     142                                                                unset($vignette,$files);
     143                                                        }
     144       
     145                                                        spip_unlink($document['cible_url'].$frame_name);
     146                                                        unset($frame_name,$dest);
     147                                                        $frame++;
     148                                                        document_modifier(reset($x),array('page'=>$frame));
     149                                                        unset($x);
     150                                                        $image_frame->clear();
     151                                                        $image_frame->destroy();
     152                                                        $invalider = true;
     153                                                } while($frame < $nb_pages);
     154                                        }
     155                                catch ( ImagickException $e ){
     156                                                spip_log('On a une erreur','docimg');
     157                                                spip_log($e,'docimg');
    85158                                }
    86                                 if(count($documents_a_supprimer) > 0){
    87                                         $supprimer_document = charger_fonction('supprimer_document','action');
    88                                         foreach ($documents_a_supprimer as $id_document_supprimer) {
    89                                                 $supprimer_document($id_document_supprimer);
    90                                         }
     159                        }else{
     160                                try{
     161                                        do {
     162                                                if(in_array($format_cible,array('png','jpg'))){
     163                                                        $image_frame = new Imagick();
     164                                                        if(is_numeric($resolution) && ($resolution <= '600'))
     165                                                                $image_frame->setResolution($resolution,$resolution);
     166                                                        $image_frame->readImage($document['fichier'].'['.$frame.']');
     167                                                        $image_frame->setImageFormat($format_cible);
     168                                                        if(is_numeric($config['compression']) && ($config['compression'] > 50) && ($config['compression'] <= 100))
     169                                                                $image_frame->setImageCompressionQuality($config['compression']);
     170       
     171                                                        //nom du fichier cible, c'est à dire la frame (image) indexée
     172                                                        $frame_name = $document['name'].'-logo.'.$format_cible;
     173       
     174                                                        //on sauvegarde la page
     175                                                        $image_frame->writeImage($document['cible_url'].$frame_name);
     176                                                        $image_frame->clear();
     177                                                        $image_frame->destroy();
     178       
     179                                                        $files = array(array('tmp_name'=>$document['cible_url'].$frame_name,'name'=>$frame_name));
     180                                                        $id_vignette = $document['id_vignette'];
     181                                                        if(is_numeric($id_vignette) && ($id_vignette > 0))
     182                                                                $x = $ajouter_documents($id_vignette, $files,'', 0, 'vignette');
     183                                                        else
     184                                                                $x = $ajouter_documents('new', $files,'', 0, 'vignette');
     185       
     186                                                        if (is_numeric(reset($x)) AND $id_vignette = reset($x))
     187                                                                document_modifier($id_document,array("id_vignette" => intval($id_vignette)));
     188       
     189                                                        spip_unlink($document['cible_url'].$frame_name);
     190                                                }else
     191                                                        spip_log("DOC2IMG : le format de sortie sélectionné dans la configuration ne permet pas de créer une vignette",'docimg');
     192                                                $invalider = true;
     193                                                $frame++;
     194                                        } while($frame < 1 );
     195                                }catch ( ImagickException $e ){
     196                                                spip_log('On a une erreur','docimg');
     197                                                spip_log($e,'docimg');
    91198                                }
    92                                 unset($documents_a_supprimer,$documents_doc2img,$identify);
    93                             // chaque page est un fichier qu'on sauve dans la table doc2img indexé
    94                             // par son numéro de page
    95                             do {
    96                                 $image_frame = new Imagick();
    97                                 //on accede à la page $frame
    98 
    99                                                 if(is_numeric($resolution) && ($resolution <= '600'))
    100                                                 $image_frame->setResolution($resolution,$resolution);
    101 
    102                                                 $image_frame->readImage($document['fichier'].'['.$frame.']');
    103                                                 $image_frame->setImageFormat($format_cible);
    104 
    105                                                 if(is_numeric($config['compression']) && ($config['compression'] > 50) && ($config['compression'] <= 100))
    106                                                         $image_frame->setImageCompressionQuality($config['compression']);
    107 
    108                                         //calcule des dimensions
    109                                         //$dimensions = doc2img_ratio($image_frame,$config);
    110 
    111                                         //nom du fichier cible, c'est à dire la frame (image) indexée
    112                                         $frame_name = $document['name'].'-'.$frame.'.'.$format_cible;
    113                                                 $dest = $document['cible_url'].$frame_name;
    114                                         //on sauvegarde la page
    115 
    116                                         //$image_frame->resizeImage($dimensions['largeur'], $dimensions['hauteur'],Imagick::FILTER_LANCZOS,1);
    117                                     $image_frame->writeImage($dest);
    118 
    119                                                 /**
    120                                                  * On ajoute le document dans la table spip_documents avec comme type "doc2img"
    121                                                  * Il sera automatiquement lié au document original
    122                                                  */
    123                                                 $files = array(array('tmp_name'=>$dest,'name'=>$frame_name));
    124                                                 $x = $ajouter_documents('new', $files,'document', $id_document, 'doc2img');
    125                                                 unset($files);
    126                                         if(($frame == 0) && ($config['logo_auto']=='on') && in_array($format_cible,array('png','jpg'))){
    127                                                 $id_vignette = $document['id_vignette'];
    128                                                         $frame_tmp = $document['cible_url'].$document['name'].'-logo.'.$format_cible;
    129                                                         $image_frame->writeImage($frame_tmp);
    130                                                         $files = array(array('tmp_name'=>$frame_tmp,'name'=>$frame_name));
    131                                                 if(is_numeric($id_vignette) && ($id_vignette > 0))
    132                                                         $vignette = $ajouter_documents($id_vignette, $files,'', 0, 'vignette');
    133                                                 else
    134                                                                 $vignette = $ajouter_documents('new', $files,'', 0, 'vignette');
    135 
    136                                                         if (is_numeric(reset($vignette)) AND $id_vignette = reset($vignette))
    137                                                                 document_modifier($id_document,array("id_vignette" => intval($id_vignette)));
    138                                                         spip_unlink($document['cible_url'].$frame_tmp);
    139                                                         unset($vignette,$files);
    140                                         }
    141 
    142                                         spip_unlink($document['cible_url'].$frame_name);
    143                                     unset($frame_name,$dest);
    144                                                 $frame++;
    145                                                 document_modifier(reset($x),array('page'=>$frame));
    146                                                 unset($x);
    147                                                 $image_frame->clear();
    148                                                 $image_frame->destroy();
    149                                                 $invalider = true;
    150                                         } while($frame < $nb_pages);
    151                                 }
    152                         catch ( ImagickException $e ){
    153                                     spip_log('On a une erreur','docimg');
    154                                         spip_log($e,'docimg');
    155199                        }
    156             }else{
    157                 try{
    158                         do {
    159                                 if(in_array($format_cible,array('png','jpg'))){
    160                                         $image_frame = new Imagick();
    161                                         if(is_numeric($resolution) && ($resolution <= '600')){
    162                                                 spip_log('set resolution','docimg');
    163                                                 $image_frame->setResolution($resolution,$resolution);
    164                                         }
    165                                                 $image_frame->readImage($document['fichier'].'['.$frame.']');
    166                                                 $image_frame->setImageFormat($format_cible);
    167                                                 if(is_numeric($config['compression']) && ($config['compression'] > 50) && ($config['compression'] <= 100)){
    168                                                         $image_frame->setImageCompressionQuality($config['compression']);
    169                                                 }
    170 
    171                                         //nom du fichier cible, c'est à dire la frame (image) indexée
    172                                         $frame_name = $document['name'].'-logo.'.$format_cible;
    173 
    174                                         //on sauvegarde la page
    175                                     $image_frame->writeImage($document['cible_url'].$frame_name);
    176                                                 $image_frame->clear();
    177                                     $image_frame->destroy();
    178 
    179                                                 $files = array(array('tmp_name'=>$document['cible_url'].$frame_name,'name'=>$frame_name));
    180                                                 $id_vignette = $document['id_vignette'];
    181                                         if(is_numeric($id_vignette) && ($id_vignette > 0))
    182                                                 $x = $ajouter_documents($id_vignette, $files,'', 0, 'vignette');       
    183                                         else
    184                                                         $x = $ajouter_documents('new', $files,'', 0, 'vignette');
    185 
    186                                                 if (is_numeric(reset($x)) AND $id_vignette = reset($x))
    187                                                         document_modifier($id_document,array("id_vignette" => intval($id_vignette)));
    188 
    189                                                 spip_unlink($document['cible_url'].$frame_name);
    190                             }else
    191                                                 spip_log("DOC2IMG : le format de sortie sélectionné dans la configuration ne permet pas de créer une vignette",'docimg');
    192                                         $invalider = true;
    193                                 $frame++;
    194                             } while($frame < 1 );
    195                         }catch ( ImagickException $e ){
    196                                     spip_log('On a une erreur','docimg');
    197                                         spip_log($e,'docimg');
     200                        $ret['success'] = true;
     201                        if($invalider){
     202                                include_spip('inc/invalideur');
     203                                suivre_invalideur('id_document="$id_document"');
    198204                        }
    199             }
    200                 $ret['success'] = true;
    201                 if($invalider){
    202                         include_spip('inc/invalideur');
    203                         suivre_invalideur('id_document="$id_document"');
     205                        return $ret;
     206                }else{
     207                        spip_log('Erreur Doc2Img : le document n\'existe pas');
     208                        return false;
    204209                }
    205             return $ret;
    206210        }else{
    207211                spip_log('Erreur Doc2Img : La class doc2img n est pas disponible');
     
    221225function doc2img_ratio($handle,$config=array()) {
    222226
    223     $ratio['largeur'] = $ratio['hauteur'] = 1;
    224 
    225     /**
    226     * Récupération des dimensions du document d'origine
    227     */
     227        $ratio['largeur'] = $ratio['hauteur'] = 1;
     228
     229        /**
     230        * Récupération des dimensions du document d'origine
     231        */
    228232        $dimensions['largeur'] = $handle->getImageWidth();
    229233        $dimensions['hauteur'] = $handle->getImageHeight();
    230234
    231     //si une largeur seuil a été définie
    232     if ($largeur = $config['largeur']) {
    233         $ratio['largeur'] = $largeur / $dimensions['largeur'];
    234     }
    235 
    236     //si une hauteur seuil a été définie
    237     if ($hauteur = $config['hauteur']) {
    238         $ratio['hauteur'] = $hauteur / $dimensions['hauteur'];
    239     }
    240 
    241 
    242     /**
    243      * Ajustement des ratios si proportion demandée
    244      * Si agrandissement demandé on prend le plus grand ratio,
    245      * sinon le plus petit
    246      */
    247     if ($config['proportion'] == "on") {
    248         $ratio['largeur'] = ($config['agrandir'] == 'on') ? max($ratio['hauteur'], $ratio['largeur']) : min($ratio['hauteur'], $ratio['largeur']);
    249         $ratio['hauteur'] = $ratio['largeur'];
    250     }
    251 
    252     /**
    253      * Définition des dimensions définitives
    254      */
    255     $dimensions['largeur'] = $ratio['largeur'] * $dimensions['largeur'];
    256     $dimensions['hauteur'] = $ratio['hauteur'] * $dimensions['hauteur'];
    257 
    258     return $dimensions;
     235        //si une largeur seuil a été définie
     236        if ($largeur = $config['largeur'])
     237                $ratio['largeur'] = $largeur / $dimensions['largeur'];
     238
     239        //si une hauteur seuil a été définie
     240        if ($hauteur = $config['hauteur'])
     241                $ratio['hauteur'] = $hauteur / $dimensions['hauteur'];
     242
     243        /**
     244         * Ajustement des ratios si proportion demandée
     245         * Si agrandissement demandé on prend le plus grand ratio,
     246         * sinon le plus petit
     247         */
     248        if ($config['proportion'] == "on") {
     249                $ratio['largeur'] = ($config['agrandir'] == 'on') ? max($ratio['hauteur'], $ratio['largeur']) : min($ratio['hauteur'], $ratio['largeur']);
     250                $ratio['hauteur'] = $ratio['largeur'];
     251        }
     252
     253        /**
     254         * Définition des dimensions définitives
     255         */
     256        $dimensions['largeur'] = $ratio['largeur'] * $dimensions['largeur'];
     257        $dimensions['hauteur'] = $ratio['hauteur'] * $dimensions['hauteur'];
     258
     259        return $dimensions;
    259260}
    260 
    261261
    262262/**
     
    272272function doc2img_document($id_document) {
    273273
    274     //on recupere l'url du document
    275     $fichier = sql_fetsel(
    276         'fichier,extension,id_vignette',
    277         'spip_documents',
    278         'id_document='.$id_document
    279     );
    280 
    281     //chemin relatif du fichier
    282     $fichier_reel = get_spip_doc($fichier['fichier']);
    283 
    284     //url relative du repertoire contenant le fichier , on retire aussi le / en fin
    285     $document['fichier'] = $fichier_reel;
    286 
    287     //information sur le nom du fichier
    288     $document['extension'] = $fichier['extension'];
    289     $document['name'] = basename($fichier_reel);
    290         $document['id_vignette'] = $fichier['id_vignette'];
    291 
    292     //creation du repertoire cible
    293     //url relative du repertoire cible
    294     if(!is_dir(_DIR_VAR."cache-doc2img"))
    295         sous_repertoire(_DIR_VAR,"cache-doc2img");
    296        
    297     $document['cible_url'] = _DIR_VAR."cache-doc2img".'/';
    298 
    299     return $document;
     274        //on recupere l'url du document
     275        $fichier = sql_fetsel(
     276                'fichier,extension,id_vignette',
     277                'spip_documents',
     278                'id_document='.intval($id_document)
     279        );
     280
     281        if(is_array($fichier)){
     282                $document = $fichier;
     283               
     284                //chemin relatif du fichier
     285                $fichier_reel = get_spip_doc($fichier['fichier']);
     286
     287                //url relative du repertoire contenant le fichier , on retire aussi le / en fin
     288                $document['fichier'] = $fichier_reel;
     289                $document['name'] = basename($fichier_reel);
     290
     291                //creation du repertoire cible
     292                //url relative du repertoire cible
     293                if(!is_dir(_DIR_VAR."cache-doc2img"))
     294                        sous_repertoire(_DIR_VAR,"cache-doc2img");
     295
     296                $document['cible_url'] = _DIR_VAR."cache-doc2img".'/';
     297                return $document;
     298        }
     299        return false;
    300300}
    301301
Note: See TracChangeset for help on using the changeset viewer.