Forum Webscript.Ru

Программирование => PHP => Тема начата: hanslinger от 28 Ноября 2003, 01:29:14

Название: Снова GD
Отправлено: hanslinger от 28 Ноября 2003, 01:29:14
Я тут столкнулся с проблемой... мне надо сделать так, чтобы полноцветная картинка превратилась в картинку с определенным диапазоном цветов, заданным в файле "palette.jpg" градиентом.
Скрипт выглядит примерно так:

    $img_old=imagecreatefromjpeg($file);
    imagetruecolortopalette($img_old,false,65535);
    $img_new=imagecreate($nwidth,$nheight);
    $img_palette=imagecreatefromjpeg("palette.jpg");
    imagetruecolortopalette($img_palette,false,65535);
    imagecopyresized($img_new,$img_old,0,0,0,0,$nwidth,$nheight,$owidth,$oheight);
    imagepalettecopy($img_new,$img_palette);
    imagegammacorrect ($img_new,1,1.23);
    imagedestroy($img_old);
    imagedestroy($img_palette);
    imagejpeg($img_new,basename($file));
    imagedestroy($img_new);

Все работает, только жутко теряется качество. Это можно исправить или ничего не поделаешь?
Допускаю мысль, что я извращенец и сделал все через как обычно. Подскажите в таком случае, как можно проще, пожалуйста.
Название: Снова GD
Отправлено: Mog. от 28 Ноября 2003, 08:19:54
Цитировать
hanslinger:
жутко теряется качество
А может так и должно быть? Количество цветов ограничивается - качество теряется.
Это если я тя правильно понял.
Название: Снова GD
Отправлено: hanslinger от 28 Ноября 2003, 10:13:30
Ну, я думал, что 65535 цветов достаточно... да я и 16777215 ставил по дурости, все равно эффект один :).
Название: Снова GD
Отправлено: Меняздесьдавнонет от 28 Ноября 2003, 11:21:27
imagecreatetruecolor
мануал надо читать
Название: Снова GD
Отправлено: hanslinger от 28 Ноября 2003, 12:15:45
Да я понимаю, что надо... да и читал я его... но мне-то надо палитру скопировать! С truecolor\'ными картинками не катит.
Название: Снова GD
Отправлено: Меняздесьдавнонет от 28 Ноября 2003, 12:19:53
то есть, тебе надо из шестнадцатимиллионной картинки сделать шестидесятипятитысячную и ты У НАС спрашиваешь, куда подевалось качество?

Делай все фотошопом и не пудри нам мозги.
Название: Снова GD
Отправлено: hanslinger от 28 Ноября 2003, 12:48:49
Я, кажется, писал, что ставил 16м.
Название: Снова GD
Отправлено: Меняздесьдавнонет от 28 Ноября 2003, 12:58:45
Ты же писал, что с труколорными картинками у тебя "не катит"?
А труколор по-твоему - это сколько?
Название: Снова GD
Отправлено: hanslinger от 28 Ноября 2003, 16:21:41
Труколор "по-моему" это 16 миллионов цветов. Но из того же мана, который я все-таки читал, можно, не особо вдаваясь в подробности конструкций картинок, понять, что GD работает с двумя типами картинок, truecolor и palette. Так вот выходит, что, когда у palette 16 миллионов цветов, получается совсем не то же самое, что в truecolor.
Вообще, я не особо хочу тут с тобой ругаться, ты лучше попросту скажи - знаешь, как помочь, или нет?
Название: Снова GD
Отправлено: DiJay от 04 Декабря 2003, 11:06:15
а в функции
imagejpeg ( resource image [, string filename [, int quality]]);
есть параметр дополнительный int quality
может в нем загвоздка?
и вообще GD с JPEG хреново работает ...
Название: Снова GD
Отправлено: Меняздесьдавнонет от 04 Декабря 2003, 11:12:58
О, господи. опять нашествие. Опять в нем проснулась страсть поотвечать на вопросы. Опять придется стирать...

Ответ я написал в самом начале.
Человек копирует труколорную картинку в 64к. И потом спрашивает, куда подевалось качество.
От правильного ответа отбрыкивается - мне, говорит, другое надо.
Все ему кругом виноваты.
Название: Снова GD
Отправлено: Yukko от 04 Декабря 2003, 12:40:49
Цитировать
DiJay:
и вообще GD с JPEG хреново работает ...

Это программист с неочень прямыми руками с GD плохо работает...

Вообще сколько можно? не можешь помочь, дать идею, хотя бы намек, ну не лезь. Тысячи программистов используют GD, а у одного не работает. Если ты почитаешь ман нормально, то увидишь:
Цитировать

quality is optional, and ranges from 0 (worst quality, smaller file) to 100 (best quality, biggest file). Default is to 100

