/*源目录  目标文件名  目标图片单张宽  目标图片单张高  目标图片总行数  目标图片总列数*/

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多张图片拼成大图相关推荐

  1. python多张图叠加为一张_python实现多张图片拼接成大图

    本文实例为大家分享了python实现多张图片拼接成大图的具体代码,供大家参考,具体内容如下 上次爬取了马蜂窝的游记图片,并解决了PIL模块的导入问题,现在直奔主题吧: import PIL.Image ...

  2. Matlab 蒙太奇马赛克拼图(小图拼成大图)

    文章目录 0. 介绍 1. 框架型 2. 叠加型 3. 组合图 3.1 resize 3.2 区间分类 3.2.1 灰度级映射 3.2.2 根据RGB选取合适的图像 3.2.3 灰度分类主程序 3.2 ...

  3. 使用python将多张图片拼接成大图

    实在是不知道该用什么标题,就这么简单直白吧.. 上次爬取了马蜂窝的游记图片,并解决了PIL模块的导入问题,现在直奔主题吧: import PIL.Image as Image import osIMA ...

  4. 使用python将任意张图片拼接成多张大图

    今天看到在之前的一篇博客下有位朋友留言提到了"将多张图片拼接成多张大图"的问题,这一系列的博客已经写了三篇了,这是第四篇了,后三篇全都是基于广大博友的热心提问而成型的,十分感谢各位 ...

  5. 基于python的多张不同宽高图片拼接成大图

    半年前写过一篇将多张图片拼接成大图的博客,是讲的把所有图片先转换为256×256的图片后再进行拼接,今天看到一个朋友的评论说如何拼接非正方形图片,如47×57,之前有个朋友也问过这个,我当时理解错了, ...

  6. 图片上加动图怎么弄_用PS把千张图片拼成心爱的人的样子,只需三步!

    把千张图片拼成一张图像也就是千图成像,用PS还是很简单的,虽然说我还在存够心爱的人的千张图片的路上,但是这个技巧可以先学上. 教程开始 步骤一:准备好图片,如果图片尺寸不统一,可以用PS的这个自动批量 ...

  7. html5游戏开发--动静结合(二)-用地图块拼成大地图 初探lufylegend

    一.前言 本次教程将向大家讲解如何用html5将小地图块拼成大地图,以及如何用现有的高级html5游戏开发库件lufylegend.js开发游戏. 首先让我们来了解了解如何用html5实现动画,毕竟& ...

  8. 乐高机器人 搭建钟摆_乐高创意百变31088拼搭指北:深海生物大鲨鱼,拼成3变变形金刚...

    乐高创意百变31088拼搭指北:深海生物大鲨鱼,拼成3变变形金刚 2019-06-27 07:30:00 32点赞 67收藏 11评论 又又又见面了各位值友,618期间,我入手了两套Lego 3107 ...

  9. 如何将多张图片拼成一张图?

    如何将多张图片拼成一张图?作为一名幼儿园老师,为满足家长内心需要,我们每天都会给宝贝们拍多张不同的照片然后传给家长.但是一张一张的传,不仅耗费时间而且很慢,所以我通常都是把多张照片拼接在一起,然后传给 ...

最新文章

  1. Pat乙级 1045 快速排序
  2. python正则表达式——re模块
  3. 数据库MySQL/mariadb知识点——操作篇(2)库管理语句
  4. 创建用户赋权限_MySQL实战第84篇:MySQL数据库添加用户和赋权限,在8.0版本!
  5. Linux的内存理解
  6. IOS基础之计算器的编写
  7. AduSkin - UI 追求极致,永臻完美
  8. 图注意力网络_EMNLP 2019开源论文:针对短文本分类的异质图注意力网络
  9. 入门机器学习(十二)--课后作业解析-偏差与方差(Python 实现)
  10. 文件系统操作-分区及格式化、挂载
  11. 【前端小技巧】利用border画三角形及梯形
  12. Arcgis for javascript不同的状态下自己定义鼠标样式
  13. 中铁总数据中心落户武清 项目总投资22.7亿元
  14. mysql 导出er图工具_mysql 反向生成 er图
  15. python列表常见的5种去重方法
  16. php快照劫持代码,php快照劫持跳转代码,php快照劫持源码下载
  17. 使用 Python 和 Pygame 构建小行星游戏
  18. 强烈推荐一个有趣的数据分析神器~
  19. R语言实战Topsis综合评价法
  20. 为开启VM虚拟化,关闭Win10的Hyper-V

热门文章

  1. springboot中@Configuration配置类加载流程
  2. photo-sphere-viewer 全景图Vr 720全景查看(vue篇)
  3. JPA - @Convert属性映射转换器
  4. C#开源信息抓取源码:首先介绍一下Jumony是什么?
  5. 室内监控项目之红外传感器模块
  6. nginx + tomcat 动静分离
  7. 净水市场新发展 慕辰净水推出全屋净水定制
  8. 下载cv2的方法(OpenCV)
  9. selenium破解B站极验验证码
  10. python获取数据——数据爬虫——代理池随机使用代理