[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Создание уменьшенной копии картинки (preview)
jau
Всем добрый день.
Попрошу не кидать в меня тухлыми яйцами, вопрос вовсе не в том, как сделать уменьшенную картинку, а как сохранить ее уменьшенную копию.

Итак, говнокод у меня такой:

1. Код html формы отправки файла (тут все понятно):

<form enctype='multipart/form-data' method="post">
Загрузить фото
<input type="file" name="ph1">
<input
type=submit value="Сохранить">
</form>


2.1 Работающий php код, уменьшающий загруженную картинку:

function imageresize($outfile,$infile,$neww,$newh,$quality) {

$im=imagecreatefromjpeg($infile);
$im1=imagecreatetruecolor($neww,$newh);
imagecopyresampled($im1,$im,0,0,0,0,$neww,$newh,imagesx($im),imagesy($im));

imagejpeg($im1,$outfile,$quality);
imagedestroy($im);
imagedestroy($im1);
}

if($_FILES["ph1"]["size"] > 1024*0.5*1024)
{
echo ("Размер файла превышает 0.5 мегабайта");
exit;
}
// Проверяем загружен ли файл
if(is_uploaded_file($_FILES["ph1"]["tmp_name"]))
{
// Если файл загружен успешно, изменяем размер и перемещаем его
// из временной директории в конечную


imageresize($_FILES["ph1"]["tmp_name"],$_FILES["ph1"]["tmp_name"],330,260,75);
move_uploaded_file($_FILES["ph1"]["tmp_name"], "images/i1/".$_FILES["ph1"]["name"]);

echo("Отличнейшая загрузочка-с! Имя: ".$_FILES["ph1"]["name"]);
} else {
echo("Ошибка загрузки файла, факин шит");
}


2.2 Не работающий php код, который, по идее, должен создавать уменьшенную копию (именно копию) картинки:

function imageresize($outfile,$infile,$neww,$newh,$quality) {

$im=imagecreatefromjpeg($infile);
$im1=imagecreatetruecolor($neww,$newh);
imagecopyresampled($im1,$im,0,0,0,0,$neww,$newh,imagesx($im),imagesy($im));

imagejpeg($im1,$outfile,$quality);
imagedestroy($im);
imagedestroy($im1);
}

if($_FILES["ph1"]["size"] > 1024*0.5*1024)
{
echo ("Размер файла превышает 0.5 мегабайта");
exit;
}

if(is_uploaded_file($_FILES["ph1"]["tmp_name"]))
{
//И вот тут ключевой момент! Я пытаюсь скопировать файл, но уменьшается и загружается все равно один исходный файл, копия не создается
$sc=$_FILES["ph1"]["tmp_name"];
imageresize($sc,$sc,330,260,75);

move_uploaded_file($_FILES["ph1"]["tmp_name"], "images/i1/".$_FILES["ph1"]["name"]);

// Конец ключевого момента.
echo("Отличнейшая загрузочка-с! Имя: ".$_FILES["ph1"]["name"]);
} else {
echo("Ошибка загрузки файла, факин шит");
}



Итак, проблема в том, что я не могу создать маленькую копию картинки и также загрузить ее в папку. Загружается один единственный файл, да еще и уменьшенный. Перепробовал много вариантов, но ничего не работает.

Решил написать сюда, т.к. что-то подсказвает, что все решается в одну-две строчки.



Спустя 21 минута, 51 секунда (5.04.2011 - 12:35) Trianon написал(а):
очень долго искал, где же два разных имени.
Не нашел.

Спустя 1 час, 40 минут, 6 секунд (5.04.2011 - 14:15) jau написал(а):
Неработающих вариантов перепробованы десятки, я уж не стал засорять ветку.

Я просто не понимаю, как можно сохранить второй файл, ведь move_uploaded... не копирует, а только перемещает файл, удаляя его при этом из временного хранилища.

Спустя 2 минуты, 28 секунд (5.04.2011 - 14:17) Игорь_Vasinsky написал(а):
copy() - копирует

Спустя 2 минуты, 9 секунд (5.04.2011 - 14:20) Игорь_Vasinsky написал(а):
так ты имя у файла при ресайзе то меняй...

я так понял что при upload - ты хочешь имет 2 файла - оригинал и превью?

Вообще можно грузить в разные папки.

Спустя 7 минут, 3 секунды (5.04.2011 - 14:27) Trianon написал(а):
copy может и копирует, но надо отдавать отчет, что с завершением скрипта (или чуть позже) из временного хранилища файл будет вытерт так или иначе.
Это временный файл, и гарантированное время его жизни ограничено продолжительностью обработки POST-запрса.

Спустя 15 минут, 25 секунд (5.04.2011 - 14:42) jau написал(а):
Цитата
так ты имя у файла при ресайзе то меняй...

Вот как раз один из неработающих вариантов:

//И вот тут ключевой момент! Я пытаюсь скопировать файл, но уменьшается и загружается все равно один исходный файл, копия не создается

imageresize($_FILES["ph1"]["tmp_name"],$_FILES["ph1_1"]["tmp_name"],330,260,75);

move_uploaded_file($_FILES["ph1"]["tmp_name"], "images/i1/".$_FILES["ph1"]["name"]);

move_uploaded_file($_FILES["ph1_1"]["tmp_name"], "images/i1/small/".$sc);

// Конец ключевого момента.


В итоге подгружается один файл (оригинал) в уменьшенном виде (а должен быть как раз большим).

Спустя 5 минут, 26 секунд (5.04.2011 - 14:47) jau написал(а):
Цитата
copy() - копирует


Пытался делать так:

$_FILES["ph1_1"]["tmp_name"]=$_FILES["ph1"]["tmp_name"];
$_FILES["ph1_1"]["name"]=$_FILES["ph1"]["name"];
copy($_FILES["ph1"]["tmp_name"], $_FILES["ph1_1"]["tmp_name"]);
imageresize($_FILES["ph1_1"]["tmp_name"],$_FILES["ph1_1"]["tmp_name"],330,260,75);

move_uploaded_file($_FILES["ph1"]["tmp_name"], "images/i1/".$_FILES["ph1"]["name"]);

move_uploaded_file($_FILES["ph1_1"]["tmp_name"], "images/i1/small/".$sc);


Тщетно. Все равно один маленький файл, слепленный из оригинала, и никакого копирования.

Спустя 3 дня, 11 часов, 47 минут, 58 секунд (9.04.2011 - 02:35) sebastjan написал(а):
Я ипользую эту функцию
<?php
/***********************************************************************************
Функция img_resize(): генерация thumbnails
Параметры:
$src - имя исходного файла
$dest - имя генерируемого файла
$width, $height - ширина и высота генерируемого изображения, в пикселях
Необязательные параметры:
$rgb - цвет фона, по умолчанию - белый
$quality - качество генерируемого JPEG, по умолчанию - максимальное (100)
***********************************************************************************/

function img_resize($src, $dest, $width, $height, $rgb=0xFFFFFF, $quality=100)
{
if (!file_exists($src)) return false;
$size = getimagesize($src);
if ($size === false) return false;
// Определяем исходный формат по MIME-информации, предоставленной
// функцией getimagesize, и выбираем соответствующую формату
// imagecreatefrom-функцию.

$format = strtolower(substr($size['mime'], strpos($size['mime'], '/')+1));
$icfunc = "imagecreatefrom" . $format;
if (!function_exists($icfunc)) return false;
$x_ratio = $width / $size[0];
$y_ratio = $height / $size[1];
$ratio = min($x_ratio, $y_ratio);
$use_x_ratio = ($x_ratio == $ratio);
$new_width = $use_x_ratio ? $width : floor($size[0] * $ratio);
$new_height = !$use_x_ratio ? $height : floor($size[1] * $ratio);
$new_left = $use_x_ratio ? 0 : floor(($width - $new_width) / 2);
$new_top = !$use_x_ratio ? 0 : floor(($height - $new_height) / 2);
$isrc = $icfunc($src);
$idest = imagecreatetruecolor($width, $height);
imagefill($idest, 0, 0, $rgb);
imagecopyresampled($idest, $isrc, $new_left, $new_top, 0, 0,
$new_width, $new_height, $size[0], $size[1]);
imagejpeg($idest, $dest, $quality);
imagedestroy($isrc);
imagedestroy($idest);
return true;
}
img_resize('sss.jpg', 's.jpg', 100,100);
?>
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.