1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112
| package main
import ( "bytes" "errors" "image" "image/color" "image/draw" "image/jpeg" "image/png" "io/ioutil" "os" "path/filepath" "strings" )
func createBlackBar(width, height int) image.Image { img := image.NewRGBA(image.Rect(0, 0, width, height)) for x := 0; x < img.Bounds().Dx(); x++ { for y := 0; y < img.Bounds().Dy(); y++ { img.Set(x, y, color.Black) } } return img }
func loadImage(fileData []byte) (image.Image, error) { fileReader := bytes.NewReader(fileData)
img, _, err := image.Decode(fileReader) if err != nil { if err.Error() == "image: unknown format" { img, err = png.Decode(fileReader) if err != nil { return nil, err } return img, nil } return nil, err } return img, nil }
func WallpaperAddTopBar(filePath string) error {
dirPath, fileName := filepath.Split(filePath)
file, err := os.Open(filePath) if err != nil { return err } fileData, err := ioutil.ReadAll(file) if err != nil { return err } _ = file.Close()
srcImage, err := loadImage(fileData) if err != nil { return err }
srcWidth := srcImage.Bounds().Dx() srcHeight := srcImage.Bounds().Dy()
if srcWidth == 3024 || srcWidth == 3456 { if srcHeight == 1964 || srcHeight == 2234 { resImg := image.NewRGBA(image.Rect(0, 0, srcWidth, srcHeight)) blackBarImage := createBlackBar(srcWidth, 69) draw.Draw(resImg, resImg.Bounds(), srcImage, image.Pt(0, 0), draw.Over) draw.Draw(resImg, resImg.Bounds(), blackBarImage, image.Pt(0, 0), draw.Over)
newFileName := strings.Split(fileName, ".")[0] + "_bar.jpg" newFilePath := filepath.Join(dirPath, newFileName)
file, err := os.OpenFile(newFilePath, os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0666) if err != nil { return err }
err = jpeg.Encode(file, resImg, &jpeg.Options{Quality: 100}) if err != nil { return err }
err = file.Close() if err != nil { return err }
return nil } } return errors.New("图片大小不合适,14:3024x1964 16:3456×2234") }
func main() { err := WallpaperAddTopBar("/Users/2f314fb/Downloads/wallhaven-vqow68_3456x2234.png") if err != nil { panic(err) } }
|