Ejemplo n.º 1
0
 public static function scaleImage($group, $imageUrl, $scale = 1, $resizeRemote = false)
 {
     $originalImageUrl = $imageUrl;
     $imageUrl = N2ImageHelper::fixed($imageUrl);
     if ($scale > 0 && function_exists('exif_imagetype') && function_exists('imagecreatefrompng')) {
         if (substr($imageUrl, 0, 2) == '//') {
             $imageUrl = parse_url(N2Uri::getBaseuri(), PHP_URL_SCHEME) . ':' . $imageUrl;
         }
         $imageUrl = N2Uri::relativetoabsolute($imageUrl);
         $imagePath = N2Filesystem::absoluteURLToPath($imageUrl);
         $cache = new self($group);
         if ($imagePath == $imageUrl) {
             // The image is not local
             if (!$resizeRemote) {
                 return $originalImageUrl;
             }
             $pathInfo = pathinfo(parse_url($imageUrl, PHP_URL_PATH));
             $extension = self::validateExtension($pathInfo['extension']);
             if (!$extension) {
                 return $originalImageUrl;
             }
             return N2ImageHelper::dynamic(N2Filesystem::pathToAbsoluteURL($cache->makeCache($extension, array($cache, '_scaleRemoteImage'), array($extension, $imageUrl, $scale))));
         } else {
             $extension = false;
             $imageType = @exif_imagetype($imagePath);
             switch ($imageType) {
                 case IMAGETYPE_JPEG:
                     $extension = 'jpg';
                     break;
                 case IMAGETYPE_PNG:
                     $extension = 'png';
                     $fp = fopen($imagePath, 'r');
                     fseek($fp, 25);
                     $data = fgets($fp, 2);
                     fclose($fp);
                     if (ord($data) == 3) {
                         // GD cannot resize palette PNG so we return the original image
                         return $originalImageUrl;
                     }
                     break;
             }
             if (!$extension) {
                 throw new Exception('Filtype of the image is not supported: #' . $imageType . ' code  ' . $imagePath);
             }
             return N2ImageHelper::dynamic(N2Filesystem::pathToAbsoluteURL($cache->makeCache($extension, array($cache, '_scaleImage'), array($extension, $imagePath, $scale, filemtime($imagePath)))));
         }
     }
 }
Ejemplo n.º 2
0
 public function replaceHTMLImage($found)
 {
     $path = N2Filesystem::absoluteURLToPath(self::addProtocol($found[2]));
     if ($path == $found[2]) {
         return $found[0];
     }
     if (N2Filesystem::fileexists($path)) {
         if (!isset($this->imageTranslation[$path])) {
             $fileName = strtolower(basename($path));
             while (in_array($fileName, $this->usedNames)) {
                 $fileName = $this->uniqueCounter . $fileName;
                 $this->uniqueCounter++;
             }
             $this->usedNames[] = $fileName;
             $this->files['images/' . $fileName] = file_get_contents($path);
             $this->imageTranslation[$path] = $fileName;
         } else {
             $fileName = $this->imageTranslation[$path];
         }
         return str_replace($found[2], 'images/' . $fileName, $found[0]);
     } else {
         return $found[0];
     }
 }