Photoshop'un "Parlaklığını" Sahne

5 Cevap php

Ben iki JPEG'lerinizi var ve "Parlaklık" Photoshop mevcut modu (ve Fireworks) gibi aynı sonuçları ile diğeri üzerine bindirmek istiyorum. Sen Parlaklık modu hakkında daha fazla buradan okuyabilirsiniz: http://www.adobetutorialz.com/articles/662/1/Photoshop%92s-Luminosity-Mode

Bunu nasıl yapabilirim? Programlama dili çok önemli değil, fakat ben (bu sırayla) Python ve PHP ile en akıcı duyuyorum. Python Imaging Library mükemmel uyum gibi görünüyor, ama parlaklık yerleşik bir işlevi değildir ve ben uygun prosedürü bilmiyorum. Bkz http://effbot.org/imagingbook/imagechops.htm

5 Cevap

Ben bu özel filtre bilmem ama ben nasıl PIL içinde Coincoin adımları izleyin söyleyebilirim. Aslında kodu çalıştırmak vermedi, ama bir referans olarak kullanabilirsiniz:

Kaynak ve hedef JPEG hem yükleyin

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

* L RGB renk uzaydan piksel dönüştürmek a * b renk uzayı (veya luminosirty bilgi ile başka bir renk uzayı)

# 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)

Hedef renk kanallarını korumak ve kaynağın parlaklık tarafından kendi parlaklık kanalını değiştirin

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

RGB uzaya geri dönüştürmek

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

Jpeg kaydet

img1.save('new_image.jpg')

Öncelikle Photoshop ne anlamamız gerekir.

Bu tabaka algısal renk bilgisi altında korur ve üst katmanın algısal parlaklık bilgileri ile parlaklık bulunuyor değiştirir. Bunu yapmak için, doğru renk alanına görüntüleri dönüştürmek gerekir.

Burada kendiniz ile her şeyi uygulamaya karar verirseniz yapmanız gereken şeylerin shoping listesi:

  • Kaynak ve hedef JPEG hem yükleyin
  • * L RGB renk uzaydan piksel dönüştürmek a * b renk uzayı (veya luminosirty bilgi ile başka bir renk uzayı)
  • Hedef renk kanallarını korumak ve kaynağın parlaklık tarafından kendi parlaklık kanalını değiştirin
  • RGB uzaya geri dönüştürmek
  • Jpeg kaydet

Laboratuvar çok karmaşık olduğunu düşünüyorsanız, siz de çok daha basittir, HSL renk alanını kullanabilirsiniz ama alt sonuçlar verecektir.

Pseudo-code:

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 den HSL ve geri isimli here dönüşüm.

Gimp başka bir seçenek olacaktır - bir betik arayüze sahip ans bir piton api - burada luminosity and the Gimp üzerine bir makale. Çaldığınız için gidiyoruz aynı etki olup olmadığından emin değil.

Sen OpenCV görüntü işleme kütüphanede bir göz olabilir. Python bağları vardır ve sizin için bu alt düzey görüntü işleme görevleri bir sürü kolları, ya da en azından onları kolaylaştırır.