Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Создание превьюшек

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Помогите, замучался уже... 3 дня пытаюсь...
Kubert
Отправлено: 05 Июля, 2010 - 13:33:27
Post Id



Частый гость


Покинул форум
Сообщений всего: 186
Дата рег-ции: Февр. 2010  


Помог: 3 раз(а)




Помогите и пните в туда где все подробно объяснено...

страничка загрузки картинки:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. <form name="testform" method="post" enctype="multipart/form-data" action="start.php" >
  3. <input type="file" name="file" value="">
  4. <input name="submit" type="submit" value="Загрузить">
  5. </form>
  6.  


start.php
CODE (htmlphp):
скопировать код в буфер обмена
  1. <?
  2. $file = $_FILES['file']['tmp_name']; //Переменная переданного файла - мой комент
  3. $filename = $_FILES['file']['name']; //Имя файла как я предпологаю - мой комент
  4.  
  5.  $size = filesize ($_FILES['file']['tmp_name']);
  6.  $type = strtolower(substr($filename, 1+strrpos($filename,".")));
  7.  $new_name = time().'.'.$type;
  8.  $new_name_small = time().'.small'.'.'.$type;
  9.  $new_name_trumb = time().'.trumb'.'.'.$type;
  10.  
  11.    if (copy($file, "img/".$new_name))
  12.      echo "<img src='img/$new_name' border='0'><br><br>";
  13.  
  14.  
  15. require ('imgresize.php');
  16.  if (img_resize('img/'.$new_name, 'img/'.$new_name_small, 300, 200))
  17.      echo "<img src='img/$new_name_small' border='0'><br><br>";
  18.  else
  19.    echo '';
  20.  
  21.  if (img_resize('img/'.$new_name, 'img/'.$new_name_trumb, 100, 100))
  22.      echo "<img src='img/$new_name_trumb' border='0'>";
  23.  else
  24.    echo '';
  25.  
  26.  
  27. ?>




страница: http://raztour[dot]ru/admin/7/

как видно если взять картинку (h:100, w:300), она обрезается но видны белые поля... Мне надо что бы из небыло... явно другой скрипт нужен, но не могу внедрить...
Или покажите реально рабочий скрипт который у вас есть

(Отредактировано автором: 05 Июля, 2010 - 13:44:58)

 
 Top
Мелкий Супермодератор
Отправлено: 05 Июля, 2010 - 13:54:58
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Kubert пишет:
как видно если взять картинку (h:100, w:300), она обрезается но видны белые поля...

Следовательно, невозможно без потери качества ужать изображение до этих размеров. Выхода 2:
0) обрезать края, выступающие за 100х300 в оригинальном изображении, тогда что-то теряем, но изображение ровно 100х300 выходит.
1) сделать не фиксированный, а динамические границы. Т.е. в соответствии с соотношением сторон исходной картинки отклоняется от "идеальной" ширина или высота получающейся, смотря какая сторона не дотягивает в эти самые 100х300 пикселей. Тогда получается (в зависимости от логики скрипта) картинка не более 100х300, например, 100х270 и др.

Оба варианта реализуются семейством функций GD (или imagemagic, но это реже): http://php.su/functions/?cat=image

Я пользовался такой функцией для второго подхода (реализовано только для сохранения на сервере):
PHP:
скопировать код в буфер обмена
  1. /*
  2. $file - файл
  3. $nx - новая ширина изображения. Высота считается динамически.
  4. $kleindir - в какую директорию писать
  5. $qual - качество jpeg на выходе
  6. */
  7. function resizetofile ($file, $nx, $kleindir="klein",$qual=40) {
  8.         $orig = imagecreatefromjpeg($file);
  9.         $oy = imagesy($orig);
  10.         $ox = imagesx($orig);
  11.         $ny = $nx*$oy/$ox;
  12.  
  13.         $klein = imagecreatetruecolor($nx,$ny);
  14.         imagecopyresampled($klein,$orig,0,0,0,0,$nx,$ny,$ox,$oy);
  15.         imagejpeg($klein,$kleindir.$file,$qual);
  16.         imagedestroy($klein);
  17.         imagedestroy($orig);
  18. }

(Отредактировано автором: 05 Июля, 2010 - 13:59:17)



-----
PostgreSQL DBA
 
 Top
Kubert
Отправлено: 05 Июля, 2010 - 14:39:46
Post Id



Частый гость


Покинул форум
Сообщений всего: 186
Дата рег-ции: Февр. 2010  


Помог: 3 раз(а)




как я понимаю, надо еще функцию вызывать... поробывал нечего не сохранилось(
не могли бы показать полный код?

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

(Отредактировано автором: 05 Июля, 2010 - 15:09:16)

 
 Top
Мелкий Супермодератор
Отправлено: 05 Июля, 2010 - 15:24:18
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Kubert пишет:
как я понимаю, надо еще функцию вызывать...

Само собой.

Kubert пишет:
не могли бы показать полный код?

мне, конечно, не жалко, полный код показать, но по существу вопроса там ничего полезного.
Спойлер (Отобразить)


А конкретно для сжимания изображения (например):
resizetofile($file,300,"klein/",45); где $file - имя/путь к изображению.

Kubert пишет:
+ ковсему нужно же обрезать картирнку к примеру 100 на 100... к примеру по середине... перерыл инет кучу скриптов нашел, но не получается внедрить

А это уже другой путь будет, если её надо именно обрезать, а не ужать.


-----
PostgreSQL DBA
 
 Top
JustUserR
Отправлено: 06 Июля, 2010 - 14:54:25
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Kubert пишет:
Как видно если взять картинку (h:100, w:300), она обрезается но видны белые поля... Мне надо что бы из небыло... явно другой скрипт нужен, но не могу внедрить...
Для изменение размеров картинки требуется определенный алгоритм который на основе картинки старого размера создает шаблон нового размера и определенным образом определяет цвет каждого нового пикселя - в любом случае при таком процессе происходит понижения качества но в случае некорректной работы могут происходить дополнительные искажения Причиной их возникновения служит то что число пикселей в изображении всегда целое число и каждый пискель имеет только один цвет - к примеру самый простейший алгоритм преобразования изображения размером 10x10 в размер 10x11 может работать следующим образом - пиксели в певром столбце остаются своего цвета во втором столбце получают цвет как 1/11 певрого и 10/11 цвета второго столбца и тд На практике изображения имеют значительно более сложный формат и их преобразование происходит по особым алгоритмам - однако все равно приведенная выше проблема остается и хотя она решается различными способами но естественное искажение вносится по определению
Можете посмотреть готовую PHP-функцию которая делает масштабирование и квадратную обрезку изображений здесь http://www[dot]codenet[dot]ru/webmast/ph[dot][dot][dot]Image-Resize-GD/ - также можете посмотреть технику реальной интерполяции для масштабирования изображений http://ru[dot]wikipedia[dot]org/wiki/%D0[dot][dot][dot]1%86%D0%B8%D1%8F и применении фильтра нижних частот http://ru[dot]wikipedia[dot]org/wiki/%D0[dot][dot][dot]0%B8%D0%BD%D0%B3


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


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



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB