Высоко сижу... Далеко гляжу... И вижу, что на форуме, по крайней мере forum.woweb.ru (а на других я не бываю, ибо отстой всё остальное) одной из наиболее частых тем является ресайз картинок. Посмотрев большинство скриптов - с уверенностью могу сказать, что в большинстве допущена одна и та же ошибка. А именно: фотография не правильно уменьшается, то есть она либо уменьшается не пропорционально и вокруг изображения остаётся рамка, либо изображение уменьшается криво.
Чаще всего это происходит из за того, что разработчики не хотят или не умеют посчитать новые размеры изображения. Возможно я в чём то не прав. Мозги у всех работают по разному. Но мной это было реализовано так и никак иначе. Потому, считаю своим долгом облегчить участь страждущих.
Изменение размера изображения.
//создаём формочку print "<form enctype="multipart/form-data" action=somescript.php?action=add>"; //а это на случай, если мы передаём новый MAX размер из формы //print "<input type=text name=w value=640>"; //print "<input type=text name=h value=480>"; print "<br><input type=file name=picture class=textbox><br><input type=submit class=button></form>";
if ($action==add) { //объявим имя для нового файла. $time=time(); $mtime=microtime(); $mtime=str_replace(" ",'',$mtime); $filename=$_SERVER['DOCUMENT_ROOT']."temp/$time.$mtime.tmp"; //теперь переместим его из темпа в тот файл который мы только что объявили move_uploaded_file($_FILES[picture][tmp_name],$filename) or die('Невозможно скопировать файл');; //Теперь определим тип файла, который мы залили if(eregi(".jpg$|.jpeg$",$_FILES[picture][name])) { $cop = imagecreatefromJpeg($file_s); } elseif(eregi(".png$",$_FILES[picture][name])) { $cop = imagecreatefrompng($file_s); } elseif(eregi(".gif$",$_FILES[picture][name])) { $cop = imagecreatefromgif($file_s); } else { //если зелито что то не то, то он пошлёт нафиг и удалит залитое die("Неправильный формат картинки"); @chmod($filaneme,0777); @unlink($filename); } //определим размер картинки $size = getimagesize($filename);
//Укажем новые размеры картинки, не более которых она должна быть //Если угодно, то их можно передать из формы или _getом //как раз на этот случай закомментировано 2 строчки //$max_width=$w; //$max_height=$h;
$max_width='640'; $max_height='480';
//посчитаем новые размеры картинки $width=$size[0]; $height=$size[1];
$time=time(); $mtime=microtime(); $mtime=str_replace(" ",'',$mtime); $filename2="$time.$mtime.jpg"; $trumb = imagecreatetruecolor($tn_width, $tn_height); $image=imagecopyresized($trumb, $cop, 0, 0, 0, 0, $tn_width, $tn_height, $width,$height); //хочу обратить внимение, что последним параметром (35) мы уменьшаем //качество изображения. //чтобы этого не делать поставьте "-1" ImageJpeg($trumb,$_SERVER['DOCUMENT_ROOT']."big/$filename2",35); ImageDestroy($trumb); //Если нам угодно, то мы можем повторить предыдущий процесс //чтобы сгенерировать кроме просто ресайзиного изображения //ещё и тумбочку, но тут и ежу понятно. И только после этого мы //освобождаем память ImageDestroy($cop); //и удаляем временный файл @chmod($filaneme,0777); @unlink($filename); print "Всё успешно залито."; }
Вот и всё. Всё предельно просто и легко. Мне это было необходимо для скрипта сайта знакомств, разбирался около 6 часов. Но если бы такая статья была здесь раньше - то всё было бы намного проще.
Для любителей надергать статьи с чужих сайтов: Эта статья была написана исключительно для сайта http://www.woweb.ru/. Если вы поместили её на свой сайт без разрешения администрации woweb.ru.