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 :: imagecopyresized() - плохое качество

 PHP.SU

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


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

> Описание: imagecopyresampled() - чуть лучше но тоже плохо
ZekMan
Отправлено: 23 Августа, 2010 - 21:10:37
Post Id



Новичок


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


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




Смысл скрипта в том что бы загрузить картинку, получить превью необходимых размеров.
( остальное еще не доделал ).
PHP:
скопировать код в буфер обмена
  1.  
  2. <form action="" method="post" name="img_folder_edit" enctype="multipart/form-data">
  3. <input name="userfile" type="file" style="width: 200px;" /><input type="submit" name="image_upload" value="UPLOAD" style="margin-left:20px;" />
  4. </form>
  5. <?PHP
  6. if ($_POST['image_upload']){
  7.         $uploaddir = 'image/tmp_image/';
  8.         $extentions = array('1','2','3','6');  
  9.         $userfilesize = $_FILES['file']['size'];
  10.         $maxfilesize = 1024*1024*7;
  11.         $final_w = 200;
  12.         $final_h = 120;
  13.         $file_type = exif_imagetype($_FILES['userfile']['tmp_name']); # определяем тип изображения
  14.         if (in_array($file_type, $extentions) && ($maxfilesize >= $userfilesize)){
  15.                 switch ($file_type) {
  16.                         case '2': $file_type = '.jpg'; break;
  17.                         case '3': $file_type = '.png'; break;
  18.                         case '1': $file_type = '.gif'; break;                  
  19.                         case '6': $file_type = '.bmp'; break;
  20.                         default: print 'Неизвестная ошибка в определении типа файла<br />';
  21.                 }
  22.                 $new_image = 'two'.$file_type;
  23.                 $basename = 'one'.$file_type;
  24.                 move_uploaded_file($_FILES['userfile']['tmp_name'], $uploaddir.$basename); #загружаем картинку
  25.                 $ext = $file_type; # Получаем формат уменьшаемого изображения
  26.                 $size=GetImageSize ($uploaddir.$basename); # получаем размеры картинки
  27.                 $real_h = $size['1'];
  28.                 $real_w = $size['0'];
  29.                 $koe=$real_h/$final_h; # коэффициент высоты
  30.                 $new_w=ceil($real_w/$koe); # новая ширина
  31.                 switch ($ext) {
  32.             case '.jpg': $source = imagecreatefromjpeg($uploaddir.$basename); break;
  33.             case '.gif': $source = imagecreatefromgif($uploaddir.$basename); break;
  34.             case '.png': $source = imagecreatefrompng($uploaddir.$basename); break;                    
  35.             case '.bmp': $source = imagecreatefromwbmp($uploaddir.$basename); break;
  36.                         default: print 'нет таких значений';
  37.         }
  38.                 $thumb = imagecreatetruecolor($new_w, $final_h); #создаем новое изображение
  39.                 imagecopyresized($thumb, $source, 0, 0, 0, 0, $new_w, $final_h, $real_w, $real_h);
  40.         switch ($ext) {
  41.             case '.jpg': imagejpeg($thumb, $uploaddir.$new_image, 100); break;                
  42.             case '.gif': imagegif($thumb, $uploaddir.$new_image);  break;                
  43.             case '.png': imagepng($thumb, $uploaddir.$new_image); break;                
  44.             case '.bmp': imagewbmp($thumb, $uploaddir.$new_image); break;
  45.                         default: print 'нет таких значений';
  46.         }
  47.  
  48.                 # выводы текста        
  49.                 print 'Upload comlete<br />';
  50.                 print $real_w.'x'.$real_h.'<br />';
  51.                 print 'new size'.$new_w.'x'.$final_h.'<br />';
  52.                 print '<img src="'.$uploaddir.$new_image.'">';
  53.                
  54.         } else {
  55.                
  56.                 print 'Размер файла слишком большой или файл имеет не поддерживаемое расщирение';
  57.         }
  58.        
  59. }
  60. ?>
  61.  


Меня беспокоит качества выходного превью...

Исходное изображение: http://itmages[dot]ru/image/view/52074/9b73a011
Полученное изображение: http://itmages[dot]ru/image/view/52075/47dbb8a1

Как можно улучшить качество картинки?
 
 Top
movEAX
Отправлено: 23 Августа, 2010 - 21:21:18
Post Id



Частый посетитель


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


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




Как вариант попробуйте imagick


-----
армия.. самое убогое место
 
 Top
Uchkuma
Отправлено: 23 Августа, 2010 - 22:02:51
Post Id



Участник


Покинул форум
Сообщений всего: 1539
Дата рег-ции: Март 2010  
Откуда: Киров


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




movEAX пишет:
Как можно улучшить качество картинки?
imagecopyresized() заменить на imagecopyresampled().
 
 Top
ZekMan
Отправлено: 23 Августа, 2010 - 22:58:06
Post Id



Новичок


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


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




эм... как бе заголовок перечитай...

Цитата:
Описание: imagecopyresampled() - чуть лучше но тоже плохо
 
 Top
JustUserR
Отправлено: 24 Августа, 2010 - 13:55:34
Post Id



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


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


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




ZekMan пишет:
Как можно улучшить качество картинки?
При использовании графический функций библиотек типа GD они позволяют работать с изображениями различных форматов и фактических размеров причем достаточно унифицированно - это происходит за счет встроенных систем автоматического преобразования форматов и коррекций полученного изображения за счет применения фильтров и графичечких интерполяций Это означает что если вы используете в некоторой графической фукнции ресурсы картинок которые имеют между собой значительные различия в частности разное разрешение или количетсво цветов и форма их представления или схема сжатия - то будет произвелено конвертирование с автоматическим выбором алгоритма что в некоторых случаях может привести к значительному ухудшению качества
В вашем случае причиной ухудшения качества видимо является наложение спектров то есть алиасинга при уменьшеии разрешения изображения - в таком случае применяется фильтр низких частот Можете посмотреть пример иллюстрирующий данный вопрос здесь 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
ZekMan
Отправлено: 25 Августа, 2010 - 12:38:46
Post Id



Новичок


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


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




JustUserR
Спасибо, разобрался, сделал так:
Спойлер (Отобразить)
Ха-ха Ха-ха Ха-ха
 
 Top
JustUserR
Отправлено: 26 Августа, 2010 - 09:23:54
Post Id



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


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


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




ZekMan пишет:
JustUserR Спасибо, разобрался, сделал так
Пожалуйста! Используемая вами в новой версии PHP-скрипта фукнция для изменения разрешения изображения видимо уже содержит встроенные алгоритмы билинейной интерполции и возможно фильтра низких частот - тем не менее в общем случае для различных графических форматов может получаться разный результат в частности по причине того что способы хранения в них цветовых данных и alpha-каналов а также алгоритмы сжатия существенно отличаются - и сами функции изменения размера изображения как правило имеют отдельные эффективные алгоритмы для каждого из форматов отдельно без приведения к общему виду - таким образом для получения идентичного результата возможно привести изображения в общий формат типа побитовой карты BMP и выполнять для него унифицированный алгоритм изменения расширения и последующего сжатия в требуемый формат


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный 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