Не очень хорошо шарю в php. код сохраняет картинку 90х90 в базу и в папку, а картинку 250х250 сохраняет только в базу. Помогите пожалуйста с этой проблемой. Код (PHP): if ($_POST['submit'] == 'Зарегистрировать') { $err = array(); if (empty($_FILES['fupload']['name'])) { //если переменной не существует (пользователь не отправил изображение),то присваиваем ему заранее приготовленную картинку с надписью "нет аватара" $image = "net-small-logo.png"; //можете нарисовать net-logo.jpg или взять в исходниках } else { //иначе - загружаем изображение пользователя $path_to_directory = 'images/tovars/'; //папка, куда будет загружаться начальная картинка и ее сжатая копия if (preg_match('/[.](JPG)|(jpg)|(jpeg)|(gif)|(GIF)|(png)|(PNG)$/', $_FILES['fupload']['name'])) {//проверка формата исходного изображения $filename = $_FILES['fupload']['name']; $source = $_FILES['fupload']['tmp_name']; $target = $path_to_directory . $filename; move_uploaded_file($source, $target); //загрузка оригинала в папку $path_to_90_directory if (preg_match('/[.](GIF)|(gif)$/', $filename)) { $im = imagecreatefromgif($path_to_directory . $filename); //если оригинал был в формате gif, то создаем изображение в этом же формате. Необходимо для последующего сжатия } if (preg_match('/[.](PNG)|(png)$/', $filename)) { $im = imagecreatefrompng($path_to_directory . $filename); //если оригинал был в формате png, то создаем изображение в этом же формате. Необходимо для последующего сжатия } if (preg_match('/[.](JPG)|(jpg)|(jpeg)|(JPEG)$/', $filename)) { $im = imagecreatefromjpeg($path_to_directory . $filename); //если оригинал был в формате jpg, то создаем изображение в этом же формате. Необходимо для последующего сжатия } if (preg_match('/[.](JPG)|(jpg)|(jpeg)|(JPEG)$/', $filename)) { $im = imagecreatefromjpeg($path_to_directory . $filename); //если оригинал был в формате jpg, то создаем изображение в этом же формате. Необходимо для последующего сжатия } $w = 90; $w_src = imagesx($im); //вычисляем ширину $h_src = imagesy($im); //вычисляем высоту изображения $s = 250; $w_srcl = imagesx($im); //вычисляем ширину $h_srcl = imagesy($im); //вычисляем высоту изображения $dest = imagecreatetruecolor($w, $w); // вырезаем квадратную серединку по x, если фото горизонтальное if ($w_src > $h_src) imagecopyresampled($dest, $im, 0, 0, round((max($w_src, $h_src) - min($w_src, $h_src)) / 2), 0, $w, $w, min($w_src, $h_src), min($w_src, $h_src)); if ($w_srcl > $h_srcl) imagecopyresampled($dest, $im, 0, 0, round((max($w_srcl, $h_srcl) - min($w_srcl, $h_srcl)) / 2), 0, $s, $s, min($w_srcl, $h_srcl), min($w_srcl, $h_srcl)); // вырезаем квадратную верхушку по y, // если фото вертикальное (хотя можно тоже серединку) if ($w_src < $h_src) imagecopyresampled($dest, $im, 0, 0, 0, 0, $w, $w, min($w_src, $h_src), min($w_src, $h_src)); if ($w_srcl < $h_srcl) imagecopyresampled($dest, $iml, 0, 0, 0, 0, $s, $s, min($w_srcl, $h_srcl), min($w_srcl, $h_srcl)); // квадратная картинка масштабируется без вырезок if ($w_src == $h_src) imagecopyresampled($dest, $im, 0, 0, 0, 0, $w, $w, $w_src, $w_src); if ($w_srcl == $h_srcl) imagecopyresampled($dest, $im, 0, 0, 0, 0, $s, $s, $w_srcl, $w_srcl); $date = time(); //вычисляем время в настоящий момент. imagejpeg($dest, $path_to_directory . $date . ".png"); $image = $date . ".png"; //заносим в переменную путь до аватара. //удаляем оригинал загруженного изображения, он нам больше не нужен. Задачей было - получить миниатюру. $big_image = "a" . $date . ".png"; } else { //в случае несоответствия формата, выдаем соответствующее сообщение exit("Логотип должен быть в формате <strong>JPG,GIF или PNG</strong>"); //останавливаем выполнение сценариев } }
Вы пытаетесь сохранить эти разные файлы с одним и тем же именем. http://php.ru/manual/function.imagecopyresampled.html первый параметр - это имя файла куда сохранить изображение. Очевидно, что для двух разных файлов стоит иметь и два разных имени.
Не совсем понял: первый параметр-это имя файла, куда сохранить изображение. У меня не два разных файла, а один файл который нужно сохранить под разными именами и разными размерами. если смотреть по мануалу то, у меня должен отличаться второй параметр в imagecopyresampled, в котором храниться путь к файлу и его имя. Немного ковырнув понял, что ошибка в Код (PHP): imagejpeg($destl, $path_to_directory ."a". $date . ".png") .
Спасибо все работает. Я просто тот же сайт до сих-пор делаю, теперь он еще и магазин. Вот, разделил на два условия, чтобы не путаться. Код (PHP): if ($_POST['submit'] == 'Зарегистрировать') { $err = array(); if (empty($_FILES['fupload']['name'])) { $image = "net-small-logo.png"; $big_image = "net-logo.png"; } else { //иначе - загружаем изображение пользователя $path_to_directory = 'images/tovars/'; //папка, куда будет загружаться начальная картинка и ее сжатая копия if (preg_match('/[.](JPG)|(jpg)|(jpeg)|(gif)|(GIF)|(png)|(PNG)$/', $_FILES['fupload']['name'])) {//проверка формата исходного изображения $filename = $_FILES['fupload']['name']; $source = $_FILES['fupload']['tmp_name']; $target = $path_to_directory . $filename; move_uploaded_file($source, $target); if (preg_match('/[.](GIF)|(gif)$/', $filename)) { $im = imagecreatefromgif($path_to_directory . $filename); //если оригинал был в формате gif, то создаем изображение в этом же формате. Необходимо для последующего сжатия } if (preg_match('/[.](PNG)|(png)$/', $filename)) { $im = imagecreatefrompng($path_to_directory . $filename); //если оригинал был в формате png, то создаем изображение в этом же формате. Необходимо для последующего сжатия } if (preg_match('/[.](JPG)|(jpg)|(jpeg)|(JPEG)$/', $filename)) { $im = imagecreatefromjpeg($path_to_directory . $filename); } $w = 90; $w_src = imagesx($im); //вычисляем ширину $h_src = imagesy($im); //вычисляем высоту изображения $dest = imagecreatetruecolor($w, $w); // вырезаем квадратную серединку по x, если фото горизонтальное if ($w_src > $h_src) imagecopyresampled($dest, $im, 0, 0, round((max($w_src, $h_src) - min($w_src, $h_src)) / 2), 0, $w, $w, min($w_src, $h_src), min($w_src, $h_src)); // вырезаем квадратную верхушку по y, // если фото вертикальное (хотя можно тоже серединку) if ($w_src < $h_src) imagecopyresampled($dest, $im, 0, 0, 0, 0, $w, $w, min($w_src, $h_src), min($w_src, $h_src)); // квадратная картинка масштабируется без вырезок if ($w_src == $h_src) imagecopyresampled($dest, $im, 0, 0, 0, 0, $w, $w, $w_src, $w_src); $date = time(); //вычисляем время в настоящий момент. imagejpeg($dest, $path_to_directory . $date . ".png"); $image = $date . ".png"; //заносим в переменную путь до аватара. $big_image = $filename; } else { //в случае несоответствия формата, выдаем соответствующее сообщение exit("Логотип должен быть в формате <strong>JPG,GIF или PNG</strong>"); //останавливаем выполнение сценариев } } if (empty($_FILES['fupload']['name'])) { $big_image = "net-logo.png"; } else { $path_to_directory = 'images/tovars/'; //папка, куда будет загружаться начальная картинка и ее сжатая копия if (preg_match('/[.](JPG)|(jpg)|(jpeg)|(gif)|(GIF)|(png)|(PNG)$/', $_FILES['fupload']['name'])) {//проверка формата исходного изображения $filenamel = $_FILES['fupload']['name']; $sourcel = $_FILES['fupload']['tmp_name']; $targetl = $path_to_directory . $filenamel; move_uploaded_file($sourcel, $targetl); //загрузка оригинала в папку $path_to_90_directory if (preg_match('/[.](GIF)|(gif)$/', $filenamel)) { $iml = imagecreatefromgif($path_to_directory . $filenamel); //если оригинал был в формате gif, то создаем изображение в этом же формате. Необходимо для последующего сжатия } if (preg_match('/[.](PNG)|(png)$/', $filename)) { $iml = imagecreatefrompng($path_to_directory . $filenamel); //если оригинал был в формате png, то создаем изображение в этом же формате. Необходимо для последующего сжатия } if (preg_match('/[.](JPG)|(jpg)|(jpeg)|(JPEG)$/', $filenamel)) { $iml = imagecreatefromjpeg($path_to_directory . $filenamel); //если оригинал был в формате jpg, то создаем изображение в этом же формате. Необходимо для последующего сжатия } $s = 250; $w_srcl = imagesx($iml); //вычисляем ширину $h_srcl = imagesy($iml); //вычисляем высоту изображения $destl = imagecreatetruecolor($s, $s); // вырезаем квадратную серединку по x, если фото горизонтальное if ($w_srcl > $h_srcl) imagecopyresampled($destl, $iml, 0, 0, round((max($w_srcl, $h_srcl) - min($w_srcl, $h_srcl)) / 2), 0, $s, $s, min($w_srcl, $h_srcl), min($w_srcl, $h_srcl)); if ($w_srcl < $h_srcl) imagecopyresampled($destl, $iml, 0, 0, 0, 0, $s, $s, min($w_srcl, $h_srcl), min($w_srcl, $h_srcl)); if ($w_srcl == $h_srcl) imagecopyresampled($destl, $iml, 0, 0, 0, 0, $s, $s, $w_srcl, $w_srcl); $date = time(); //вычисляем время в настоящий момент. imagejpeg($destl, $path_to_directory ."a". $date . ".png"); $big_image ="a". $date . ".png"; //заносим в переменную путь до аватара. } else { exit("Логотип должен быть в формате <strong>JPG,GIF или PNG</strong>"); } }