Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: создание уменьшенной копии картинки
 
 автор: kvins   (17.03.2011 в 21:52)   письмо автору
 
 

есть такой код

$name = $_FILES['upload']['name'];
$temp = $_FILES['upload']['tmp_name'];

move_uploaded_file ($temp,"avatar/$name");
$way = "avatar/$name";

как создать клон этой картинки с размером например 100 на 100

  Ответить  
 
 автор: cheops   (17.03.2011 в 21:54)   письмо автору
 
   для: kvins   (17.03.2011 в 21:52)
 

Возможно вас заинтересует тема по ссылке http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=145.

  Ответить  
 
 автор: kvins   (18.03.2011 в 13:06)   письмо автору
 
   для: cheops   (17.03.2011 в 21:54)
 

там код какой то большой за 2005 год и мне нужно только копия изображения из $way которая выводится на экран. хочу увидеть на экране 2 одинаковых изображения (
у меня есть скрипт который уменьшает изображение)

пытался так

$way = "avatar/$name";
$im = @imagecreatefromjpeg($way);
        
echo "<img id='ladybug' src='$way'>";
echo "<br><img id='ladyb' src='$im'>";


выводит на экран только первое изображение из которого мы пытались создать копию
брал специально картинку jpg


попробовал copy ( $way, $way2);

echo "<img id='lady' src='$way2'>";

Warning: copy() [function.copy]: Filename cannot be empty in C:\denwer\www\denwer\Tools\crop\text.php on line 56

как указать имя ?

  Ответить  
 
 автор: cheops   (18.03.2011 в 14:31)   письмо автору
 
   для: kvins   (18.03.2011 в 13:06)
 

>там код какой то большой за 2005 год и мне
Вам не обязательно в нем разбираться, просто возьмите функцию, передайте ей путь к большому изображению, к маленькому изображению и задайте размеры. В GDLib ничего революционного с тех пор не происходило, поэтому код не требует доработки.

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

  Ответить  
 
 автор: kvins   (18.03.2011 в 15:51)   письмо автору
 
   для: cheops   (18.03.2011 в 14:31)
 

ну мне чета понравился этот скрипт для обработки изображений http://recens.ru/php/resize_and_crop.html
он делает ресайз и кроп изображения ,
не хочется подключать еще 1 скрипт только для того чтоб создать копию изображения , или это столько прописывать надо?

щас подставил $temp = $_FILES['upload']['tmp_name'];
f(is_uploaded_file($temp)) {
copy ($temp, $way2);
echo "<img id='lady' src='$way2'>";

и то же самое ( что надо подставлять?

  Ответить  
 
 автор: cheops   (18.03.2011 в 16:02)   письмо автору
 
   для: kvins   (18.03.2011 в 15:51)
 

Проверьте, что возвращает функция copy(), возможно она не может скопировать файл в $way2 в силу каких-то причин.

  Ответить  
 
 автор: kvins   (18.03.2011 в 17:19)   письмо автору
 
   для: cheops   (18.03.2011 в 16:02)
 

а как проверяется что возвращает функция? чет никогда не нуждался в этом.

  Ответить  
 
 автор: cheops   (18.03.2011 в 17:27)   письмо автору
 
   для: kvins   (18.03.2011 в 17:19)
 

Примерно так
<?php
  
...
  if(
copy ($temp$way2)) echo "Все хорошо";
  else echo 
"Все плохо";
  ...
?>

  Ответить  
 
 автор: kvins   (18.03.2011 в 17:43)   письмо автору
 
   для: cheops   (18.03.2011 в 17:27)
 

все ужасно =)
может код не в той последовательности ?
немного лишнее что ниже else убрал

<?
if (isset($_POST['send']))
{
$name $_FILES['upload']['name'];
    
$temp $_FILES['upload']['tmp_name'];
     
$type $_FILES['upload']['type'];
    
$size $_FILES['upload']['size'];
    
list(
$width$height$type$attr) = getimagesize($temp); 
$type intval($type);
 if(
$type <= 0)  {exit("Загружен какой-то левый формат"); }
else {
if (
$size <= 4000000) { 
if(
is_uploaded_file($temp)) {
                    
copy ($temp$way2);
        if(
copy ($temp$way2)) echo "Все хорошо";
 else echo 
"Все плохо";

echo 
"<img id='lady' src='$way2'>";
move_uploaded_file ($temp,"avatar/$name");
$way "avatar/$name";
echo 
"<img id='ladybug' src='$way'>";
}
else {echo 
"фото не загружено";}

    }

  Ответить  
 
 автор: cheops   (18.03.2011 в 17:55)   письмо автору
 
   для: kvins   (18.03.2011 в 17:43)
 

Во-первых у вас должен быть только один вызов copy(), во-вторых лучше его применять уже после move_uploaded_file(), не все системы позволяют использовать copy() применительно к файлам из временной директории
<?php
if (isset($_POST['send'])) 

$name $_FILES['upload']['name']; 
    
$temp $_FILES['upload']['tmp_name']; 
     
$type $_FILES['upload']['type']; 
    
$size $_FILES['upload']['size']; 
     
list(
$width$height$type$attr) = getimagesize($temp);  
$type intval($type); 
 if(
$type <= 0)  {exit("Загружен какой-то левый формат"); } 
else { 
if (
$size <= 4000000) {  
if(
is_uploaded_file($temp)) { 
                     
move_uploaded_file ($temp,"avatar/$name"); 
$way "avatar/$name"
echo 
"<img id='ladybug' src='$way'>"
        if(
copy ("avatar/$name"$way2)) echo "Все хорошо"
 else echo 
"Все плохо"
echo 
"<img id='lady' src='$way2'>"


else {echo 
"фото не загружено";} 

    }
...
?>
Кстати, где у вас формируется переменная $way2? Вы куда файл копируете?

  Ответить  
 
 автор: kvins   (18.03.2011 в 19:04)   письмо автору
 
   для: cheops   (18.03.2011 в 17:55)
 

да это я забыл дописать , просто я перенес этот код в отдельный файл

написал в вашем коде перед
$way2 = $temp;
if(copy ("avatar/$name", $way2))


теперь пишет все хорошо
потом пробую так echo "<img id='lady' src='$way2'>"; , а как вывести картинку на экран если я передал только $_FILES['upload']['tmp_name']; а получается что ему еще имя надо передать потому что предыдущюю картинку я показывал так
$way = "avatar/$name";
echo "<img id='ladybug' src='$way'>";
а в copy никакое имя не указано

  Ответить  
 
 автор: cheops   (18.03.2011 в 19:23)   письмо автору
 
   для: kvins   (18.03.2011 в 19:04)
 

>$way2 = $temp;
>if(copy ("avatar/$name", $way2))
А зачем из "avatar/$name" копировать файл обратно во временную директорию (его от туда сборщик мусора удалит)? Для нового файла нужно создать по аналогии с "avatar/$name" какое-то новое имя, например, так "avatar/small_$name".

  Ответить  
 
 автор: kvins   (18.03.2011 в 20:01)   письмо автору
 
   для: cheops   (18.03.2011 в 19:23)
 

  if(copy ("avatar/small_$name", $way2)) 
так? или я не правильно создаю имя?

Warning: copy(avatar/small_баскет.jpg) failed to open stream: No such file or directory in C:\denwer\www\denwer\Tools\crop\text.php on line 60
Все плохо

  Ответить  
 
 автор: kvins   (18.03.2011 в 20:04)   письмо автору
 
   для: kvins   (18.03.2011 в 20:01)
 

наверно сначала копию нужно тоже в папку сохранить? или она автоматически должна появится там же где предыдущая

  Ответить  
 
 автор: cheops   (18.03.2011 в 20:06)   письмо автору
 
   для: kvins   (18.03.2011 в 20:01)
 

Нет, нужно как-то так
 if(copy ("avatar/$name", "avatar/small_$name"))

  Ответить  
 
 автор: kvins   (18.03.2011 в 20:31)   письмо автору
 
   для: cheops   (18.03.2011 в 20:06)
 

ураа прям в точку =)
все появилось у меня 2 одинаковых файла с разными именами

а толькот еще 1 вопрос , а полностью менять название можно? или php разницы нет выводить название из 20 букв или пару цифр

кстати imagedestroy он удаляет информацию о файле? что то я не понял что мне удалять $way1 $way2 ? так он вроде тока принемает значение
$way2 = "avatar/small_$name";

или то что попало в глобальный масив $_files

  Ответить  
 
 автор: cheops   (18.03.2011 в 20:47)   письмо автору
 
   для: kvins   (18.03.2011 в 20:31)
 

>а толькот еще 1 вопрос , а полностью менять название можно?
Конечно.
> или php разницы нет выводить название из 20 букв или пару цифр
Ему все-равно, но следите, чтобы у вас названия не перезатирали друг дружку, если такой файл существует, а вы на его место записываете другой, то старый файл исчезнет без предупреждения.

>кстати imagedestroy он удаляет информацию о файле?
Он удаляет память, которая была выделена на работу с файлом библиотекой GDLib. Можете не заморачиваться, она будет автоматически возвращена в систему после того, как ваш скрипт завершит работу.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования