예제 #1
0
파일: image.php 프로젝트: pguilford/vcomcc
 function resizeImage($imageurl, $width, $height, $mode = 'cover', $resizeremote = false)
 {
     $originalimageurl = $imageurl;
     if ($width > 0 && $height > 0 && function_exists('exif_imagetype') && function_exists('imagecreatefrompng')) {
         $extra = array();
         if (substr($imageurl, 0, 2) == '//') {
             $imageurl = parse_url(NextendUri::getBaseuri(), PHP_URL_SCHEME) . ':' . $imageurl;
         }
         $imageurl = NextendUri::relativetoabsolute($imageurl);
         $imagepath = NextendFilesystem::absoluteURLToPath($imageurl);
         if ($imagepath == $imageurl) {
             if (!$resizeremote) {
                 return $originalimageurl;
             }
             $imagepath = parse_url($imageurl, PHP_URL_PATH);
         } else {
             $extra[] = @filemtime($imagepath);
             $imageurl = $imagepath;
         }
         $extension = strtolower(pathinfo($imagepath, PATHINFO_EXTENSION));
         $filetype = '';
         if ($extension == 'png') {
             $filetype = 'png';
         } else {
             if ($extension == 'jpg' || $extension == 'jpeg') {
                 $filetype = 'jpg';
             }
         }
         if ($filetype != '') {
             $hash = $this->createHashFromArray(array_merge(func_get_args(), $this->backgrouncolor, $extra));
             $cachefile = $this->_folder . $hash . '.' . $filetype;
             if (!NextendFilesystem::existsFile($cachefile)) {
                 $imagetype = @exif_imagetype($imageurl);
                 if ($imagetype) {
                     if ($imagetype == IMAGETYPE_PNG) {
                         $filetype = 'png';
                     } else {
                         if ($imagetype == IMAGETYPE_JPEG) {
                             $filetype = 'jpg';
                         } else {
                             $filetype = '';
                         }
                     }
                     if ($filetype) {
                         $img = null;
                         $rotated = null;
                         if ($filetype == 'png') {
                             $img = @imagecreatefrompng($imageurl);
                         } else {
                             if ($filetype == 'jpg') {
                                 $img = @imagecreatefromjpeg($imageurl);
                                 if (function_exists("exif_read_data")) {
                                     $exif = exif_read_data($imageurl);
                                     if ($exif && !empty($exif['Orientation'])) {
                                         switch ($exif['Orientation']) {
                                             case 3:
                                                 $rotated = imagerotate($img, 180, 0);
                                                 break;
                                             case 6:
                                                 $rotated = imagerotate($img, -90, 0);
                                                 break;
                                             case 8:
                                                 $rotated = imagerotate($img, 90, 0);
                                                 break;
                                         }
                                     }
                                     if ($rotated) {
                                         imagedestroy($img);
                                         $img = $rotated;
                                     }
                                 }
                             }
                         }
                         if ($img) {
                             $owidth = imagesx($img);
                             $oheight = imagesy($img);
                             if ($rotated || $owidth != $width || $oheight != $height) {
                                 $image = imagecreatetruecolor($width, $height);
                                 if ($filetype == 'png') {
                                     imagesavealpha($image, true);
                                     imagealphablending($image, false);
                                     $white = imagecolorallocatealpha($image, 255, 255, 255, 127);
                                     imagefilledrectangle($image, 0, 0, $width, $height, $white);
                                 } else {
                                     if ($filetype == 'jpg') {
                                         $bg = imagecolorallocate($image, $this->backgrouncolor[0], $this->backgrouncolor[1], $this->backgrouncolor[2]);
                                         imagefilledrectangle($image, 0, 0, $width, $height, $bg);
                                     }
                                 }
                                 $dst_x = 0;
                                 $dst_y = 0;
                                 $src_x = 0;
                                 $src_y = 0;
                                 $dst_w = $width;
                                 $dst_h = $height;
                                 $src_w = $owidth;
                                 $src_h = $oheight;
                                 $horizontalRatio = $width / $owidth;
                                 $verticalRatio = $height / $oheight;
                                 if ($mode == 'cover') {
                                     if ($horizontalRatio > $verticalRatio) {
                                         $new_h = $horizontalRatio * $oheight;
                                         $dst_y = ($height - $new_h) / 2;
                                         $dst_h = $new_h;
                                     } else {
                                         $new_w = $verticalRatio * $owidth;
                                         $dst_x = ($width - $new_w) / 2;
                                         $dst_w = $new_w;
                                     }
                                 } else {
                                     if ($mode == 'contain') {
                                         if ($horizontalRatio < $verticalRatio) {
                                             $new_h = $horizontalRatio * $oheight;
                                             $dst_y = ($height - $new_h) / 2;
                                             $dst_h = $new_h;
                                         } else {
                                             $new_w = $verticalRatio * $owidth;
                                             $dst_x = ($width - $new_w) / 2;
                                             $dst_w = $new_w;
                                         }
                                     }
                                 }
                                 imagecopyresampled($image, $img, $dst_x, $dst_y, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h);
                                 imagedestroy($img);
                                 if ($filetype == 'png') {
                                     imagepng($image, $cachefile);
                                 } else {
                                     if ($filetype == 'jpg') {
                                         imagejpeg($image, $cachefile, 100);
                                     }
                                 }
                                 imagedestroy($image);
                                 return NextendFilesystem::pathToAbsoluteURL($cachefile);
                             } else {
                                 imagedestroy($img);
                             }
                         }
                     }
                 }
             } else {
                 return NextendFilesystem::pathToAbsoluteURL($cachefile);
             }
         }
     }
     return $originalimageurl;
 }