Это означает, что у него не могло попортиться качество из-за того, что он вообще этот параметр не указывает.
Название: Снова GD
Отправлено: hanslinger от 04 Декабря 2003, 16:36:10
Ромик! Ты почему-то отчаянно игнорируешь мои посты. Пчитай. Прошу тебя. Мне так обидно, что ты, такой умный и справедливый, сам лажаешься...
Название: Снова GD
Отправлено: hanslinger от 04 Декабря 2003, 16:37:54
Yukko: в моем мане написано, что default is to 75. Но я додумался-таки это поменять. Я не тупой. У меня кризис серьезный, не как у большинства.
Название: Снова GD
Отправлено: Меняздесьдавнонет от 04 Декабря 2003, 16:41:14
мне нет нужды чтить твои посты.
я прочел твой КОД
Я написал, что в нем надо поменять.
ты отказался.
Ничем больше не могу помочь.
Название: Снова GD
Отправлено: hanslinger от 04 Декабря 2003, 17:03:14
RomikChef Хорошо. Если я поменяю 65535 на 16777215, ты сможешь что-нибудь сказать по делу? Ответь, пожалуйста, потому что мне надоели твои придирки не по делу. Если можешь что-нибудь для дела сказать, так скажи. Выпендриваться не обязательно. Я пишу на РНР не первый год, обращаюсь не как лопух, а как человек, которому нужна помощь. А вы, Ромик, совсем неправильно реагируете. Можете меня выгнать с форума, но только скажите, где я не прав.
Название: Снова GD
Отправлено: hanslinger от 04 Декабря 2003, 17:05:23
Кста! укажи, где я отказался поменять? Я что-то не найду.
Название: Снова GD
Отправлено: Меняздесьдавнонет от 04 Декабря 2003, 17:14:54
Самый мой первый ответ.
я так и неполучил ответа - почему ты не хочешь пользоваться этой функцией.
Без нее у джипега всегда качество будет плохое.
Название: Снова GD
Отправлено: Mаster от 04 Декабря 2003, 17:16:01
hanslinger а на кой тебе это вообче здалось? Хотя я с трудом понимаю со всеми этими переводами. С каждым постом смысл непонятной проблемы меняется куда-то не туда.
Название: Снова GD
Отправлено: Меняздесьдавнонет от 04 Декабря 2003, 17:27:50
кстати, еще один косяк нашел.
imagecopyresized надо сменить на resampled.

вообще, у тебя там столько всего навернуто. и поллитры и ресайзы.

Делай постепенно.
сначала создай без изменений.
посмотри качество.
потом добавь ресайз.
посмотри качестов,
если не устраивает - работаешь с ресайзом пока не устроит.
добавляешь поллитру.

а так ты на все с ходу кидаешься, а мы должны, как в что где когда, отгадывать - где у тебя качество теряется.

Если тебе интересно лично мое мнение, то я тебе его скажу.
Библиотека ГД - это не фотошоп.
Лично я с ГД не работаю вообще.
Лично я на скрипты возлагаю только одну задачу - ресайз картинок.
Остальное делаю по-старинке фотошопом.

Может быть, я ретроград. Но я не люблю проблем. А еще больше - проблем, которые придумал себе сам.
Название: Снова GD
Отправлено: NeoNox от 04 Декабря 2003, 18:00:11
Раз уже пошел такой разговор то и я выскажу свою точку зрения.
Не знаю есть ли в PHP интерфейс к Imagemagick, но в Perl я такого рода манипуляции делаю только в нем. Это и религия и практика работы с GD.
Решение такого рода задачи у меня заняло бы не более полу часа с Imagemagick.
Название: Снова GD
Отправлено: Yukko от 04 Декабря 2003, 18:07:47
hanslinger
ИМХО, надо смотреть функции:
imagecolorat()
imagecolorsforindex()
imagecolorresolve()
imagecolorclosest()
imagecolorallocate()

Суть такова, что надо сопоставить индексы цветов из одной палитры ближайшим индексам новой палитры, новую палитру ты формируешь из градиента. Надеюсь, разберешься.

Еще мне интересно, как ты хочешь уменьшить количество цветов, но не потерять качество...

Цитировать
hanslinger:чтобы полноцветная картинка превратилась в картинку с определенным диапазоном цветов

Цитировать
hanslinger:Все работает, только жутко теряется качество.


Коэффициент quality, про который уже упомянули, как раз влияет на количество цветов в палитре. Первое, что я бы сделал, вывел бы одну и туже картинку с разным значением этого коэффициента.
Название: Снова GD
Отправлено: Меняздесьдавнонет от 04 Декабря 2003, 18:10:36
Это верно. Попробовав его один раз,в сторону ГД уже и не взглянешь
Название: Снова GD
Отправлено: Меняздесьдавнонет от 04 Декабря 2003, 18:12:09
Yukko, я вот тоже все про гаммы да поллитры думал.
а ты приглядись внимательнее. у него там копиресайзед стоит.
Название: Снова GD
Отправлено: Yukko от 04 Декабря 2003, 18:34:00
RomikChef
У него есть два способа, либо писать полностью каждый пиксель вручную... либо воспользоваться ответом, который дали вот на этот вопрос:
Цитировать
hanslinger:Подскажите в таком случае, как можно проще, пожалуйста.

Ответ прозвучал:
Цитировать
NeoNox:
Imagemagick

В моем первом предложении этого поста осталось только поменять порядок следования альтернатив:
Сначала идет:
использовать то, что другие используют
потом идет:
заниматься любовью с попиксельным выводом, библиотекой GD и т.д. кому с чем ближе :D :D :D
Название: Снова GD
Отправлено: Меняздесьдавнонет от 04 Декабря 2003, 18:43:41
Yukko , повторяю.
Речь идет не об имэджике.
Речь идет о том, что он мог бы причину плохого качества отловить нормальными программистскими методами -отладкой, отбрасыванием лишнего.
И уже конкретно задать вопрос.
не "почему у меня  поллитра не того качества", а "какова альтернатива копиресайзеду"
Название: Снова GD
Отправлено: Yukko от 04 Декабря 2003, 18:49:21
RomikChef
согласен, черт возьми :)
Название: Снова GD
Отправлено: hanslinger от 04 Декабря 2003, 18:51:09
Вот теперь я услышал, наконец, что-то дельное...
Итак.
Yukko: Я смотрел на все эти функции, читал по нескольку раз все, что написано про них в мане, но пока не придумал, что бы с ними такого интересного сделать. Это мне каждый пиксель придется сопоставлять, а это долго и неприятно. Я попробую еще поковыряться, но как-то безнадежно мне это кажется...
RomikChef:
 1) Если пользоваться imagetruecolor(), то КАК, как мне поменять палитру?
 2) а) я делал и без изменений, и всяко-разно делал. Портит все и resized, и truecolortopalette(), и palettecopy(). Насчет resampled - надо поглядеть, вдруг и правда подходит больше.
    б) Что используешь лично ты, я не спрашивал. Я бы сам с огромным удовольствием использовал Photoshop. Беда в том, что не подходит это для моей задачи.

Про Imagemagick я пока не знаю ничего, но я поищу.

Может быть, будет яснее, если я скажу конкретнее про свою задачу: есть сайт с цветовой гаммой от светло-зеленого до темно-зеленого. Мне нужно, чтобы любая картинка "вписывалась" в эту зеленую гамму. Вот я и мучаюсь. Это не слишком принципиальный вопрос, но я хочу, раз уж делать, то делать все как следует.
Название: Снова GD
Отправлено: Phoinix от 04 Декабря 2003, 19:28:34
Цитировать
есть сайт с цветовой гаммой от светло-зеленого до темно-зеленого. Мне нужно, чтобы любая картинка "вписывалась" в эту зеленую гамму. Вот я и мучаюсь. Это не слишком принципиальный вопрос, но я хочу, раз уж делать, то делать все как следует


Yo!!! Нет я просто не выдержал...
скрипт - веб-дизайнер... который сам рисует дизайны...
Долой фотошоп! долой веб-дизайнеров! Интернет, только для программистов и их электронных друзей - скриптов!!!

Ну никак непонятно:
если много картинок - сервак загнется, ну может не загнется, но легче ему не станет, тем более, я очень сильно сомневаюсь, что разработчики GD рассчитывали на такое каскадное изменение изображений...

если мало картинок - то зачем фотошоп? Нет! Мы заставим медведя играть в большой теннис, причем профессионально...

но есть еще вариант - динамическое изменение палитры сайта, да интересно... секунду назад был зеленый, а теперь - синий... причем синее все... смысл? ну может быть смысл есть, не писать каждый раз и не подгонять шаблоны или "шкурки"... но что-то сомнительно практическое применение данного скрипта... Тут не скрипт выдумывать надо, а целый модуль и не пользоваться готовеньким, ну не для того его создавали...

Сразу извиняюсь если вдруг не по теме что-то ляпнул...
Название: Снова GD
Отправлено: Mog. от 04 Декабря 2003, 19:40:42
А в поллитре от темнозеленого до светлозеленого сколько разных цветов умещается? 256 и меньше? И полноцветную картинку в 256 реальных цветов, размазанных по, пусть даже, 16М палитре, перекрашивать. И при этом хотеть качества?
Или приведенный выше код (тот кусок который с палитрами связан) аналогичен по действию труколор->грэйскейл->и_зеленым_затонировать ?

Я вот тут ночь не спал :) , все думал :) . А может тебе количество цветов задавать числом поменьше и посмотреть, что из этого выйдет?
Название: Снова GD
Отправлено: hanslinger от 08 Декабря 2003, 09:47:15
Я пробовал. Я задавал вообще 255, результат не сильно отличался от 65к... :)
Название: Снова GD
Отправлено: Mog. от 09 Декабря 2003, 08:58:12
hanslinger, а посмотреть на результаты можно?
Название: Снова GD
Отправлено: hanslinger от 09 Декабря 2003, 09:41:08
А с этим история смешная... я три недели ругался с хостером, он только вчера мне выделил новый сервер, я пока там еще не разобрался. Я тогда просто сделаю две картинки и пришлю линк, оке?