Golang 等比例调整图片分辨率且用黑色补齐多余部分
描述
随意上传一张图片,将图片的分辨率等比率压缩至 108*108 的格式,若图片不是正方形,则多余部分使用黑色填充。
大体思路
- 首先将图片进行解码。
- 将图片分辨率等比例压缩至 108*108 。
- 创建一个黑色的 108*108 的图片,在黑色图片上把压缩过的图片画在正中间。
- 最后再创建新的图片/编码。
完整代码
package mainimport ("bufio""bytes""fmt""github.com/nfnt/resize""image""image/draw""image/jpeg""image/png""io/ioutil""log""net/http""os""strings"
)func main() {file, err := os.Open("/Users/guowenfeng/Desktop/test2.jpeg")if err != nil {log.Fatal(err)}// 因为有人为修改后缀的可能性,所以这里去探查一下图片的真正格式,然后根据格式来确定使用 png 还是 jpeg 进行解码。buffer, err := ioutil.ReadAll(bufio.NewReader(file))contentType := http.DetectContentType(buffer)var img image.Imageif contentType == "png" {img, err = png.Decode(bytes.NewReader(buffer))} else {img, err = jpeg.Decode(bytes.NewReader(buffer))}if err != nil {fmt.Println("decode err")log.Fatal(err)}file.Close()width := img.Bounds().Dx()height := img.Bounds().Dy()widthNew := 108heightNew := 108// 将图片等比例压缩至 108*108 的格式。var m image.Imageif width/height >= widthNew/heightNew {m = resize.Resize(uint(widthNew), uint(height)*uint(widthNew)/uint(width), img, resize.Lanczos3)} else {m = resize.Resize(uint(width*heightNew/height), uint(heightNew), img, resize.Lanczos3)}// 在黑色图片上画上压缩后的图片newImag := image.NewNRGBA(image.Rect(0, 0, 108, 108))if m.Bounds().Dx() > m.Bounds().Dy() {draw.Draw(newImag, image.Rectangle{Min: image.Point{Y: (108 - m.Bounds().Dy()) / 2},Max: image.Point{108, 108},}, m, m.Bounds().Min, draw.Src)} else {draw.Draw(newImag, image.Rectangle{Min: image.Point{X: (108 - m.Bounds().Dx()) / 2},Max: image.Point{108, 108},}, m, m.Bounds().Min, draw.Src)}out, err := os.Create("/Users/guowenfeng/Desktop/test_resized.jpeg")if err != nil {log.Println("create err " + err.Error())log.Fatal(err)}defer out.Close()//write new image to fileerr = jpeg.Encode(out, newImag, nil)//err = png.Encode(out, newImag) // png encode 会把黑边去掉,不能用if err != nil {log.Fatal(err)}
}
Golang 等比例调整图片分辨率且用黑色补齐多余部分相关推荐
- 计算机一级照片像素调整多少钱,怎么调整图片分辨率
大家好,我是时间财富网智能客服时间君,上述问题将由我为大家进行解答. 以widow 7电脑为例,电脑调整图片分辨率步骤如下: 1.首先点击电脑主界面左下角开始菜单,找到画图功能进行点击. 2.进入画图 ...
- 如何等比例调整图片大小?
如何等比例调整图片大小?将图片尺寸大小调整成我们需要的,是图片使用过程中最常见的,等比例调整图片尺寸大小可以防止图片变形,图片变形会使得图片无法使用,所以非常的重要.为了帮助大家提高工作效率,今天小编 ...
- 电脑怎么调整图片分辨率?如何让图片清晰度变高?
在我们上传证件照片的时候,通常都会有图片分辨率要求来保证图片的清晰度,那么如何将图片提高分辨率呢?小编来告诉大家一个改图片分辨率(https://www.yasuotu.com/dpi)的方法,使用专 ...
- 怎么把图片的分辨率调高?如何调整图片分辨率?
在日常工作生活中每天都会接触到很多图片,大家在上传使用图片的时候有没有遇到过需要将图片分辨率调高的情况呢?那么图片的分辨率应该怎么调整的?别急,接下来小编给大家推荐一款图像分辨率修改(https:// ...
- c# 调整图片分辨率
描述:项目上有个需求是每隔一段时间从redis拿图片(图片格式为base64) 拿到之后将图片发送给led屏,这里尝试了下,图片拿取没啥问题,发送给led屏也没问题,但就是图片没显示出来,后面查找后发 ...
- 怎么调整图片分辨率?如何修改图片分辨率dpi?
有很多小伙伴想要对自己的照片dpi进行修改,但是电脑中没有ps,而且ps使用起来也比较难上手,所以很多小伙伴都想要知道有没有其他改图片分辨率的方法.这里推荐一款在线修改图片分辨率工具,不用下载安装任何 ...
- 如何调整图片分辨率dpi?修改图片分辨率的方法
小伙伴应该都注意到了,很多网站在平时提交证件照信息时,都对图片分辨率有要求,那么怎么去改图片分辨率(https://www.yasuotu.com/dpi)呢?本文介绍一款修改图片分辨率工具,可以打开 ...
- python练手小程序—调整图片分辨率(大小)
在GitHub上发现一些很有意思的项目,由于本人作为Python的初学者,编程代码能力相对薄弱,为了加强Python的学习,特此利用前辈们的学习知识成果,自己去亲自实现. 一周没有更新了,主要还是自己 ...
- 用python按比例调整图片尺寸
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.按比例对图片进行缩放 使用PIL对图片进行处理 总结 前言 提示:这里可以添加本文要记录的大概内容: 最近对PIL ...
最新文章
- 20135234mqy 实验四
- 软件开发人员该如何深入理解自己的代码
- 在lips追加拣配数量
- docker 进入容器 开启一个新的bash窗口
- 最新、最前沿AI论文哪里找?
- flink离线mysql_Flink 流模式跑离线任务
- JSONObject和JSONArray使用
- nginx 启动失败
- 【Win 10 应用开发】手写识别
- 14. Thinking carefullly about copying behavior in resource-managing classes
- linux u盘启动制作教程,cdlinux u盘启动制作教程
- 听说 Python 生成二维码很简单,说的好像我Java 很复杂一样。
- 西门子S7-200主机PLC可编程控制器原理及应用
- Python 爬虫---百度首页
- msgbox php,HTML_MsgBox函数语言参考,描述 在对话框中显示消息 - phpStudy
- hdu5442 后缀数组
- utf-8的英文字母和中文汉字是一个字符占几个字节
- 转载 PVE 防火墙
- 深度linux任务栏在哪,更新Deepin 20后任务栏dde-dock消失不见的暂时解决
- mac系统下载nvm管理node版本
热门文章
- java灌水bfs二叉树,二叉树的BFS搜索
- 计算机科学与技术考研双非,985弱势“好考”专业与双非王牌专业大汇总!考研报考必备!...
- 你应该知道的三相电机知识
- 天嵌i.mx6q--1
- dout java_java之 ------ 文件的输入、输出(一)
- mysql经典问题之group by和max函数
- 群晖增量同步Linux文件夹,用自定义脚本实现群晖NAS中本地文件夹之间的增量同步复制...
- Linux进程间通信编程
- 石油石化生产企业该如何防止电网晃电发生和发生晃电时保证敏感负荷的设备正常运行
- 25G SFP28 SR多模和LR单模光模块的介绍及区别