Changeset 79262 in spip-zone


Ignore:
Timestamp:
Dec 10, 2013, 10:24:23 AM (6 years ago)
Author:
cedric@…
Message:

mise a jour de la librairie AdaptiveImages?

Location:
_plugins_/adaptive_images/trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/adaptive_images/trunk/lib/AdaptiveImages/AdaptiveImages.php

    r79195 r79262  
    33 * AdaptiveImages
    44 *
    5  * @version    1.1.1
     5 * @version    1.3.0
    66 * @copyright  2013
    77 * @author     Nursit
     
    218218        }
    219219
     220        /**
     221         * This hook allows to personalize markup depending on source img style and class attributes
     222         * This do-noting method should be adapted to source markup generated by your CMS
     223         *
     224         * For instance : <img style="display:block;float:right" /> could be adapted in
     225         * <span style="display:block;float:right"><span class="adapt-img-wrapper"><img class="adapt-img"/></span></span>
     226         *
     227         * @param string $markup
     228         * @param string $originalClass
     229         * @param string $originalStyle
     230         * @return mixed
     231         */
     232        protected function imgMarkupHook(&$markup,$originalClass,$originalStyle){
     233                return $markup;
     234        }
     235
     236        /**
     237         * Translate src of original image to URL subpath of adapted image
     238         * the result will makes subdirectory of $destDirectory/320/10x/ and other variants
     239         * the result must allow to retrive src from url in adaptedURLToSrc() methof
     240         * @param string $src
     241         * @return string
     242         */
     243        protected function adaptedSrcToURL($src){
     244                $url = $this->filepath2URL($src);
     245                if (($p=strpos($url,'?'))!==FALSE)
     246                        $url=substr($url,0,$p);
     247                // avoid / starting url : replace / by root/
     248                if (strncmp($url,"/",1)==0)
     249                        $url = "root".$url;
     250                return $url;
     251        }
     252
     253        /**
     254         * Translate URL of subpath of adapted image to original image src
     255         * This reverse the adaptedSrcToURL() method
     256         * @param string $url
     257         * @return string
     258         */
     259        protected function adaptedURLToSrc($url){
     260                // replace root/ by /
     261                if (strncmp($url,"root/",5)==0)
     262                        $url = substr($url,4);
     263                $src = $this->URL2filepath($url);
     264                return $src;
     265        }
    220266
    221267        /**
     
    352398
    353399                try {
     400                        $mime = "";
    354401                        $file = $this->processBkptImageFromPath($path, $mime);
    355402                }
     
    400447        protected function processBkptImage($src, $wkpt, $wx, $x, $extension, $force=false){
    401448                $dir_dest = $this->destDirectory."$wkpt/$x/";
    402                 $dest = $dir_dest.$src;
     449                $dest = $dir_dest . $this->adaptedSrcToURL($src);
    403450
    404451                if (($exist=file_exists($dest)) AND filemtime($dest)>=filemtime($src))
     
    427474                }
    428475
    429                 $i = $this->imgSharpResize($src,$dir_dest,$wx,10000,$quality);
    430                 if ($i AND $i!==$dest AND $i!==$src AND $i!==preg_replace(",\.gif$,",".png",$dest)){
    431                         throw new Exception("Error in imgSharpResize : return \"$i\" whereas \"$dest\" expected");
     476                $i = $this->imgSharpResize($src,$dest,$wx,10000,$quality);
     477                if ($i AND $i!==$dest AND $i!==$src){
     478                        throw new Exception("Error in imgSharpResize: return \"$i\" whereas \"$dest\" expected");
     479                }
     480                if (!file_exists($i)){
     481                        throw new Exception("Error file \"$i\" not found: check the right to write in ".$this->destDirectory);
    432482                }
    433483                return $i;
     
    457507                $wkpt = intval(array_shift($path));
    458508                $x = array_shift($path);
    459                 $src = implode("/",$path);
     509                $url = implode("/",$path);
     510
     511                // translate URL part to file path
     512                $src = $this->adaptedURLToSrc($url);
    460513
    461514                $parts = pathinfo($src);
     
    518571                if (strncmp($src, "data:", 5)==0)
    519572                        return $img;
     573
     574                $src = $this->URL2filepath($src);
     575                if (!$src) return $img;
     576
     577                if ($srcMobile)
     578                        $srcMobile = $this->URL2filepath($srcMobile);
    520579
    521580                $images = array();
     
    526585                                '20x' => $src,
    527586                        );
    528 
    529                 $src = $this->URL2filepath($src);
    530                 if ($srcMobile)
    531                         $srcMobile = $this->URL2filepath($srcMobile);
    532587
    533588                // don't do anyting if we can't find file
     
    618673         */
    619674        function imgAdaptiveMarkup($img, $bkptImages, $width, $height, $extension, $maxWidth1x){
    620                 $class = $this->tagAttribute($img,"class");
     675                $originalClass = $class = $this->tagAttribute($img,"class");
    621676                if (strpos($class,"adapt-img")!==false) return $img;
    622677                ksort($bkptImages);
     
    646701                $lastw = end($lastw);
    647702                $wandroid = 0;
     703                $islast = false;
    648704                foreach ($bkptImages as $w=>$files){
    649705                        if ($w==$lastw) {$islast = true;}
     
    687743                $style .= implode("",$medias);
    688744
     745
     746                $originalStyle = $this->tagAttribute($img,"style");
    689747                $out = "<!--[if IE]>$img<![endif]-->\n";
     748
    690749                $img = $this->setTagAttribute($img,"src",$fallback_file);
    691750                $img = $this->setTagAttribute($img,"class","adapt-img $class");
    692751                $img = $this->setTagAttribute($img,"onmousedown","adaptImgFix(this)");
    693                 // $img = setTagAttribute($img,"onkeydown","adaptImgFix(this)"); // usefull ?
    694                 $out .= "<!--[if !IE]><!--><span class=\"adapt-img-wrapper $cid $extension\">$img</span>\n<style>".$style."</style><!--<![endif]-->";
     752                // $img = setTagAttribute($img,"onkeydown","adaptImgFix(this)"); // useful ?
     753
     754                // markup can be adjusted in hook, depending on style and class
     755                $markup = "<span class=\"adapt-img-wrapper $cid $extension\">$img</span>";
     756                $markup = $this->imgMarkupHook($markup,$originalClass,$originalStyle);
     757
     758                $out .= "<!--[if !IE]><!-->$markup\n<style>".$style."</style><!--<![endif]-->";
    695759
    696760                return $out;
     
    726790
    727791                // never process on remote img
    728                 if (preg_match(';^(\w{3,7}://);', $source)){
     792                if (!$source OR preg_match(';^(\w{3,7}://);', $source)){
    729793                        return array(0,0);
    730794                }
     
    932996         */
    933997        function img2JPG($source, $destDir, $bgColor='#000000', $quality=85) {
    934                 $infos = $this->readSourceImage($source, $destDir, 'jpg', true);
     998                $infos = $this->readSourceImage($source, $destDir, 'jpg');
    935999
    9361000                if (!$infos) return $source;
     
    10111075                                }
    10121076                        }
    1013                         $this->saveGDImage($im_, $infos, $quality);
     1077                        if (!$this->saveGDImage($im_, $infos, $quality)){
     1078                                throw new Exception("Unable to write ".$infos['fichier_dest'].", check write right of $destDir");
     1079                        }
    10141080                        if ($im!==$im_)
    10151081                                imagedestroy($im);
     
    10241090         *
    10251091         * @param string $source
    1026          * @param string $destDir
     1092         * @param string $dest
    10271093         * @param int $maxWidth
    10281094         * @param int $maxHeight
     
    10321098         * @throws Exception
    10331099         */
    1034         function imgSharpResize($source, $destDir, $maxWidth = 0, $maxHeight = 0, $quality=null){
    1035                 $infos = $this->readSourceImage($source, $destDir);
     1100        function imgSharpResize($source, $dest, $maxWidth = 0, $maxHeight = 0, $quality=null){
     1101                $infos = $this->readSourceImage($source, $dest);
    10361102                if (!$infos) return $source;
    10371103
     
    11231189                        }
    11241190                        // save destination image
    1125                         $this->saveGDImage($destImage, $infos, $quality);
     1191                        if (!$this->saveGDImage($destImage, $infos, $quality)){
     1192                                throw new Exception("Unable to write ".$infos['fichier_dest'].", check write right of $dest");
     1193                        }
    11261194
    11271195                        if ($srcImage)
     
    11551223         * @param string $img
    11561224         *              HTML img tag <img src=... /> OR source filename
    1157          * @param string $destDir
     1225         * @param string $dest
    11581226         *              Destination dir of new image
    11591227         * @param null|string $outputFormat
    11601228         *              forced extension of output image file : jpg, png, gif
    1161          * @param bool $hashfilename
    1162          *    if true the final file name is a md5 of source file name
    1163          *    otherwise final file name keeps the source path and file starting from $destDir
    11641229         * @return bool|array
    11651230         *              false in case of error
     
    11671232         * @throws Exception
    11681233         */
    1169         protected function readSourceImage($img, $destDir, $outputFormat = null, $hashfilename = false) {
     1234        protected function readSourceImage($img, $dest, $outputFormat = null) {
    11701235                if (strlen($img)==0) return false;
    11711236                $ret = array();
     
    11851250
    11861251                // don't process distant images
    1187                 if (preg_match(';^(\w{3,7}://);', $source)){
     1252                if (!$source OR preg_match(';^(\w{3,7}://);', $source)){
    11881253                        return false;
    11891254                }
     
    11991264
    12001265                if (@file_exists($source)){
    1201                         list ($ret["largeur"],$ret["hauteur"]) = $this->imgSize($img);
     1266                        list ($ret["largeur"],$ret["hauteur"]) = $this->imgSize(strpos($img,"width=")!==false?$img:$source);
    12021267                        $date_src = @filemtime($source);
    12031268                }
     
    12101275
    12111276
    1212                 // dest filename : md5(source) or full source path name
    1213                 $nom_fichier = (!$hashfilename?(substr($source, 0, strlen($source) - (strlen($extension) + 1))):md5($source));
    1214                 $fichier_dest = rtrim($destDir,"/") . "/" . $nom_fichier . "." . $extension_dest;
     1277                // dest filename : dest/md5(source) or dest if full name provided
     1278                if (substr($dest,-1)=="/"){
     1279                        $nom_fichier = md5($source);
     1280                        $fichier_dest = $dest . $nom_fichier . "." . $extension_dest;
     1281                }
     1282                else
     1283                        $fichier_dest = $dest;
    12151284
    12161285                $creer = true;
  • _plugins_/adaptive_images/trunk/lib/AdaptiveImages/README.md

    r79195 r79262  
    7878</pre>
    7979
     80### Markup Hook
     81
     82If source `<img/>` has some inline styles, it can be needed to add some wrapper and put the style on it on order to keep initial visual result.
     83This can be done in overriding the method `imgMarkupHook(&$markup,$originalClass,$originalStyle)`.
     84It is call with following arguments
     85- partial adaptive markup (only the `<span>` wrapper with the fallback `<img/>` inside)
     86- the original class attribute of `<img/>`
     87- the original style attribute of `<img/>`
     88
     89The method must return the partial markup, with your modifications.
     90
    8091### OnDemand images generation
    8192
  • _plugins_/adaptive_images/trunk/paquet.xml

    r79195 r79262  
    22        prefix="adaptive_images"
    33        categorie="multimedia"
    4         version="1.4.1"
     4        version="1.4.2"
    55        etat="stable"
    66        compatibilite="[3.0.0;3.0.*]"
Note: See TracChangeset for help on using the changeset viewer.