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 Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Описание: уменьшить изображение без потери качества
Varan
Отправлено: 06 Октября, 2012 - 12:20:14
Post Id



Гость


Покинул форум
Сообщений всего: 69
Дата рег-ции: Нояб. 2011  
Откуда: Украина г.Краматорск


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




Помогите разобраться с созданием превьюшек. Как уменьшить, все понятно, но проблема в том, что миниатюры получаются крупно зернистые и детализация теряется напрочь. Экспериментировал со значением качества в imagejpeg, но не получил желаемого результата. вот пример полученного результата
исходник

полученная превьюшка

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

(Отредактировано автором: 06 Октября, 2012 - 12:23:06)

 
 Top
Varan
Отправлено: 07 Октября, 2012 - 21:56:37
Post Id



Гость


Покинул форум
Сообщений всего: 69
Дата рег-ции: Нояб. 2011  
Откуда: Украина г.Краматорск


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




вопрос актуален, буду рад любым советам.
 
 Top
DlTA
Отправлено: 07 Октября, 2012 - 22:08:13
Post Id



Постоянный участник


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


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




2 момента:
1) как происходит масштабация
2) какое качество указывается при сохранении (третий параметр у imagejpeg)

скорее всего 1.
 
 Top
armancho7777777 Супермодератор
Отправлено: 08 Октября, 2012 - 00:39:49
Post Id



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


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


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




Varan, у Вас что, превьюшка больше исходника ?
 
 Top
Varan
Отправлено: 08 Октября, 2012 - 14:05:35
Post Id



Гость


Покинул форум
Сообщений всего: 69
Дата рег-ции: Нояб. 2011  
Откуда: Украина г.Краматорск


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




armancho7777777 пишет:
Varan, у Вас что, превьюшка больше исходника ?

нет конечно , это форум уменьшил исходную фото, нажмите чтобы посмотреть в исходном размере или можете посмотреть тут http://fotocamers[dot]info/user_dir/[dot][dot][dot]1_1349512636[dot]jpg
DlTA пишет:
2 момента:
1) как происходит масштабация
2) какое качество указывается при сохранении (третий параметр у imagejpeg)

скорее всего 1.

по второму пункту, значение 100% , в общем приведу пример кода
PHP:
скопировать код в буфер обмена
  1.  
  2. function mini_img($file_in,$size_out, $file_out)//файл входящий, размер миниатюры (задаем ширину), новое имя миниатюры
  3. {
  4. $size=getimagesize($file_in);
  5. switch($size["mime"])
  6.         {
  7.          case "image/jpeg":
  8.              $im = imagecreatefromjpeg($file_in); //jpeg file
  9.                            break;
  10.          case "image/pjpeg":
  11.              $im = imagecreatefromjpeg($file_in); //jpeg file
  12.                            break;
  13.          case "image/gif":
  14.              $im = imagecreatefromgif($file_in); //gif file
  15.                            break;
  16.          case "image/png":
  17.            $im = imagecreatefrompng($file_in); //png file
  18.                            break;
  19.          default:
  20.          $im=false;
  21.          break;
  22.          }
  23.     // определим новый размер изображения с привязкой по ширине, сохраняя пропорции
  24.     if($size[0] > $size_out) //$size[0] - ширина $size[1] - высота
  25.     {    
  26.      $new_h = round($size[1]/($size[0] / $size_out));
  27.      $new_img=imagecreatetruecolor($size_out,$new_h);
  28.      imagecopyresized($new_img,$im,0,0,0,0,$size_out,$new_h,$size[0],$size[1]);
  29.     }
  30.     else {$new_img = $im; }
  31.    
  32.     imagejpeg($new_img,$file_out,100);
  33.     imagedestroy($im);
  34.     if(empty ($new_img)){ imagedestroy($new_img); }
  35. }
  36.  
 
 Top
armancho7777777 Супермодератор
Отправлено: 08 Октября, 2012 - 14:48:33
Post Id



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


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


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




Используйте imagecopyresampled() вместо imagecopyresized().
 
 Top
DeepVarvar Супермодератор
Отправлено: 08 Октября, 2012 - 14:50:23
Post Id



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


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


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




Пользуйтесь на здоровье:
Спойлер (Отобразить)
 
 Top
Varan
Отправлено: 08 Октября, 2012 - 14:58:22
Post Id



Гость


Покинул форум
Сообщений всего: 69
Дата рег-ции: Нояб. 2011  
Откуда: Украина г.Краматорск


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




armancho7777777
DeepVarvar
спасибо, поэкспериментирую, отпишусь.
 
 Top
armancho7777777 Супермодератор
Отправлено: 08 Октября, 2012 - 15:05:58
Post Id



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


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


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




DeepVarvar, у него проблемма из-за фунции imagecopyresized()
У неё качество обработки хуже чем у imagecopyresampled()
 
 Top
DeepVarvar Супермодератор
Отправлено: 08 Октября, 2012 - 15:06:01
Post Id



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


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


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




Varan пишет:
поэкспериментирую
Так проверено же уже )) Тут, как говорится, бери и пользуй. Все отлично делает и в качестве и с любыми типами картинок. Ну во всяком случае с гиф, жпг и пнг )))
(Добавление)
armancho7777777 пишет:
, у него проблемма из-за фунции imagecopyresized()
Я знаю, просто подумал что у него в будущем втанет вопрос и о других картинках, а не только жпг. Вот решил сразу без соплей сбросить готовый класс.
 
 Top
armancho7777777 Супермодератор
Отправлено: 08 Октября, 2012 - 15:09:37
Post Id



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


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


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




DeepVarvar пишет:
Вот решил сразу без соплей сбросить готовый класс.

Спойлер (Отобразить)
 
 Top
Varan
Отправлено: 08 Октября, 2012 - 15:15:13
Post Id



Гость


Покинул форум
Сообщений всего: 69
Дата рег-ции: Нояб. 2011  
Откуда: Украина г.Краматорск


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




armancho7777777 вы правы, с imagecopyresampled действительно разница ощутима.
DeepVarvar - с наскока не разобрался, но попробую в дальнейшем и ваш вариант.
по поводу других форматов, моя функция тоже их обрабатывает она не ограничена jpg форматом.
 
 Top
armancho7777777 Супермодератор
Отправлено: 08 Октября, 2012 - 15:17:46
Post Id



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


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


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




Но ограничена в png: а именно сохранение альфа-каналов.
В классе выше это реализовано.
(Добавление)
DeepVarvar пишет:
PHP:
скопировать код в буфер обмена
  1. } else if ($type == IMAGETYPE_PNG) {
  2. imagealphablending($this->image, false);
  3. imagesavealpha($this->image, true);
  4. imagepng($this->image, $filename);
  5. }

DeepVarvar пишет:
PHP:
скопировать код в буфер обмена
  1. if ($this->type == IMAGETYPE_PNG) {
  2. imagealphablending($new, false);
  3. imagesavealpha($new, true);
  4. }
 
 Top
Varan
Отправлено: 08 Октября, 2012 - 15:29:23
Post Id



Гость


Покинул форум
Сообщений всего: 69
Дата рег-ции: Нояб. 2011  
Откуда: Украина г.Краматорск


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




armancho7777777 пишет:
Но ограничена в png: а именно сохранение альфа-каналов.
В классе выше это реализовано.
(Добавление)
DeepVarvar пишет:
PHP:
скопировать код в буфер обмена
  1. } else if ($type == IMAGETYPE_PNG) {
  2. imagealphablending($this->image, false);
  3. imagesavealpha($this->image, true);
  4. imagepng($this->image, $filename);
  5. }

DeepVarvar пишет:
PHP:
скопировать код в буфер обмена
  1. if ($this->type == IMAGETYPE_PNG) {
  2. imagealphablending($new, false);
  3. imagesavealpha($new, true);
  4. }


да, спасибо, я как раз нашел разницу в классе по обработке формата png
ОГРОМНОЕ СПАСИБО , плюсануть не смогу, система не разрешает из-за малого количества оставленного мною на форуме флуда )))
 
 Top
DeepVarvar Супермодератор
Отправлено: 08 Октября, 2012 - 16:39:18
Post Id



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


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


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




Varan пишет:
плюсануть не смогу, система не разрешает из-за малого количества оставленного мною на форуме флуда )))
Ну... Еще успеете и нафлудить и наплюсовать Радость
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB