示例#1
0
文件: functions.php 项目: romlg/cms36
function ResampleImage($file_dir, $file_name, $size, $delete = false, $quality)
{
    $dot = strrpos($file_name, '.');
    $fext = substr($file_name, $dot);
    switch (strtolower($fext)) {
        case '.jpeg':
            // расширение не поддерживается:
        // расширение не поддерживается:
        case '.jpg':
            if (!function_exists('ImageCreateFromJPEG')) {
                return false;
            }
            break;
        case '.gif':
            if (!function_exists('ImageCreateFromGIF')) {
                return false;
            }
            break;
        case '.png':
            if (!function_exists('ImageCreateFromPNG')) {
                return false;
            }
            break;
        default:
            return false;
    }
    $img_size = @GetImageSize($file_dir . '/' . $file_name);
    if ($img_size[2] > 3) {
        return false;
    }
    # 1-GIF;2-JPG;3-PNG
    if (isset($size[1])) {
        $new_size = ImageSize2($img_size, $size[0], $size[1]);
    } else {
        $new_size = ImageSize2($img_size, $size[0]);
    }
    if ($img_size[0] == $new_size[0] && $img_size[1] == $new_size[1]) {
        $ret = $file_dir . '/' . $file_name;
        return imgpath($ret);
        # No changes needed
    }
    switch ($img_size[2]) {
        case 1:
            $src = @ImageCreateFromGIF($file_dir . '/' . $file_name);
            break;
        case 2:
            $src = @ImageCreateFromJPEG($file_dir . '/' . $file_name);
            break;
        case 3:
            $src = @ImageCreateFromPNG($file_dir . '/' . $file_name);
            break;
    }
    if (!$src) {
        return $file_name;
    }
    if ($img_size[2] != '1' && function_exists('ImageCreateTrueColor')) {
        # GIF не поддерживается
        $dst = ImageCreateTrueColor($new_size[0], $new_size[1]);
        ImageCopyResampled($dst, $src, 0, 0, 0, 0, $new_size[0], $new_size[1], $img_size[0], $img_size[1]);
    } else {
        $dst = ImageCreateTrueColor($new_size[0], $new_size[1]);
        $trans_color = imagecolorallocate($dst, 255, 0, 0);
        $color = imagecolorallocate($dst, 255, 255, 255);
        imagecolortransparent($dst, $trans_color);
        ImageCopyResized($dst, $src, 0, 0, 0, 0, $new_size[0], $new_size[1], $img_size[0], $img_size[1]);
    }
    if (!$delete) {
        switch ($img_size[2]) {
            case 1:
                ImageGIF($dst, $file_dir . '/' . $file_name . '1');
                break;
            case 2:
                ImageJPEG($dst, $file_dir . '/' . $file_name . '1', $quality);
                break;
            case 3:
                ImagePNG($dst, $file_dir . '/' . $file_name . '1');
                break;
        }
    } else {
        switch ($img_size[2]) {
            case 1:
                ImageGIF($dst, $file_dir . '/' . $file_name);
                break;
            case 2:
                ImageJPEG($dst, $file_dir . '/' . $file_name, $quality);
                break;
            case 3:
                ImagePNG($dst, $file_dir . '/' . $file_name);
                break;
        }
    }
    ImageDestroy($src);
    ImageDestroy($dst);
    $new_name = new_file_name($file_name, "_" . $size[0]);
    if (file_exists($file_dir . '/' . $new_name)) {
        $num = 1;
        while (file_exists($file_dir . '/' . new_file_name($file_name, '[' . $num . ']' . "_" . $size[0]))) {
            $num++;
        }
        $new_name = new_file_name($file_name, '[' . $num . ']' . "_" . $size[0]);
    }
    if (!$delete) {
        rename($file_dir . '/' . $file_name . '1', $file_dir . '/' . $new_name);
    } else {
        rename($file_dir . '/' . $file_name, $file_dir . '/' . $new_name);
    }
    $ret = $file_dir . '/' . $new_name;
    return imgpath($ret);
}
示例#2
0
文件: fm2.php 项目: romlg/cms36
 function EditDownload()
 {
     $dir = get("down_dir", 'null', 'gp');
     $vdir = $this->verifyDir($dir);
     if (!is_array($vdir)) {
         $vdir = $this->getStartDir();
     }
     $dir = $vdir['dir'];
     $width = get("width", 0, 'gp');
     $height = get("height", 0, 'gp');
     $file = isset($_FILES['file']) ? $_FILES['file'] : "";
     if ($width != 0 || $height != 0) {
         $size = array($width, $height);
     }
     if (!empty($file)) {
         # находим несуществующее имя
         $file_name = GetPureName($file['name']);
         # уменьшаем рассширение файла, для номрального просмотра в fm
         $dot = strrpos($file_name, '.');
         $ext = strtolower(substr($file_name, $dot, strlen($file_name) - $dot));
         if (in_array($ext, $this->deny)) {
             echo "<script>alert('Вы не можете закачивать файлы с таким расширением.');</script>";
             return;
         }
         $file_name = substr($file_name, 0, $dot) . $ext;
         if (file_exists($this->SlashSep($dir, $file_name))) {
             $num = 1;
             while (file_exists($this->SlashSep($dir, new_file_name($file_name, '[' . $num . ']')))) {
                 $num++;
             }
             $file_name = new_file_name($file_name, '[' . $num . ']');
         }
         $file_put = $this->SlashSep($dir, $file_name);
         if (!move_uploaded_file($file['tmp_name'], $file_put)) {
             echo "<script>alert('Ошибка загрузки файла');</script>";
         }
         @chmod($file_put, FILES_MOD);
         @chown($file_put, fileowner($_SERVER['SCRIPT_FILENAME']));
         @chgrp($file_put, filegroup($_SERVER['SCRIPT_FILENAME']));
         # Ресайз
         if (!empty($size)) {
             $quality = sql_getValue('SELECT value FROM strings WHERE name="resize_quality" AND module="site" AND root_id=' . domainRootId() . ' AND lang="' . lang() . '"');
             if (!$quality) {
                 $quality = 85;
             }
             $file_name = ResampleImage($dir, $file_name, $size, false, $quality);
         }
         if (get('watermark', false, 'gp')) {
             $data = $this->config;
             $watermark = $data['module']['watermark_file'];
             if (!is_file(".." . $watermark)) {
                 echo "<script>alert('Не найден файл с водяным знаком!');</script>";
                 die;
             }
             $this->addWaterMark($file_name, ".." . $watermark);
         }
     }
     echo "\n\t\t<script>\n\t\tparent.openDir('" . $dir . "');\n\t\tparent.hideDownloadFrom();\n\t\tparent.stopMainLoad();\n\t\t</script>\n\t\t";
 }