Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [PHP]изменение размера картинки


Автор: dembel14 25.9.2008, 23:20
Добрый день, подскажите код, который уменьшает картинку при загрузке, желательно, чтобы в коде была переменная в которую записывается адрес картинки, и переменная в которую записывается директория для сохранения.
Заранее спасибо.

Автор: bars80080 26.9.2008, 09:41
использую это:
Код
function img_resize($src, $dest, $width, $height, $rgb=0xFFFFFF, $proportion=false, $quality=100) {
    if(!file_exists($src)) return false;
    $size = getimagesize($src);
    if($size === false) return false;   
    if($proportion === true) {
        $h0 = $height;
        $height = ($width/$size[0])*$size[1];
        if($height > $h0) { $height = $h0; $width = ($height/$size[1])*$size[0]; }}
    if($width > $size[0]) $width = $size[0];
    if($height > $size[1]) $height = $size[1];
    $format = strtolower(substr($size['mime'], strpos($size['mime'], '/') + 1));
    $icfunc = 'imagecreatefrom'.$format;
    if(!function_exists($icfunc)) return false;
    $x_ratio = $width/$size[0];
    $y_ratio = $height/$size[1];
    $ratio = min($x_ratio, $y_ratio);
    $use_x_ratio = ($x_ratio == $ratio);
    if($use_x_ratio) { $new_width = $width; $new_left = 0; } 
    else { $new_width = floor($size[0] * $ratio); $new_left = floor(($width - $new_width) / 2); }
    if(!$use_x_ratio) { $new_height = $height; $new_top = 0; }
    else { $new_height = floor($size[1] * $ratio); $new_top = floor(($height - $new_height) / 2); }
    $isrc = $icfunc($src);
    $idest = imagecreatetruecolor($width, $height);
    if(is_array($dest)) { 
        $nd = explode('.', $src); 
        $ndc = count($nd); 
        $nd[$ndc - 2] .= $dest[0]; $dest = implode('.', $nd); }
    imagefill($idest, 0, 0, $rgb);
    imagecopyresampled($idest, $isrc, $new_left, $new_top, 0, 0, $new_width, $new_height, $size[0], $size[1]);
    imagejpeg($idest, $dest, $quality);
    imagedestroy($isrc);
    imagedestroy($idest);
    return $dest; }

function upLoader($userfile, $uploaddir = 'upload', $save = 'image', $data = array(160, 120, true, 100), $copy = 'true', $newname = '') {
    global $mistake, $BASE_DIR;          
    $temp = $_FILES[$userfile]['tmp_name'];
    $name = $_FILES[$userfile]['name']; echo $name;
    $size = $_FILES[$userfile]['size'];
    $type = $_FILES[$userfile]['type'];
    $error = $_FILES[$userfile]['error']; $b = false;
    if(strlen($name) > 3) { $type = strtolower(substr($name, -4)); } else $type = '';
    if(!empty($newname)) { 
        $name = $newname;
        if(strlen($name) > 3) { $type1 = strtolower(substr($name, -4)); } else $type1 = '';
        if($save == 'image' && $type != $type1) { 
            if($type == '.jpg' || $type == '.gif' || $type == '.png') {
                $name .= $type;
            }
            elseif($type == 'jpeg') { $name .= '.'.$type; }
        }
    }
    
    if($error > 0) { 
        $mistake = 'Загрузка не выполнена: '.$name.' '; switch($error) {
            case 1: $mistake .= 'размер файла больше upload_max_filesize'; break;
            case 2: $mistake .= 'размер файла больше max_file_size'; break;
            case 3: $mistake .= 'загружена только часть файла'; break;
            case 4: $mistake .= 'файл не загружен'; break; }
        return $b; }
    $upfile = $uploaddir.'/'.$name; 
    @mkdir($uploaddir, 0755);
    if(is_uploaded_file($temp)) {
        if(!move_uploaded_file($temp, $upfile)) {          
            $mistake = 'Невозможно переслать файл в каталог назначения'; return $b; }}
    else { $mistake = 'Возможно атака через загрузку файла. Файл: '.$name; return $b; }
    $mistake = 'Файл успешно загружен '.$name; $res = strstr($upfile, '../');
    if($res) { $res1 = explode('../', $upfile); $upfile = $res1[1]; }
    $b = $upfile;
    if(strstr($b, $BASE_DIR)) {
        $a = strlen($BASE_DIR);
        $b = substr($upfile, $a); }
    if($save == 'image' and $copy == 'true') {
        $b = img_resize($b, array('_small'), $data[0], $data[1], '', $data[2], $data[3]); }
    return $b;    
}


использовать так:

1. в форме пишем два поля:
Код

<form action="" method="post" enctype="multipart/form-data">
<input type="file" name="pict" />
<input type="hidden" name="MAX_FILE_SIZE" value="500000" />
...
второе поле - одно на всю форму, указывает максимальный объём пересылаемых данных

2. в обработчике пхп, пишем:
Код
$res = upLoader('pict', 'catalog');
, где первый параметр - имя поля, второй - папка, куда сохранить
в $res получаем путь сохранённой картинки.
далее там много опций, которыми можно и не пользоваться. сам разберёшься

может конечно и не работать, так как выдрано из контекста, но функции рабочие

Автор: dembel14 28.9.2008, 19:33
bars80080,  не работает

Автор: bars80080 28.9.2008, 20:36
надо настраивать и проверять по этапно

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)