隐藏MacBookPro2021款刘海
在壁纸的顶部添加69
像素的黑色条,来达到隐藏刘海的目的
新版MacBookPro已经出来了,到手后发现那个刘海其实还是很影响观感的,身为一个码农必然是不想每次换壁纸还要打开 ps 一张一张去处理的,所以直接百度搜寻一番使用go官方库中的image
包实现了图片合成。
或者直接下载:TopNotch
:https://topnotch.app/
推荐另一个壁纸软件:pap.er 在商店搜索即可。
为了美观,这里要求传入图片必须使Mac Book Pro
的分辨率,图片缩放剪裁,这里并没有实现,这部分操作建议使用网上的在线工具手动操作,因为人家还提供了选取等操作,挺方便的。
图片分辨率剪裁网站推荐:https://www.gaitubao.com
处理好的图像位于原图同级位置。
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)
}
}