Замена функции imagecopyresized на imagecopyresampled в модуле загрузки изображений

В настоящее время я работаю над веб-сайтом на основе Pligg CMS, и его модуль загрузки изображений по умолчанию, который прикрепляет миниатюры к сообщениям из предоставленных пользователем ссылок, использует библиотеку PHP GD для обработки изображений. Полученные эскизы имеют пониженное качество, и после небольшого поиска в Интернете я обнаружил, что мне следует заменить функцию imagecopyresized на imagecopyresampled.

Основная проблема в том, что я новичок в веб-разработке и не знаю, с чего начать. Кусок кода я думаю (поэтому, возможно, неправильный) отвечает за обработку изображения и нуждается в редактировании:

// create a new temporary image
$tmp_img = imagecreatetruecolor( $new_width, $new_height );

// copy and resize old image into new image 
while (file_exists("$thumb_dir/$name$i.jpg")) $i++;
$name = "$name$i.jpg";

imagecopyresized( $tmp_img, $img, 0, 0, 0, 0, $new_width, $new_height, $width, $height );

if (!imagejpeg( $tmp_img, "$thumb_dir/$name",$settings['quality'] ))
    $error .= "Can't create thumbnail $thumb_dir/$name";
else
    $db->query("INSERT INTO ".table_prefix."files 
            SET file_size='$size',
                file_orig_id='$orig_id',
                file_user_id={$current_user->user_id},
                file_link_id=$link_id,
                file_ispicture=1,
                file_comment_id='".$db->escape($_POST['comment'])."',
                file_real_size='".filesize("$thumb_dir/$name")."',
                file_name='".$db->escape($name)."'");
}
return $error;

Из того, что я вижу, изображение сначала обрабатывается с помощью функции imagecreatruecolor в новый tmp_img, который затем обрабатывается с помощью функции imagecopyresized.

Поскольку у меня нет опыта, я не могу сказать, является ли это правильным путем для изменения размера изображения XY без снижения его качества. Должен ли я заменить imagecreatetruecolor и imagecopyresized на imagecopyresampled?


person dvsn    schedule 21.05.2016    source источник


Ответы (1)


imagecopyresized и imagecopyresampled имеют идентичные требования к параметрам, поэтому вы можете просто изменить имя функции в следующей строке:

imagecopyresized( $tmp_img, $img, 0, 0, 0, 0, $new_width, $new_height, $width, $height );

Все остальное должно остаться прежним.

Обратите внимание, что ваш код уязвим для внедрения SQL. Прочтите и начните использовать подготовленные операторы.

person timclutton    schedule 22.05.2016