2009-05-11 2 views
3

У меня есть два JPEG и хотелось бы наложить один на другой с теми же результатами, что и режим «Светимость», доступный в Photoshop (и Fireworks). Вы можете узнать больше о режиме светимости здесь: http://www.adobetutorialz.com/articles/662/1/Photoshop%92s-Luminosity-ModeВыполнение фильтра «Светимость» Photoshop программно

Как это сделать? Язык программирования не имеет большого значения, но я лучше всего владею Python и PHP (в этом порядке). Библиотека изображений Python выглядит идеально, но яркость не является встроенной функцией, и я не знаю правильной процедуры. См. http://effbot.org/imagingbook/imagechops.htm

ответ

1

Я не знаю об этом конкретном фильтре, но я могу рассказать вам, как следовать шагам Coincoin в PIL.Я на самом деле не запустить код, но вы можете использовать его в качестве ссылки:

нагрузки как исходных и целевых JPEGs

from PIL import Image 
img1 = Image.open('image1.jpg') 
img2 = Image.open('image2.jpg') 

Преобразования пикселей из RGB цветового пространства L б цвета пространство (или любого другого цветового пространства с информацией luminosirty)

# Color matrix for Lab 
colorMatrix = (
    x1, y1, z1, 0, 
    x2, y2, z2, 0, 
    x3, y3, z3, 0 
) 
img1 = img1.convert("RGB", colorMatrix) 
img2 = img2.convert("RGB", colorMatrix) 

Сохранение цветовых каналов целевых и заменить его светимость канал, светимость источника в

l1, a1, b1 = img1.split() 
l2, a2, b2 = img2.split() 
img1.putdata(zip(l1.getdata(), a2.getdata(), b2.getdata())) 

Преобразовать обратно в RGB пространстве

# Color matrix for RGB 
RGBcolorMatrix = (
    x1, y1, z1, 0, 
    x2, y2, z2, 0, 
    x3, y3, z3, 0 
) 
img1 = img1.convert("RGB", RGBcolorMatrix) 

Сохранить JPEG

img1.save('new_image.jpg') 
+0

Wow. СПАСИБО. –

+0

На самом деле ... Ненавижу говорить об этом, но можете ли вы объяснить кусок colorMatrix с x1, y1, z1? Очевидно, что Python не позволит этого, поскольку они не определены во время компиляции. Какими же валами я должен использовать вместо тех, кто в вашем псевдокоде? –

+1

Вы видите эту страницу для получения дополнительной информации о функции преобразования и ее использовании. Http://www.pythonware.com/library/pil/handbook/image.htm –

0

Gimp будет другим вариантом - он имеет интерфейс для скриптов и api python - вот статья на luminosity and the Gimp. Не уверен, что это тот же эффект, что и вы.

+0

Вероятно, не ваша вина, но этот URL не доступен. –

5

Сначала вам нужно понять, что делает Photoshop.

Он сохраняет информацию о цвете восприятия под слоем и заменяет его яркость информацией о перцептивной освещенности верхнего уровня. Для этого вам нужно преобразовать изображения в нужное цветовое пространство.

Вот Shoping список вещей, которые вам нужно будет сделать, если вы решили реализовать все сами:

  • нагрузки как источник и цель JPEGS
  • Преобразование пикселей из RGB цветового пространства L цветовое пространство б (или любого другого цветового пространства с информацией luminosirty)
  • Сохранение цветовых каналов целевых и заменить его светимость канал, светимость источника в
  • преобразовать обратно в RGB пространстве
  • Сохранить JPEG

Если вы думаете Lab является слишком сложным, вы можете также использовать HSL цветового пространства, это гораздо проще, но это даст худшие результаты.

1

В псевдокоде:

foreach rgb_pixel1, rgb_pixel2 in image1, image2 { 
    hsl1 = RgbToHsl(rgb_pixel1); 
    hsl2 = RgbToHsl(rgb_pixel2); 
    hsl3 = hsl(hsl1.h, hsl1.s, hsl2.l); 
    output_rgb = HslToRgb(hsl3); 
} 

Преобразование из RGB в HSL и обратно here.

+0

Я думаю, что я попытаюсь это сделать первым. Другой комментатор сказал, что качество HSL уступает, но я бы хотел судить об этом, прежде чем я потрачу дополнительное время. PIL не поддерживает HSL, но, видимо, я могу получить значения HSL для пикселя RGB, используя colorsys: http://effbot.org/zone/pil-hsl.htm –

0

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

Смежные вопросы