Уменьшить картинку сохраняя пропорции

Статус
В этой теме нельзя размещать новые ответы.

verfaa

Профессор
Регистрация
29 Янв 2007
Сообщения
416
Реакции
49
Юзер через форму загружает фото на сайт. Если картинка по ширине больше 1920 нужно уменьшить её до ширины 1920, сохраняя пропорции, т.е. рассчитать необходимую высоту. Вот кусок кода из скрипта-обработчика:
Код:
if(isset($_FILES["file"])) {
            $upload = $_FILES["file"];
        }
 
foreach ($upload['tmp_name'] as $index => $value) {
$upload_info = GetImageSize($upload["tmp_name"][$index]); // Получаем ширину/высоту картинки
 
 
 
$ex_arr = explode(".",$upload['name'][$index]);
$extension = $ex_arr[count($ex_arr)-1];
$new_file_name = substr(md5(microtime().getmypid()), 0, 8).".".$extension;
 
 
if ($upload_info[0] > 1920) { // Если ширина картинки больше 1920 - уменьшаем её, сохраняя пропорции
    $ratio = 1920 / $upload_info[0];
    $height = $upload_info[1] * $ratio;
    $new_image = imagecreatetruecolor(1920, $height);
    $im = imagecreatefromjpeg($upload["tmp_name"][$index]);
    imagecopyresampled($new_image, $im, 0, 0, 0, 0, 1920, $height, $upload_info[0], $upload_info[1]);
 
}
 
copy($new_image, dirname(__FILE__).'/upload/'.$new_file_name);
 
        }
Но этот код не работает - новая картинка не создаётся...

Пробовал вместо
Код:
    $im = imagecreatefromjpeg($upload["tmp_name"][$index]);
    imagecopyresampled($new_image, $im, 0, 0, 0, 0, 1920, $height, $upload_info[0], $upload_info[1]);
написать:
Код:
imagecopyresampled($new_image, $upload["tmp_name"][$index], 0, 0, 0, 0, 1920, $height, $upload_info[0], $upload_info[1]);

тоже не хочет работать - уменьшенная картинка не создаётся, вернее вообще никакая не создаётся.

А если просто написать
Код:
copy($upload["tmp_name"][$index], dirname(__FILE__).'/upload/'.$new_file_name);
то новый файл успешно создаётся в нужно папке, только естессно не уменьшенный, т.е. ошибка кроется где-то в этом участке кода:
Код:
    $im = imagecreatefromjpeg($upload["tmp_name"][$index]);
    imagecopyresampled($new_image, $im, 0, 0, 0, 0, 1920, $height, $upload_info[0], $upload_info[1]);
 
}
 
 
copy($new_image, dirname(__FILE__).'/upload/'.$new_file_name);
Помогите пожалуйста найти её
 
99% не стоит php-gd библиотека, для debian: apt-get install php5-gd
посмотри в phpinfo, или просто сделай var_dump($upload_info); break;
 
Ещё один велосипед.. зачем? Есть куча php классов для таких целей, которые работают отлично. И функция imagecopyresampled работает сама по себе очень медленно, стоит рассмотреть альтернативы.
 
php-gd конечно же есть, дело не в ней было. А решилось всё очень просто:
Код:
    $im = imagecreatefromjpeg($upload["tmp_name"][$index]);
    imagecopyresampled($new_image, $im, 0, 0, 0, 0, 1920, $height, $upload_info[0], $upload_info[1]);
    
    imagejpeg($new_image, dirname(__FILE__).'/uploades/".$new_file_name);

на гугл ответах почти сразу дали верный ответ, а тут столько прогеров и никто не знал, странно...(
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху