Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Графика > Реализация режимов наложения изображений.


Автор: serezhka1986 6.2.2012, 10:31
Добрый день! Подскажите, пожалуйста, реально ли реализовать режими наложения изображений как в Фотошопе? Например, Затемнение, Мягкий свет, Жесткий свет, Перекрытие, Исключение и т.д.
Может есть какие-то готовые скрипты по данной теме? Или статьи? Поделитесь.  smile 

Автор: krundetz 6.2.2012, 12:21
serezhka1986, в данной ветке форума как-то поднимался вопрос по алгоритму создания тени под шрифтом, можете поискать. Собственно ваш вопрос упирается в алгоритмы. Средством же может служить обычный GD2.

Автор: $дмитрий 6.2.2012, 15:28
Посмотри http://www.imagemagick.org/image/examples.jpg, там куча встроенных эффектов

Автор: serezhka1986 6.2.2012, 17:36
Раньше никогда не работал с изображениями в php. По-этому вопрос может и нулячий, но подскажите решение, поскольку по мануалу пхп ничего не могу понять.
Если есть цвет в RGB, допустим (109, 0, 0). Мне его нужно задать определенному пикселю изображения.
Для этого, я так понял, используем int imagesetpixel (resource image, int x, int y, int col)
где 
image - изображение
x - координаты по ширине
y - координаты по высоте
col - цвет
Но цвет надо указывать не RGB? Как тогда его перевести в нужный?

Автор: cutwater 6.2.2012, 18:22
http://php.net/manual/en/function.imagesetpixel.php

Документацию читать нынче уже не модно?

Автор: serezhka1986 6.2.2012, 18:47
Модно, но знание английского хромает. А если у меня всего-навсего пустое изображение размером 500*400 созданное с помощью imagecreate и 3 значения цвета
Код

$my_image = imagecreate(500, 400);
$r = 109;
$g = 0;
$b = 0;

А мне нужно задать, например, цвет пикселю с координатами x=100 и y=250
Как быть?  smile 

Автор: cutwater 6.2.2012, 23:20
serezhka1986, открыть ссылку еще раз. Посмотреть первый пример. Получить ответ на свой вопрос.

Понять что без знания английского делать нечего в программировании. Попробовать себя в другой нужной профессии.

Автор: serezhka1986 7.2.2012, 10:31
Да.... Остроумно... Вместо того чтобы помочь, подсказать что-нибудь - надо поумничать. smile 

Автор: krundetz 7.2.2012, 12:48
Код

<?php

$x = 500;
$y = 400;
 
$picX = 100;
$picY = 100;

$r = 109;
$g = 0;
$b = 0;

$img = imagecreatetruecolor($x, $y);

$color = imagecolorallocate($img, $r, $g, $b); 

imagesetpixel($img, $picX, $picY, $color);

 
header('Content-Type: image/png');
imagepng($img);

?>


Автор: serezhka1986 7.2.2012, 13:52
Спасибо огромное за помощь!  smile 
Вот нашел http://www.gamedev.net/blog/862/entry-2249668-pixel-blend-mode-algorithms-including-overlay/.
Реализовал наложение двох слоев (фотка и слой с красной заливкой) по данному алгоритму. Примерно так:
Код

$uploaddir = 'uploads/';

 $uploadfile = $uploaddir . basename($_FILES["image"]["name"]);



if (move_uploaded_file($_FILES['image']['tmp_name'], $uploadfile)) {
   header("Content-type: image/jpeg"); 
   $size = getimagesize($uploadfile);
   $source = imagecreatefromjpeg($uploadfile);
   @unlink($uploadfile);
   $im = imagecreatetruecolor($size[0], $size[1]);
   for ($x = 0; $x < $size[0]; $x++) {
       for ($y = 0; $y < $size[1]; $y++) {
   $colors=imagecolorsforindex($source, imagecolorat($source, $x,$y));
   $r=$colors['red'];
   $g=$colors['green'];
   $b=$colors['blue'];
   $r = ceil((255 * $r) / 255) ;
   $g = ceil((0 * $g) / 255 );
   $b = ceil((0 * $b) / 255 );
   $color = imagecolorallocate($im, $r,$g,$b);
   imagesetpixel($im, $x, $y, $color);
       }
   }
   imagejpeg($im, "", 100);
   imagedestroy($im);
 }

Но качество изображений отличается от фотошоповского:
Photoshop
user posted image
Script
user posted image
Есть ли какое-нибудь решение данной проблемы?

Автор: krundetz 7.2.2012, 15:01
посмотри в сторону ImageMagick, хотя здесь скорее всего применяется ещё один алгоритм повышения четкости изображения, либо более сложный механизм преобразования

Автор: serezhka1986 8.2.2012, 17:36
Вот нашел алгоритмы почти всех режимов наложения в фотошопе: http://www.vanderlee.com/tut_fm_mixingmodes.html
Есть у кого пример реализации полупрозрачности?
Мне надо на фотку наложить красный цвет одним из режимов наложения, но красный должен быть полупрозрачным (Непрозрачность: 50%)

Автор: krundetz 9.2.2012, 09:06
serezhka1986, вроде как можно наложить одно изображение на другое, одно может быть полупрозрачным

также если не получиться встроенными средствами, то попробуй получить смещение которое получается при наложение искомой полу прозрачности, и смещай все цвета в этом направление, на заданную величину

Автор: serezhka1986 13.2.2012, 12:08
Есть ли какой-нибудь вариант реализации размытия по Гауссу с радиусом 10 пикселей. 
Вот оригинал изображения:
user posted image
Вот размытие по Гауссу радиусом 10 пикселей в Фотошоп:
user posted image
Если использовать библиотеку GD, в часности функцию imagefilter() с параметром IMG_FILTER_GAUSSIAN_BLUR (размытие по Гауссу), то получается вот такое:
user posted image
Пробовал применять несколько раз, но добится желаемого результата не получается. Изображение хоть и немного размывается, но становится темным. 
Никто не встречал чего-нибудь подобного? 
Возможно такое можно еще как-нибудь реализовать, например, с помощью матриц скручивания?

Автор: Task 27.2.2012, 08:26
В GD существует функция imageconvolution (в мануалах указание, что она не документирована, но она работает, в любом случае можете проверить на своей версии GD), которая в качестве параметра принимает массив значений матрицы фильтра. Правда матрица только 3х3, но вполне позволяет применить фильтр к изображению, которого нет среди предустановленных в GD. 

Автор: Genn 8.8.2012, 20:46
может это фильтры, а не наложение, правильно сформулировать ?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)