Nach 8 Jahren Fahrklicks auf diese Seite gilt sie erst jetzt als nicht zum Thema gehörend?
Nathan Moinvaziri
Alles was es braucht sind 5 enge Stimmen von Leuten mit mindestens 3000 Wiederholungen. Es ist ziemlich offensichtlich, dass diese Frage von der SO-Community nicht als nicht zum Thema gehörend angesehen wird
Panagiotis Kanavos
PS: Die 4 Downvotes könnten 8 Jahre alt sein. Möglicherweise ist jemand letzte Woche in der Warteschlange auf die Frage gestoßen und hat für das Schließen gestimmt. SO hat momentan so viele Fragen, dass es schwierig ist, Fragen mehr richtig zu beachten. Der Bearbeitungsverlauf zeigt, dass die ursprüngliche Frage ebenfalls etwas bearbeitet werden musste
Panagiotis Kanavos
Vielleicht würde eine Rückkehr zu Revision 3 oder ähnlichem die Wahrscheinlichkeit erhöhen, dass dies von den Gutachtern wieder geöffnet wird. Im aktuellen Zustand ist es leicht, die Frage als "Wie verwende ich Photoshop?" - Frage zu verwechseln und sie als nicht recherchierend abzulehnen.
Adam Millerchip
Antworten:
210
Photoshop mischt zwei Bilder zusammen, indem für jedes Pixel in Bild A eine Mischoperation mit dem entsprechenden Pixel in Bild B ausgeführt wird. Jedes Pixel ist eine Farbe, die aus mehreren Kanälen besteht. Angenommen, wir arbeiten mit RGB-Pixeln, wären die Kanäle in jedem Pixel rot, grün und blau. Um zwei Pixel zu mischen, mischen wir ihre jeweiligen Kanäle.
Der Mischvorgang, der für jeden Mischmodus in Photoshop ausgeführt wird, kann in den folgenden Makros zusammengefasst werden:
#defineChannelBlend_Normal(A,B)((uint8)(A))#defineChannelBlend_Lighten(A,B)((uint8)((B > A)? B:A))#defineChannelBlend_Darken(A,B)((uint8)((B > A)? A:B))#defineChannelBlend_Multiply(A,B)((uint8)((A * B)/255))#defineChannelBlend_Average(A,B)((uint8)((A + B)/2))#defineChannelBlend_Add(A,B)((uint8)(min(255,(A + B))))#defineChannelBlend_Subtract(A,B)((uint8)((A + B <255)?0:(A + B -255)))#defineChannelBlend_Difference(A,B)((uint8)(abs(A - B)))#defineChannelBlend_Negation(A,B)((uint8)(255- abs(255- A - B)))#defineChannelBlend_Screen(A,B)((uint8)(255-(((255- A)*(255- B))>>8)))#defineChannelBlend_Exclusion(A,B)((uint8)(A + B -2* A * B /255))#defineChannelBlend_Overlay(A,B)((uint8)((B <128)?(2* A * B /255):(255-2*(255- A)*(255- B)/255)))#defineChannelBlend_SoftLight(A,B)((uint8)((B <128)?(2*((A>>1)+64))*((float)B/255):(255-(2*(255-((A>>1)+64))*(float)(255-B)/255))))#defineChannelBlend_HardLight(A,B)(ChannelBlend_Overlay(B,A))#defineChannelBlend_ColorDodge(A,B)((uint8)((B ==255)? B:min(255,((A <<8)/(255- B)))))#defineChannelBlend_ColorBurn(A,B)((uint8)((B ==0)? B:max(0,(255-((255- A)<<8)/ B))))#defineChannelBlend_LinearDodge(A,B)(ChannelBlend_Add(A,B))#defineChannelBlend_LinearBurn(A,B)(ChannelBlend_Subtract(A,B))#defineChannelBlend_LinearLight(A,B)((uint8)(B <128)?ChannelBlend_LinearBurn(A,(2* B)):ChannelBlend_LinearDodge(A,(2*(B -128))))#defineChannelBlend_VividLight(A,B)((uint8)(B <128)?ChannelBlend_ColorBurn(A,(2* B)):ChannelBlend_ColorDodge(A,(2*(B -128))))#defineChannelBlend_PinLight(A,B)((uint8)(B <128)?ChannelBlend_Darken(A,(2* B)):ChannelBlend_Lighten(A,(2*(B -128))))#defineChannelBlend_HardMix(A,B)((uint8)((ChannelBlend_VividLight(A,B)<128)?0:255))#defineChannelBlend_Reflect(A,B)((uint8)((B ==255)? B:min(255,(A * A /(255- B)))))#defineChannelBlend_Glow(A,B)(ChannelBlend_Reflect(B,A))#defineChannelBlend_Phoenix(A,B)((uint8)(min(A,B)- max(A,B)+255))#defineChannelBlend_Alpha(A,B,O)((uint8)(O * A +(1- O)* B))#defineChannelBlend_AlphaF(A,B,F,O)(ChannelBlend_Alpha(F(A,B),A,O))
Um ein einzelnes RGB-Pixel zu mischen, gehen Sie wie folgt vor:
Wenn Sie Zeiger auf die Bilddaten für die Bilder A, B und T (unser Ziel) haben, können wir das Mischen aller drei Kanäle mithilfe dieses Makros vereinfachen:
Ja, tolle Antwort, danke! Ich habe mich gefragt, ob jemand weiß, wie die Deckkraft von Ebenen in Photoshop erfolgt. dh ich möchte die Überblendungsdunkelfunktion verwenden, aber nur 50% ... Ich habe die Werte in Photoshop überprüft und es scheint nicht, dass es ausreicht, nur 50% der Werte des Überblendungsbildes zu übernehmen ...
Maecky
2
Die angegebene Alpha-Formel ist nicht vollständig - sie funktioniert nur für den Fall, dass der Hintergrund vollständig undurchsichtig ist. Wenn der Hintergrund transparent ist, kann das Ergebnis nach dem Zeichnen transparent sein. Für diesen allgemeineren Fall müssen Sie Alpha-Blending anwenden, wie es in Wikipedia beschrieben ist.
thenickdude
2
Wie wäre es mit Alpha-Kanal? Soll ich die Funktionen auch darauf anwenden?
Akhy
Gute Antwort!! Reflect und Glow werden umgeschaltet. Ansonsten: Großartig !! (Obwohl Alpha-Compositing fehlt ..)
TaW
c # -Lösung für Alpha-Comp'ing: statische Farbe alphaComposite (Farbe c1, Farbe c2, Farbe cb, float op) {float a1, a2, ab, ar = 1; ar = v [c1.A] + v [c2.A] * op - (v [c1.A] * v [c2.A] * op); float asr = v [c2.A] * op / ar; a1 = 1 - asr; a2 = asr * (1 - v [c1.A]); ab = asr * v [c1.A]; Byte r = (Byte) (c1.R * a1 + c2.R * a2 + cb.R * ab); Byte g = (Byte) (c1.G * a1 + c2.G * a2 + cb.G * ab); Byte b = (Byte) (c1.B * a1 + c2.B * a2 + cb.B * ab); return Color.FromArgb ((Byte) (ar * 255), r, g, b); }
TaW
7
Die Mischmodi Farbton, Farbe und Sättigung in dieser Antwort sind falsch. Kein Adobe-Produkt wird in HSB konvertiert. Der Vorgang wird direkt mit RGB-Werten ausgeführt.
Hier ist die GLSL zum Einstellen der Leuchtkraft, zum Beispiel:
Die beliebte Antwort lautet zu 99,9% richtig, aber wie Greyfriars sagte, wird das genaue Ergebnis nicht erzielt, da Adobe HLS zu keinem Zeitpunkt beim Mischen verwendet.
Sie müssen jedoch nicht bei Adobe arbeiten, um dies zu tun. Sie können genau die gleiche Mischung erzielen, indem Sie alle Regeln hier in diesem Dokument von Adobe befolgen:
Während die populäre Antwort größtenteils richtig ist, ist die folgende Aussage falsch. "Der Rest der Photoshop-Mischmodi umfasst die Konvertierung von RGB in HLS und wieder zurück." Nein, Photoshop (und nur Photoshop) verwendet Chroma und Luma anstelle von HLS.
Für die Modi Farbton, Farbe, Leuchtkraft und Sättigung können Sie also keine einfachen Algorithmen verwenden. Um in diesen Fällen mit der Photoshop-Methode übereinzustimmen, müssen Sie für Adobe arbeiten.
Antworten:
Photoshop mischt zwei Bilder zusammen, indem für jedes Pixel in Bild A eine Mischoperation mit dem entsprechenden Pixel in Bild B ausgeführt wird. Jedes Pixel ist eine Farbe, die aus mehreren Kanälen besteht. Angenommen, wir arbeiten mit RGB-Pixeln, wären die Kanäle in jedem Pixel rot, grün und blau. Um zwei Pixel zu mischen, mischen wir ihre jeweiligen Kanäle.
Der Mischvorgang, der für jeden Mischmodus in Photoshop ausgeführt wird, kann in den folgenden Makros zusammengefasst werden:
Um ein einzelnes RGB-Pixel zu mischen, gehen Sie wie folgt vor:
Wenn wir einen Mischvorgang mit einer bestimmten Deckkraft ausführen möchten, sagen wir 50%:
Wenn Sie Zeiger auf die Bilddaten für die Bilder A, B und T (unser Ziel) haben, können wir das Mischen aller drei Kanäle mithilfe dieses Makros vereinfachen:
Und kann die folgenden RGB-Farbmischungsmakros ableiten:
Und ein Beispiel wäre:
Der Rest der Photoshop-Mischmodi umfasst die Konvertierung von RGB in HLS und wieder zurück.
Diese Funktionen sind hilfreich bei der Konvertierung von RGB in HLS.
Zu diesem Thema gibt es weitere Ressourcen, hauptsächlich:
quelle
Die Mischmodi Farbton, Farbe und Sättigung in dieser Antwort sind falsch. Kein Adobe-Produkt wird in HSB konvertiert. Der Vorgang wird direkt mit RGB-Werten ausgeführt.
Hier ist die GLSL zum Einstellen der Leuchtkraft, zum Beispiel:
Keine Unterstützung für if .. else-Anweisungen in CIKernels, daher die Verwendung von ternären Operatoren.
quelle
Die beliebte Antwort lautet zu 99,9% richtig, aber wie Greyfriars sagte, wird das genaue Ergebnis nicht erzielt, da Adobe HLS zu keinem Zeitpunkt beim Mischen verwendet.
Sie müssen jedoch nicht bei Adobe arbeiten, um dies zu tun. Sie können genau die gleiche Mischung erzielen, indem Sie alle Regeln hier in diesem Dokument von Adobe befolgen:
Grundsätzlich Kapitel 4 und 7: http://partners.adobe.com/public/developer/en/pdf/PDFReference.pdf
Dann erreichen Sie genau wie Adobe das genaue Ergebnis! Pixel für Pixel!
quelle
Während die populäre Antwort größtenteils richtig ist, ist die folgende Aussage falsch. "Der Rest der Photoshop-Mischmodi umfasst die Konvertierung von RGB in HLS und wieder zurück." Nein, Photoshop (und nur Photoshop) verwendet Chroma und Luma anstelle von HLS.
Für die Modi Farbton, Farbe, Leuchtkraft und Sättigung können Sie also keine einfachen Algorithmen verwenden. Um in diesen Fällen mit der Photoshop-Methode übereinzustimmen, müssen Sie für Adobe arbeiten.
quelle