隐藏MacBookPro2021款刘海

在壁纸的顶部添加69像素的黑色条,来达到隐藏刘海的目的

新版MacBookPro已经出来了,到手后发现那个刘海其实还是很影响观感的,身为一个码农必然是不想每次换壁纸还要打开 ps 一张一张去处理的,所以直接百度搜寻一番使用go官方库中的image包实现了图片合成。

或者直接下载:TopNotchhttps://topnotch.app/

推荐另一个壁纸软件:pap.er 在商店搜索即可。

为了美观,这里要求传入图片必须使Mac Book Pro的分辨率,图片缩放剪裁,这里并没有实现,这部分操作建议使用网上的在线工具手动操作,因为人家还提供了选取等操作,挺方便的。

图片分辨率剪裁网站推荐:https://www.gaitubao.com

处理好的图像位于原图同级位置。

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
}

// loadImage 加载图片文件
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
}

// WallpaperAddTopBar 合成图片
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
}

// 14: 3024 x 1964
// 16: 3456 × 2234
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))
// 创建合适宽度的bar
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)
}
}