Heim > Artikel > Backend-Entwicklung > Wie mischt Photoshop Bilder und welche verschiedenen Mischmodi stehen zur Verfügung?
So führt Photoshop Bilder zusammen
Photoshop mischt Bilder nahtlos, indem es einen Mischvorgang für jedes Pixel von Bild A mit dem entsprechenden Pixel in Bild B ausführt . Jedes Pixel besteht aus mehreren Kanälen, wobei jeder Kanal eine Farbe darstellt. Bei RGB-Pixeln umfassen diese Kanäle Rot, Grün und Blau.
Um zwei Pixel zusammenzuführen, werden ihre jeweiligen Kanäle mithilfe spezifischer Mischvorgänge kombiniert. Die Mischmodi von Photoshop verwenden die folgenden mathematischen Funktionen:
ChannelBlend_Normal: ((uint8) A) ChannelBlend_Lighten: ((uint8) (B > A) ? B : A) ChannelBlend_Darken: ((uint8) (B > A) ? A : B) ChannelBlend_Multiply: ((uint8) ((A * B) / 255)) ChannelBlend_Average: ((uint8) ((A + B) / 2)) ChannelBlend_Add: ((uint8) min(255, (A + B)))) ChannelBlend_Subtract: ((uint8) ((A + B < 255) ? 0 : (A + B - 255))) ChannelBlend_Difference: ((uint8) abs(A - B)) ChannelBlend_Negation: ((uint8) (255 - abs(255 - A - B))) ChannelBlend_Screen: ((uint8) (255 - (((255 - A) * (255 - B)) >> 8))) ChannelBlend_Exclusion: ((uint8) (A + B - 2 * A * B / 255)) ChannelBlend_Overlay: ((uint8) (B < 128) ? (2 * A * B / 255) : (255 - 2 * (255 - A) * (255 - B) / 255))) ChannelBlend_SoftLight: ((uint8) (B < 128) ? (2 * ((A >> 1) + 64)) * ((float) B / 255) : (255 - 2 * (255 - ((A >> 1) + 64)) * (float) (255 - B) / 255)))) ChannelBlend_HardLight: (ChannelBlend_Overlay(B, A)) ChannelBlend_ColorDodge: ((uint8) (B == 255) ? B : min(255, ((A << 8 ) / (255 - B))))) ChannelBlend_ColorBurn: ((uint8) (B == 0) ? B : max(0, (255 - ((255 - A) << 8 ) / B)))) ChannelBlend_LinearDodge: (ChannelBlend_Add(A, B)) ChannelBlend_LinearBurn: (ChannelBlend_Subtract(A, B)) ChannelBlend_LinearLight: ((uint8) (B < 128) ? ChannelBlend_LinearBurn(A, (2 * B)) : ChannelBlend_LinearDodge(A, (2 * (B - 128))))) ChannelBlend_VividLight: ((uint8) (B < 128) ? ChannelBlend_ColorBurn(A, (2 * B)) : ChannelBlend_ColorDodge(A, (2 * (B - 128))))) ChannelBlend_PinLight: ((uint8) (B < 128) ? ChannelBlend_Darken(A, (2 * B)) : ChannelBlend_Lighten(A, (2 * (B - 128))))) ChannelBlend_HardMix: ((uint8) ((ChannelBlend_VividLight(A, B) < 128) ? 0 : 255)) ChannelBlend_Reflect: ((uint8) (B == 255) ? B : min(255, (A * A / (255 - B))))) ChannelBlend_Glow: (ChannelBlend_Reflect(B, A)) ChannelBlend_Phoenix: ((uint8) (min(A, B) - max(A, B) + 255)) ChannelBlend_Alpha: ((uint8) (O * A + (1 - O) * B)) ChannelBlend_AlphaF: (ChannelBlend_Alpha(F(A, B), A, O))
So mischen Sie ein einzelnes RGB-Pixel:
ImageTColorR = ChannelBlend_Glow(ImageAColorR, ImageBColorR); ImageTColorB = ChannelBlend_Glow(ImageAColorB, ImageBColorB); ImageTColorG = ChannelBlend_Glow(ImageAColorG, ImageBColorG); ImageTColor = RGB(ImageTColorR, ImageTColorB, ImageTColorG);
Zum Mischen mit einer bestimmten Deckkraft (z. B. 50 %):
ImageTColorR = ChannelBlend_AlphaF(ImageAColorR, ImageBColorR, Blend_Subtract, 0.5F);
Um das Mischen aller drei Kanäle zu vereinfachen, kann ein Puffermakro verwendet werden verwendet:
#define ColorBlend_ ## M(T, A, B) (T)[0] = ChannelBlend_ ## M((A)[0], (B)[0]), (T)[1] = ChannelBlend_ ## M((A)[1], (B)[1]), (T)[2] = ChannelBlend_ ## M((A)[2], (B)[2])
Ergibt die folgenden RGB-Farbmischungsmakros:
#define ColorBlend_Normal(T, A, B) ColorBlend_Buffer(T, A, B, Normal) #define ColorBlend_Lighten(T, A, B) ColorBlend_Buffer(T, A, B, Lighten) #define ColorBlend_Darken(T, A, B) ColorBlend_Buffer(T, A, B, Darken) #define ColorBlend_Multiply(T, A, B) ColorBlend_Buffer(T, A, B, Multiply) #define ColorBlend_Average(T, A, B) ColorBlend_Buffer(T, A, B, Average) #define ColorBlend_Add(T, A, B) ColorBlend_Buffer(T, A, B, Add) #define ColorBlend_Subtract(T, A, B) ColorBlend_Buffer(T, A, B, Subtract) #define ColorBlend_Difference(T, A, B) ColorBlend_Buffer(T, A, B, Difference) #define ColorBlend_Negation(T, A, B) ColorBlend_Buffer(T, A, B, Negation) #define ColorBlend_Screen(T, A, B) ColorBlend_Buffer(T, A, B, Screen) #define ColorBlend_Exclusion(T, A, B) ColorBlend_Buffer(T, A, B, Exclusion) #define ColorBlend_Overlay(T, A, B) ColorBlend_Buffer(T, A, B, Overlay) #define ColorBlend_SoftLight(T, A, B) ColorBlend_Buffer(T, A, B, SoftLight) #define ColorBlend_HardLight(T, A, B) ColorBlend_Buffer(T, A, B, HardLight) #define ColorBlend_ColorDodge(T, A, B) ColorBlend_Buffer(T, A, B, ColorDodge) #define ColorBlend_ColorBurn(T, A, B) ColorBlend_Buffer(T, A, B, ColorBurn) #define ColorBlend_LinearDodge(T, A, B) ColorBlend_Buffer(T, A, B, LinearDodge) #define ColorBlend_LinearBurn(T, A, B) ColorBlend_Buffer(T, A, B, LinearBurn) #define ColorBlend_LinearLight(T, A, B) ColorBlend_Buffer(T, A, B, LinearLight) #define ColorBlend_VividLight(T, A, B) ColorBlend_Buffer(T, A, B, VividLight) #define ColorBlend_PinLight(T, A, B) ColorBlend_Buffer(T, A, B, PinLight) #define ColorBlend_HardMix(T, A, B) ColorBlend_Buffer(T, A, B, HardMix) #define ColorBlend_Reflect(T, A, B) ColorBlend_Buffer(T, A, B, Reflect) #define ColorBlend_Glow(T, A, B) ColorBlend_Buffer(T, A, B, Glow) #define ColorBlend_Phoenix(T, A, B) ColorBlend_Buffer(T, A, B, Phoenix)
Beispiel:
ColorBlend_Glow(TargetPtr, ImageAPtr, ImageBPtr);
Für Mischmodi mit HLS-Konvertierung:
#define ColorBlend_Hue(T, A, B) ColorBlend_Hls(T, A, B, HueB, LuminationA, SaturationA)
Das obige ist der detaillierte Inhalt vonWie mischt Photoshop Bilder und welche verschiedenen Mischmodi stehen zur Verfügung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!