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


Автор: fregs 25.3.2005, 12:14
в загадках
меняю размеры изображения..
а в результате почему то выходит ерунда.. результирующее изображение ллибо сильно искажается либо вообще черный прямоугольник...
в чем проблема непонимаю

вот код:
Код

// reading image type
                $r_img = @imagecreatefromjpeg($_FILES['file']['tmp_name']);
                if (!$r_img) $r_img = @imagecreatefromgif($_FILES['file']['tmp_name']);
                if (!$r_img) $r_img = @imagecreatefrompng($_FILES['file']['tmp_name']);
                if ($r_img) {
                    $i_img_x = imagesx($r_img);
                    $i_img_y = imagesy($r_img);
                    $i_x_ratio = $_max_img_w / $i_img_x ;
                    $i_y_ratio = $_max_img_h / $i_img_y ;
                    if (($i_x_ratio < 1) || ($i_y_ratio < 1)){
                        if ($i_x_ratio < $i_y_ratio){
                            $i_img_x2 = $_max_img_w;
                            $i_img_y2 = round($i_img_y * $i_x_ratio);
                            $r_img2 = imagecreate($i_img_x2, $i_img_y2);
                            imagecopyresampled($r_img2, $r_img, 0,0,0,0, $i_img_x2, $i_img_y2, $i_img_x, $i_img_y);
                        } else {
                            $i_img_y2 = $_max_img_h;
                            $i_img_x2 = round($i_img_x * $i_y_ratio);
                            $r_img2 = imagecreate($i_img_x2, $i_img_y2);
                            imagecopyresampled($r_img2, $r_img, 0,0,0,0, $i_img_x2, $i_img_y2, $i_img_x, $i_img_y);
                        } //end resize
                    } else {
                        $r_img2 = imagecreate($i_img_x, $i_img_y);
                        imagecopy($r_img2, $r_img, 0,0,0,0, $i_img_x, $i_img_y);
                    }// end image > max
                    imagejpeg($r_img2, $_img_dir.$_POST['dtm'].'.jpg',99);
                    imagedestroy($r_img2);
                    imagedestroy($r_img);
                    $_POST['img'] = $_POST['dtm'].'.jpg';
                } else {
                    $s_err = 'Не удалось открыть файл! Файл неизвестного типа!';
                } // end reading image type

Автор: Mal Hack 25.3.2005, 13:40
Ты сделай сначала для одного формата, а потом будешь остальные прикручивать.
К тому же. У тебя 3 раза imagecreatefrom на 3 разных формата, а а imagecreate только на 1 - JPG

Автор: fregs 25.3.2005, 14:31
Mal Hack

Цитата
У тебя 3 раза imagecreatefrom на 3 разных формата, а а imagecreate только на 1 - JPG


так задумано... не знаю какого формата будет входной файл... выходной в любом случае Jpeg

по вопросу...
была ошибка при изменении размера, где не нашел..
написал отдельную функцию... теперь работает...
если кому надо - вот код
Код

/* image_resize()
  возвращаем img */
  function image_resize ( $r_img, $i_max_img_width, $i_max_img_heigth, $i_bg = 0 ) {
    $f_aspect = $i_max_img_width / $i_max_img_heigth; 
         
    $i_img_x = imagesx($r_img); 
    $i_img_y = imagesy($r_img); 
    $f_aspect2 = $i_img_x / $i_img_y; 

    $f_delta = $f_aspect < $f_aspect2 ? $i_max_img_width/$i_img_x : $i_max_img_heigth/$i_img_y; 
    $i_img_x2 = floor($i_img_x*$f_delta); 
    $i_img_y2 = floor($i_img_y*$f_delta); 
        
        $r_img2 = imagecreatetruecolor($i_img_x2, $i_img_y2); 
    imagefill($r_img2,0,0,$i_bg); 
        
    imagecopyresampled($r_img2, $r_img, 0,0,0,0, $i_img_x2,$i_img_y2,$i_img_x,$i_img_y); 
        return $r_img2;
  } // END of  image_resize()

Автор: Aliance 8.5.2005, 13:27
А как ее подключать-то?

Автор: Mal Hack 8.5.2005, 20:11
Цитата(Aliance @ 8.5.2005, 14:27)
А как ее подключать-то?

Кого? GD? Поюзай поиск было уже.
Или функцию? ей параметры картинки и указатель на нее передается.

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