GO多张图片拼成大图
/*源目录 目标文件名 目标图片单张宽 目标图片单张高 目标图片总行数 目标图片总列数*/
func MergeImage(sourceDir string,targetDir string,sourceWidth float64,sourceHight float64,targetCells float64,targetRows float64) {
//根据目标宽和高,行和列,计算新图片的高宽
targetWidth := targetCells * sourceWidth
targetHight := targetRows * sourceHight
//创建目标图
targetImage := image.NewRGBA(image.Rect(0, 0, int(targetWidth), int(targetHight)))
newImage_color := color.RGBA{0, 0, 0, 0}
draw.Draw(targetImage, targetImage.Bounds(), &image.Uniform{newImage_color}, image.ZP, draw.Src)
//图片N合一绘图
rd, err := ioutil.ReadDir(sourceDir)
if err != nil {
fmt.Println("读取图片失败:" + err.Error())
} else {
var fileIndex float64 = 1
for _, fi := range rd {
if !fi.IsDir() {
var fIn *os.File
var sourceImg image.Image
fIn, _ = os.Open(sourceDir + "/" + fi.Name())
defer fIn.Close()
//按照宽度和高度进行等比例缩放
resizePath := sourceDir + "/resize/" + fi.Name()
fOut, _ := os.Create(resizePath)
err = ResizeImage(fIn, fOut, int(sourceWidth), int(sourceHight), 100)
if err != nil {
fmt.Println("图片缩放失败:" + err.Error())
} else {
fIn, _ = os.Open(resizePath)
}
defer fOut.Close()
sourceImg, _, _ = image.Decode(fIn)
//图片的位置
currentRow := math.Ceil(fileIndex / targetCells)
currentCell := fileIndex - (currentRow-1)*targetCells
imageX := (currentCell - 1) * sourceWidth
imageY := (currentRow - 1) * sourceHight
fileIndex = fileIndex + 1
draw.Draw(targetImage, targetImage.Bounds().Add(image.Pt(int(imageX), int(imageY))), sourceImg, sourceImg.Bounds().Min, draw.Src)
}
}
outFile, err := os.Create(targetDir)
if err != nil {
fmt.Println("Create outputPath err:" + err.Error())
} else {
defer outFile.Close()
b := bufio.NewWriter(outFile)
err = png.Encode(b, targetImage)
if err != nil {
fmt.Println("png Encode err:" + err.Error())
} else {
err = b.Flush()
if err != nil {
fmt.Println("Flush err:" + err.Error())
}
}
}
}
}
func ResizeImage(in io.Reader, out io.Writer, width, height, quality int) error {
origin, fm, err := image.Decode(in)
if err != nil {
return err
}
if width == 0 || height == 0 {
width = origin.Bounds().Max.X
height = origin.Bounds().Max.Y
}
if quality == 0 {
quality = 100
}
canvas := resize.Thumbnail(uint(width), uint(height), origin, resize.Lanczos3)
switch fm {
case "jpeg":
return jpeg.Encode(out, canvas, &jpeg.Options{quality})
case "png":
return png.Encode(out, canvas)
case "gif":
return gif.Encode(out, canvas, &gif.Options{})
case "bmp":
return bmp.Encode(out, canvas)
default:
return errors.New("ERROR FORMAT")
}
return nil
}
GO多张图片拼成大图相关推荐
- python多张图叠加为一张_python实现多张图片拼接成大图
本文实例为大家分享了python实现多张图片拼接成大图的具体代码,供大家参考,具体内容如下 上次爬取了马蜂窝的游记图片,并解决了PIL模块的导入问题,现在直奔主题吧: import PIL.Image ...
- Matlab 蒙太奇马赛克拼图(小图拼成大图)
文章目录 0. 介绍 1. 框架型 2. 叠加型 3. 组合图 3.1 resize 3.2 区间分类 3.2.1 灰度级映射 3.2.2 根据RGB选取合适的图像 3.2.3 灰度分类主程序 3.2 ...
- 使用python将多张图片拼接成大图
实在是不知道该用什么标题,就这么简单直白吧.. 上次爬取了马蜂窝的游记图片,并解决了PIL模块的导入问题,现在直奔主题吧: import PIL.Image as Image import osIMA ...
- 使用python将任意张图片拼接成多张大图
今天看到在之前的一篇博客下有位朋友留言提到了"将多张图片拼接成多张大图"的问题,这一系列的博客已经写了三篇了,这是第四篇了,后三篇全都是基于广大博友的热心提问而成型的,十分感谢各位 ...
- 基于python的多张不同宽高图片拼接成大图
半年前写过一篇将多张图片拼接成大图的博客,是讲的把所有图片先转换为256×256的图片后再进行拼接,今天看到一个朋友的评论说如何拼接非正方形图片,如47×57,之前有个朋友也问过这个,我当时理解错了, ...
- 图片上加动图怎么弄_用PS把千张图片拼成心爱的人的样子,只需三步!
把千张图片拼成一张图像也就是千图成像,用PS还是很简单的,虽然说我还在存够心爱的人的千张图片的路上,但是这个技巧可以先学上. 教程开始 步骤一:准备好图片,如果图片尺寸不统一,可以用PS的这个自动批量 ...
- html5游戏开发--动静结合(二)-用地图块拼成大地图 初探lufylegend
一.前言 本次教程将向大家讲解如何用html5将小地图块拼成大地图,以及如何用现有的高级html5游戏开发库件lufylegend.js开发游戏. 首先让我们来了解了解如何用html5实现动画,毕竟& ...
- 乐高机器人 搭建钟摆_乐高创意百变31088拼搭指北:深海生物大鲨鱼,拼成3变变形金刚...
乐高创意百变31088拼搭指北:深海生物大鲨鱼,拼成3变变形金刚 2019-06-27 07:30:00 32点赞 67收藏 11评论 又又又见面了各位值友,618期间,我入手了两套Lego 3107 ...
- 如何将多张图片拼成一张图?
如何将多张图片拼成一张图?作为一名幼儿园老师,为满足家长内心需要,我们每天都会给宝贝们拍多张不同的照片然后传给家长.但是一张一张的传,不仅耗费时间而且很慢,所以我通常都是把多张照片拼接在一起,然后传给 ...
最新文章
- Pat乙级 1045 快速排序
- python正则表达式——re模块
- 数据库MySQL/mariadb知识点——操作篇(2)库管理语句
- 创建用户赋权限_MySQL实战第84篇:MySQL数据库添加用户和赋权限,在8.0版本!
- Linux的内存理解
- IOS基础之计算器的编写
- AduSkin - UI 追求极致,永臻完美
- 图注意力网络_EMNLP 2019开源论文:针对短文本分类的异质图注意力网络
- 入门机器学习(十二)--课后作业解析-偏差与方差(Python 实现)
- 文件系统操作-分区及格式化、挂载
- 【前端小技巧】利用border画三角形及梯形
- Arcgis for javascript不同的状态下自己定义鼠标样式
- 中铁总数据中心落户武清 项目总投资22.7亿元
- mysql 导出er图工具_mysql 反向生成 er图
- python列表常见的5种去重方法
- php快照劫持代码,php快照劫持跳转代码,php快照劫持源码下载
- 使用 Python 和 Pygame 构建小行星游戏
- 强烈推荐一个有趣的数据分析神器~
- R语言实战Topsis综合评价法
- 为开启VM虚拟化,关闭Win10的Hyper-V