Changeset 79131 in spip-zone


Ignore:
Timestamp:
Dec 4, 2013, 9:36:34 AM (6 years ago)
Author:
cedric@…
Message:

mise a jour de la lib AdaptiveImages?

Location:
_plugins_/adaptive_images/trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/adaptive_images/trunk/adaptive_images_options.php

    r79116 r79131  
    4242if (defined('_ADAPTIVE_IMAGES_MAX_WIDTH_MOBILE_VERSION'))
    4343        $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;
    4448
    4549// Pour generer chaque variante d'image uniquement quand elle est demandee pour la premiere fois
  • _plugins_/adaptive_images/trunk/lib/AdaptiveImages/AdaptiveImages.php

    r79116 r79131  
    33 * AdaptiveImages
    44 *
    5  * @version    1.0.0
     5 * @version    1.0.2
    66 * @copyright  2013
    77 * @author     Nursit
     
    9999        protected $destDirectory = "local/adapt-img/";
    100100
     101        /**
     102         * Maximum number of px for image that can be loaded in memory by GD
     103         * can be used to avoid Fatal Memory Error on large image if PHP memory limited
     104         * @var string
     105         */
     106        protected $maxImagePxGDMemoryLimit = 0;
    101107
    102108        /**
     
    169175         }
    170176         return self::$instance;
     177        }
     178
     179        /**
     180         * Log function for internal warning if we can avoid to throw an Exception
     181         * Do nothing, should be overriden with your personal log function
     182         * @param $message
     183         */
     184        protected function log($message){
     185
    171186        }
    172187
     
    875890         * @param int $quality
    876891         *   JPG quality
    877          * @return resource
     892         * @return string
     893         *   file name of the resized image (or source image if fail)
     894         * @throws Exception
    878895         */
    879896        function img2JPG($source, $destDir, $bgColor='#000000', $quality=85) {
     
    887904                $db= $couleurs["blue"];
    888905
    889                 $x_i = $infos["largeur"];
    890                 $y_i = $infos["hauteur"];
     906                $srcWidth = $infos["largeur"];
     907                $srcHeight = $infos["hauteur"];
    891908
    892909                if ($infos["creer"]) {
    893                         $im = @$infos["fonction_imagecreatefrom"]($infos["fichier"]);
     910                        if ($this->maxImagePxGDMemoryLimit AND $srcWidth*$srcHeight>$this->maxImagePxGDMemoryLimit){
     911                                $this->log("No resize allowed : image is " . $srcWidth*$srcHeight . "px, larger than ".$this->maxImagePxGDMemoryLimit."px");
     912                                return $infos["fichier"];
     913                        }
     914                        $fonction_imagecreatefrom = $infos['fonction_imagecreatefrom'];
     915
     916                        if (!function_exists($fonction_imagecreatefrom))
     917                                return $infos["fichier"];
     918                        $im = @$fonction_imagecreatefrom($infos["fichier"]);
     919
     920                        if (!$im){
     921                                throw new Exception("GD image creation fail for ".$infos["fichier"]);
     922                        }
     923
    894924                        $this->imagepalettetotruecolor($im);
    895                         $im_ = imagecreatetruecolor($x_i, $y_i);
     925                        $im_ = imagecreatetruecolor($srcWidth, $srcHeight);
    896926                        if ($infos["format_source"] == "gif" AND function_exists('ImageCopyResampled')) {
    897927                                // if was a transparent GIF
     
    900930                                @imagesavealpha($im_,true);
    901931                                if (function_exists("imageAntiAlias")) imageAntiAlias($im_,true);
    902                                 @ImageCopyResampled($im_, $im, 0, 0, 0, 0, $x_i, $y_i, $x_i, $y_i);
     932                                @ImageCopyResampled($im_, $im, 0, 0, 0, 0, $srcWidth, $srcHeight, $srcWidth, $srcHeight);
    903933                                imagedestroy($im);
    904934                                $im = $im_;
     
    910940                        imagefill ($im_, 0, 0, $color_t);
    911941
    912                         for ($x = 0; $x < $x_i; $x++) {
    913                                 for ($y=0; $y < $y_i; $y++) {
     942                        for ($x = 0; $x < $srcWidth; $x++) {
     943                                for ($y=0; $y < $srcHeight; $y++) {
    914944
    915945                                        $rgb = ImageColorAt($im, $x, $y);
     
    945975                        }
    946976                        $this->saveGDImage($im_, $infos, $quality);
     977                        if ($im!==$im_)
     978                                imagedestroy($im);
    947979                        imagedestroy($im_);
    948                         imagedestroy($im);
    949980                }
    950981                return $infos["fichier_dest"];
     
    961992         * @param int|null $quality
    962993         * @return string
     994         *   file name of the resized image (or source image if fail)
     995         * @throws Exception
    963996         */
    964997        function imgSharpResize($source, $destDir, $maxWidth = 0, $maxHeight = 0, $quality=null){
     
    9961029                }
    9971030                else {
    998                         if (defined('_IMG_GD_MAX_PIXELS') AND _IMG_GD_MAX_PIXELS AND $srcWidth*$srcHeight>_IMG_GD_MAX_PIXELS){
    999                                 spip_log("vignette gd1/gd2 impossible : " . $srcWidth*$srcHeight . "pixels");
     1031                        if ($this->maxImagePxGDMemoryLimit AND $srcWidth*$srcHeight>$this->maxImagePxGDMemoryLimit){
     1032                                $this->log("No resize allowed : image is " . $srcWidth*$srcHeight . "px, larger than ".$this->maxImagePxGDMemoryLimit."px");
    10001033                                return $srcFile;
    10011034                        }
    10021035                        $destExt = $infos['format_dest'];
    10031036                        if (!$destExt){
    1004                                 spip_log("pas de format pour $srcFile");
    1005                                 return $srcFile;
     1037                                throw new Exception("No output extension for {$srcFile}");
    10061038                        }
    10071039
     
    10121044                        $srcImage = @$fonction_imagecreatefrom($srcFile);
    10131045                        if (!$srcImage){
    1014                                 spip_log("echec gd1/gd2");
    1015                                 return $srcFile;
     1046                                throw new Exception("GD image creation fail for {$srcFile}");
    10161047                        }
    10171048
  • _plugins_/adaptive_images/trunk/lib/AdaptiveImages/README.md

    r79116 r79131  
    112112* JPG compression quality for 2x JPG images
    113113  <pre>$AdaptiveImage->x15JpgQuality = 45;</pre>
     114* GD maximum px size (width x height) of image that can be manipulated without Fatal Memory Error (0=no limit)
     115  <pre>$AdaptiveImage->maxImagePxGDMemoryLimit = 2000*2000;</pre>
     116
     117
     118## Real-life use case
     119
     120See the implementation in SPIP CMS :
     121http://zone.spip.org/trac/spip-zone/browser/_plugins_/adaptive_images/trunk/adaptive_images_options.php
  • _plugins_/adaptive_images/trunk/paquet.xml

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