go-img-split-merge
是什么
golang版本的图片切分与合并工具。
有啥用
- 将某个目录下同一种格式(同为jpg,或者同为png)的图片,按照序号,在垂直(v)或者水平(h)方向,进行合并,拼接为一张图片;
- 将一张给定路径的图片,在垂直(v)或者水平(h)方向上,按照给定的切分数量,切分为小图;
- 将一张给定路径的图片,切分为九宫格;
- 图片的合并和切分,支持在jpg,png之间格式互转;
咋用
下面是个例子:
package main
import (
"log"
imgsm "gitee.com/sftec/go-img-split-merge"
"os"
"path/filepath"
)
func main() {
/*
测试类型:
merge
split
split2
all
*/
testType := "merge"
var err error
cwd, _ := os.Getwd()
if testType == "merge" || testType == "all" {
//给定目录下,以序号为文件名的文件,将会被合并为一张
baseDir := filepath.Join(cwd, "imgs-for-merge/")
min := 1 //从给定目录下的名字为1.jpg或者1.png的图片开始
max := 8 //合并到给定目录下名字为8.jpg或者8.png的图片;
srcImgType := "jpg" //要被合并的图片的类型
targetImgType := "png" // 合并后的目标图片的类型
//给定目录下,以序号为文件名的文件,将会被合并为一张
//合并方向: v或者V是垂直方向合并;h或H是水平方向合并;
direction := "v"
err = imgsm.Merge(baseDir, srcImgType, targetImgType, direction, min, max)
if err != nil {
log.Println("===Merge Error===")
log.Fatalln(err.Error())
}
log.Println("===Merge Done!===")
}
/*
原图2.64M;
切分为8份;
jpg格式,90%的质量,压缩到了666KB;
png格式,CompressionLevel: png.BestCompression,变大到了6.31MB.
结论: 最好采用jpg格式。
*/
if testType == "split" || testType == "all" {
targetDir := filepath.Join(cwd, "img-for-split/") //切分后的图片,存放在哪个目录
srcImgType := "jpg"//要被切分的图片的类型
srcImgPath := filepath.Join(targetDir, "src"+"."+srcImgType)//要被切分的图片的路径
direction := "v" //切分方向: v或者V是垂直方向切分;h或H是水平方向切分;
splitCount := 8 //将图片切分多少份
targetImgType := "jpg"//切分后的图片的类型
err = imgsm.Split(targetDir, srcImgPath, direction, splitCount, srcImgType, targetImgType)
if err != nil {
log.Fatalln(err.Error())
}
log.Println("===Split Done!===")
}
if testType == "split2" || testType == "all" {
//垂直,水平方向切分,不能满足需求,还应该来一个九宫格切分;
srcImgType := "png" //要被切分的图片的格式
targetImgType := "jpg" //切分后的图片的格式
targetDir := filepath.Join(cwd, "img-for-split-2/") //切分后的图片在哪个目录/路径下
srcImgPath := filepath.Join(targetDir, "src"+"."+srcImgType)
//把给定图片,切分为九宫格
err := imgsm.SplitTo9(srcImgPath, srcImgType, targetImgType, targetDir)
if err != nil {
log.Fatalln(err.Error())
}
log.Println("===SplitTo9 Done!===")
}
}
/*
go run main.go
*/