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

Форум PHP

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

 

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

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

тема: Использование PHP функций для работы с изображениями.
 
 автор: Dr Lines   (25.08.2008 в 12:12)   письмо автору
 
 

Добрый день.

Вобщем пишу скрипт, который изменяет размер изображения, и сохраняет его в файл.

Делаю так:
<?
$image_name
="atomic_kitten_orig.jpg"

$simg=imageCreateFromJpeg($image_name); 

$sw=imageSX($simg);
$sh=imageSY($simg);
$w=190;
$h=190;

$nimg=imageCreate($w$h);

imageCopyResampled($nimg$simg0000$w$h$sw$sh);
imageJpeg($nimg"new.jpg"90);
imageDestroy($nimg);
imageDestroy($simg);
?>


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

Вот результат работы:
Исходное изображение:
http://lineradio.ru/lineradio/atomic_kitten_orig.jpg
Результат уменьшения:
http://lineradio.ru/lineradio/new.jpg

Как будто половина цветов выбросилось кудато.
Что нужно сделать, чтобы картинка получалась полноцветной. Кто знает?

  Ответить  
 
 автор: mehelson   (25.08.2008 в 12:34)   письмо автору
 
   для: Dr Lines   (25.08.2008 в 12:12)
 

А попробуйте перед imageCopyResampled вставить функцию imagetruecolortopalette($img,true,250);

  Ответить  
 
 автор: Dr Lines   (25.08.2008 в 13:10)   письмо автору
 
   для: mehelson   (25.08.2008 в 12:34)
 

Спасибо, это помогло.
Вот результат: http://lineradio.ru/lineradio/new2.jpg

Но конечно, получилось не так идеально, как это делает граффический редактор Corel.
Так выглядит после сжатия им (для сравнения):
http://lineradio.ru/lineradio/corel_rezult.jpg

А хотелось бы получать именно такой результат.

Как я понял, возможности стандартных функций PHP не позволяют добиться качественного результата при работе с графикой. (или может я чегото не знаю) Может есть специальные расширения для дижка PHP или спец wab приложения , которые специализированны для качественной обработки графики?
Если кто знает поделитесь пожалуйста ..

  Ответить  
 
 автор: sim5   (25.08.2008 в 13:27)   письмо автору
 
   для: Dr Lines   (25.08.2008 в 13:10)
 

Графические редаторы при изменениях размера изображения используют фильтры, а также различные математические модели (эти способы вы можете увидеть в списке редактора), а РНР... Можете попробовать после изменения изображения в РНР применить к нему фильтр, например, легкое размытие (blur).

  Ответить  
 
 автор: Dr Lines   (25.08.2008 в 13:35)   письмо автору
 
   для: sim5   (25.08.2008 в 13:27)
 

Вы имеете ввиду фильтр в настройках стиля изображения при выводе в браузер?
если да, то такой способ для меня не приемлем.

  Ответить  
 
 автор: Dr Lines   (25.08.2008 в 13:44)   письмо автору
 
   для: Dr Lines   (25.08.2008 в 13:35)
 

Все, уже нашел интересную статейку про фильтры в PHP

http://www.proklondike.com/contentview.php?content=398

=)
спасибо всем за помощь.

  Ответить  
 
 автор: sim5   (25.08.2008 в 14:03)   письмо автору
 
   для: Dr Lines   (25.08.2008 в 13:35)
 

Я имею ввиду функцию GD imagefilter() или imageconvolution().

  Ответить  
 
 автор: Le bien   (25.08.2008 в 14:46)   письмо автору
 
   для: Dr Lines   (25.08.2008 в 12:12)
 

...еще попробуйте вместо ImageCreate () использовать ImageCreateTrueColor ();

  Ответить  
 
 автор: Dr Lines   (25.08.2008 в 14:55)   письмо автору
 
   для: Le bien   (25.08.2008 в 14:46)
 

Да, полностью поменяло результат в лучшую сторону.

вместо
imageСreate() использовал imageCreateTrueColor()

эту imageTrueColorTopAlette() удалил. Она уже не нужна.

Но так как изображение при сжатии становится немного размытым, применил резкость так:
$matrix = array(array(-1,-1,-1), array(-1,16,-1), array(-1,-1,-1));
imageconvolution($nimg, $matrix, 8, 0);


И результат просто радует:
http://lineradio.ru/lineradio/new3.jpg

  Ответить  
 
 автор: Dr Lines   (25.08.2008 в 15:19)   письмо автору
 
   для: Dr Lines   (25.08.2008 в 14:55)
 

А если еще добавить это:

imageFilter($nimg, IMG_FILTER_SMOOTH, 9);


то результат почти на 100% повторяет тот что получился в графическом редакторе.
кому интересно, то вот для сравнения:

PHP: http://lineradio.ru/lineradio/new4.jpg
Corel Photo Paint: http://lineradio.ru/lineradio/corel_rezult.jpg

чесно говоря вобще отличий не видно.

  Ответить  
 
 автор: Le bien   (25.08.2008 в 15:25)   письмо автору
 
   для: Dr Lines   (25.08.2008 в 15:19)
 

Весьма занятно, никогда столь глубоко не копал - спасибо =)

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

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