source: spip-zone/_plugins_/adaptive_images/trunk/adaptive_images_options.php @ 79131

Last change on this file since 79131 was 79131, checked in by cedric@…, 6 years ago

mise a jour de la lib AdaptiveImages?

File size: 6.5 KB
Line 
1<?php
2/**
3 * Options du plugin Adaptive Images
4 *
5 * @plugin     Adaptive Images
6 * @copyright  2013
7 * @author     Cedric
8 * @licence    GNU/GPL
9 * @package    SPIP\Adaptive_Images\Options
10 */
11
12
13if (!defined('_ECRIRE_INC_VERSION')) return;
14
15include_once(_DIR_PLUGIN_ADAPTIVE_IMAGES."lib/AdaptiveImages/AdaptiveImages.php");
16$AdaptiveImage = AdaptiveImages::getInstance();
17
18// utiliser le progressive rendering sur PNG et GIF si pas de JS
19if (defined('_ADAPTIVE_IMAGES_NOJS_PNGGIF_PROGRESSIVE_RENDERING'))
20        $AdaptiveImage->nojsPngGifProgressiveRendering = _ADAPTIVE_IMAGES_NOJS_PNGGIF_PROGRESSIVE_RENDERING;
21// couleur de background pour les images lowsrc
22if (defined('_ADAPTIVE_IMAGES_LOWSRC_JPG_BG_COLOR'))
23        $AdaptiveImage->lowsrcJpgBgColor = _ADAPTIVE_IMAGES_LOWSRC_JPG_BG_COLOR;
24// qualite des images lowsrc
25if (defined('_ADAPTIVE_IMAGES_LOWSRC_JPG_QUALITY'))
26        $AdaptiveImage->lowsrcJpgQuality = _ADAPTIVE_IMAGES_LOWSRC_JPG_QUALITY;
27// qualite de compression JPG pour les images 1.5x et 2x (on peut comprimer plus)
28if (defined('_ADAPTIVE_IMAGES_15x_JPG_QUALITY'))
29        $AdaptiveImage->x15JpgQuality = _ADAPTIVE_IMAGES_15x_JPG_QUALITY;
30if (defined('_ADAPTIVE_IMAGES_20x_JPG_QUALITY'))
31        $AdaptiveImage->x20JpgQuality = _ADAPTIVE_IMAGES_20x_JPG_QUALITY;
32// Breakpoints de taille d'ecran pour lesquels on generent des images
33if (defined('_ADAPTIVE_IMAGES_DEFAULT_BKPTS'))
34        $AdaptiveImage->defaultBkpts = explode(",",_ADAPTIVE_IMAGES_DEFAULT_BKPTS);
35// les images 1x sont au maximum en _ADAPTIVE_IMAGES_MAX_WIDTH_1x px de large dans la page
36if (defined('_ADAPTIVE_IMAGES_MAX_WIDTH_1x'))
37        $AdaptiveImage->maxWidth1x = _ADAPTIVE_IMAGES_MAX_WIDTH_1x;
38// on ne traite pas les images de largeur inferieure a _ADAPTIVE_IMAGES_MIN_WIDTH_1x px
39if (defined('_ADAPTIVE_IMAGES_MIN_WIDTH_1x'))
40        $AdaptiveImage->minWidth1x = _ADAPTIVE_IMAGES_MIN_WIDTH_1x;
41// Pour les ecrans plus petits, c'est la version mobile qui est fournie (recadree)
42if (defined('_ADAPTIVE_IMAGES_MAX_WIDTH_MOBILE_VERSION'))
43        $AdaptiveImage->maxWidthMobileVersion = _ADAPTIVE_IMAGES_MAX_WIDTH_MOBILE_VERSION;
44
45// GD memory limit
46if (defined('_IMG_GD_MAX_PIXELS'))
47        $AdaptiveImage->maxImagePxGDMemoryLimit = _IMG_GD_MAX_PIXELS;
48
49// Pour generer chaque variante d'image uniquement quand elle est demandee pour la premiere fois
50// par defaut false : on genere toutes les images au calcul de la page (mais timeout possible)
51// pour passer a true : ajouter la rewrite rule suivante dans .htaccess
52/*
53###
54# Adaptive Images
55
56RewriteRule \badapt-img/(\d+/\d\dx/.*)$ spip.php?action=adapt_img&arg=$1 [QSA,L]
57
58# Fin des Adaptive Images
59###
60*/
61define('_ADAPTIVE_IMAGES_ON_DEMAND_PRODUCTION',true);
62if (defined('_ADAPTIVE_IMAGES_ON_DEMAND_PRODUCTION'))
63        $AdaptiveImage->onDemandImages = _ADAPTIVE_IMAGES_ON_DEMAND_PRODUCTION;
64
65// dossier de stockage des images adaptatives
66$AdaptiveImage->destDirectory = _DIR_VAR . "adapt-img/";
67
68
69
70/**
71 * ?action=adapt_img
72 * Production d'une image a la volee a partir de son URL
73 * arg
74 *   local/adapt-img/w/x/file
75 *   ex : 320/20x/file
76 *   w est la largeur affichee de l'image
77 *   x est la resolution (10x => 1, 15x => 1.5, 20x => 2)
78 *   file le chemin vers le fichier source
79 */
80function action_adapt_img_dist(){
81
82        $AdaptiveImage = AdaptiveImages::getInstance();
83        try {
84                $AdaptiveImage->deliverBkptImage(_request('arg'));
85        }
86        catch (Exception $e){
87                http_status(404);
88                include_spip('inc/minipres');
89                echo minipres(_T('erreur').' 404',
90                        _T('medias:info_document_indisponible')."<br />".$e->getMessage(),"",true);
91        }
92        exit;
93}
94
95
96/** Filtre  ***********************************************************************************************************/
97
98/**
99 * Rendre les images d'un texte adaptatives, en permettant de preciser la largeur maxi a afficher en 1x
100 * [(#TEXTE|adaptive_images{1024})]
101 * @param string $texte
102 * @param null|int $max_width_1x
103 * @return mixed
104 */
105function adaptive_images($texte,$max_width_1x=null){
106        $AdaptiveImage = AdaptiveImages::getInstance();
107        return $AdaptiveImage->adaptHTMLPart($texte, $max_width_1x);
108}
109
110/**
111 * nommage alternatif
112 * @param $texte
113 * @param int $max_width_1x
114 * @return mixed
115 */
116function adaptative_images($texte,$max_width_1x=null){
117        return adaptive_images($texte,$max_width_1x);
118}
119
120/** Pipelines  ********************************************************************************************************/
121
122/**
123 * Completer la page d'edition d'un document
124 * pour joindre sous-titrage, audio-desc et transcript sur les videos
125 *
126 * @param array $flux
127 * @return array
128 */
129function adaptive_images_affiche_milieu($flux){
130        if (in_array($flux['args']['exec'],array('document_edit','documents_edit'))
131          AND $id_document=$flux['args']['id_document']){
132                $flux['data'] .= recuperer_fond('prive/squelettes/inclure/adapter-image',array('id_document'=>$id_document));
133        }
134        return $flux;
135}
136
137/**
138 * Injecter data-src-mobile="..." sur les modeles img/doc/emb quand une variante mobile existe
139 *
140 * @param array $flux
141 * @return array
142 */
143function adaptive_images_recuperer_fond($flux){
144        if (
145                strncmp($flux['args']['fond'],"modeles/img",11)==0
146                OR strncmp($flux['args']['fond'],"modeles/doc",11)==0
147                OR strncmp($flux['args']['fond'],"modeles/emb",11)==0){
148                if ($id_document = intval($flux['args']['contexte']['id_document'])){
149                        if ($mobileview = adaptive_images_variante($id_document,"mobileview")){
150                                $src_mobile = get_spip_doc($mobileview['fichier']);
151                                $imgs = extraire_balises($flux['data']['texte'],'img');
152                                foreach($imgs as $img){
153                                        $src = extraire_attribut($img,"src");
154                                        $src = set_spip_doc($src);
155                                        if (sql_getfetsel("id_document","spip_documents","id_document=".intval($id_document)." AND fichier=".sql_quote($src))){
156                                                $img2 = inserer_attribut($img,"data-src-mobile",$src_mobile);
157                                                $flux['data']['texte'] = str_replace($img,$img2,$flux['data']['texte']);
158                                        }
159                                }
160                        }
161                }
162        }
163        return $flux;
164}
165
166
167/**
168 * Trouver la variante $mode d'une image
169 * @param int $id_document
170 * @param string $mode
171 *   mobileview
172 * @return array
173 */
174function adaptive_images_variante($id_document,$mode){
175        return sql_fetsel('*',
176                'spip_documents as d JOIN spip_documents_liens as L on L.id_document=d.id_document',
177                "L.objet='document' AND L.id_objet=".intval($id_document)." AND d.mode=".sql_quote($mode));
178}
179
180
181
182/**
183 * Traiter les images de la page et les passer en responsive
184 * si besoin
185 *
186 * @param $texte
187 * @return mixed
188 */
189function adaptive_images_affichage_final($texte){
190        if ($GLOBALS['html']){
191                #spip_timer();
192                $AdaptiveImage = AdaptiveImages::getInstance();
193                $texte = $AdaptiveImage->adaptHTMLPage($texte);
194                #var_dump(spip_timer());
195        }
196        return $texte;
197}
198
199?>
Note: See TracBrowser for help on using the repository browser.