96 lines
3.4 KiB
Go
96 lines
3.4 KiB
Go
|
package bilds
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"image"
|
||
|
|
||
|
"github.com/anthonynsimon/bild/blend"
|
||
|
"github.com/spf13/cobra"
|
||
|
)
|
||
|
|
||
|
func buildBlendModeCommand(name string) *cobra.Command {
|
||
|
var strength float64
|
||
|
|
||
|
var cmd = &cobra.Command{
|
||
|
Use: name,
|
||
|
Args: cobra.ExactArgs(3),
|
||
|
Example: fmt.Sprintf("%s --strength 0.5 input1.jpg input2.jpg output.jpg", name),
|
||
|
Run: func(cmd *cobra.Command, args []string) {
|
||
|
fin1 := args[0]
|
||
|
fin2 := args[1]
|
||
|
fout := args[2]
|
||
|
|
||
|
apply2(fin1, fin2, fout, func(img1, img2 image.Image) (image.Image, error) {
|
||
|
switch name {
|
||
|
case "add":
|
||
|
return blend.Opacity(img1, blend.Add(img1, img2), strength), nil
|
||
|
case "colorburn":
|
||
|
return blend.Opacity(img1, blend.ColorBurn(img1, img2), strength), nil
|
||
|
case "colordodge":
|
||
|
return blend.Opacity(img1, blend.ColorDodge(img1, img2), strength), nil
|
||
|
case "darken":
|
||
|
return blend.Opacity(img1, blend.Darken(img1, img2), strength), nil
|
||
|
case "difference":
|
||
|
return blend.Opacity(img1, blend.Difference(img1, img2), strength), nil
|
||
|
case "divide":
|
||
|
return blend.Opacity(img1, blend.Divide(img1, img2), strength), nil
|
||
|
case "exclusion":
|
||
|
return blend.Opacity(img1, blend.Exclusion(img1, img2), strength), nil
|
||
|
case "lighten":
|
||
|
return blend.Opacity(img1, blend.Lighten(img1, img2), strength), nil
|
||
|
case "linearburn":
|
||
|
return blend.Opacity(img1, blend.LinearBurn(img1, img2), strength), nil
|
||
|
case "linearLight":
|
||
|
return blend.Opacity(img1, blend.LinearLight(img1, img2), strength), nil
|
||
|
case "multiply":
|
||
|
return blend.Opacity(img1, blend.Multiply(img1, img2), strength), nil
|
||
|
case "normal":
|
||
|
return blend.Opacity(img1, blend.Normal(img1, img2), strength), nil
|
||
|
case "opacity":
|
||
|
return blend.Opacity(img1, img2, strength), nil
|
||
|
case "overlay":
|
||
|
return blend.Opacity(img1, blend.Overlay(img1, img2), strength), nil
|
||
|
case "screen":
|
||
|
return blend.Opacity(img1, blend.Screen(img1, img2), strength), nil
|
||
|
case "softlight":
|
||
|
return blend.Opacity(img1, blend.SoftLight(img1, img2), strength), nil
|
||
|
case "subtract":
|
||
|
return blend.Opacity(img1, blend.Subtract(img1, img2), strength), nil
|
||
|
}
|
||
|
return blend.Opacity(img1, blend.Add(img1, img2), strength), nil
|
||
|
})
|
||
|
},
|
||
|
}
|
||
|
|
||
|
cmd.Flags().Float64VarP(&strength, "strength", "s", 1.0, "blend mode strength")
|
||
|
|
||
|
return cmd
|
||
|
}
|
||
|
|
||
|
func createBlend() *cobra.Command {
|
||
|
blendCmd := &cobra.Command{
|
||
|
Use: "blend",
|
||
|
Short: "blend two images together",
|
||
|
}
|
||
|
|
||
|
blendCmd.AddCommand(buildBlendModeCommand("add"))
|
||
|
blendCmd.AddCommand(buildBlendModeCommand("colorburn"))
|
||
|
blendCmd.AddCommand(buildBlendModeCommand("colordodge"))
|
||
|
blendCmd.AddCommand(buildBlendModeCommand("darken"))
|
||
|
blendCmd.AddCommand(buildBlendModeCommand("difference"))
|
||
|
blendCmd.AddCommand(buildBlendModeCommand("divide"))
|
||
|
blendCmd.AddCommand(buildBlendModeCommand("exclusion"))
|
||
|
blendCmd.AddCommand(buildBlendModeCommand("lighten"))
|
||
|
blendCmd.AddCommand(buildBlendModeCommand("linearburn"))
|
||
|
blendCmd.AddCommand(buildBlendModeCommand("linearLight"))
|
||
|
blendCmd.AddCommand(buildBlendModeCommand("multiply"))
|
||
|
blendCmd.AddCommand(buildBlendModeCommand("normal"))
|
||
|
blendCmd.AddCommand(buildBlendModeCommand("opacity"))
|
||
|
blendCmd.AddCommand(buildBlendModeCommand("overlay"))
|
||
|
blendCmd.AddCommand(buildBlendModeCommand("screen"))
|
||
|
blendCmd.AddCommand(buildBlendModeCommand("softlight"))
|
||
|
blendCmd.AddCommand(buildBlendModeCommand("subtract"))
|
||
|
|
||
|
return blendCmd
|
||
|
}
|