用GO扫描图片像素,复制图片
关键是使用image、image/png、image/color包
// main.go
package main import (
"fmt" "bufio"
"image" "image/png" "image/color"
"io/ioutil"
"log"
"os"
) var picWidth, picHeight int
var rgbaDataList [][]color.Color func main() {
readPncPic()
} func readPncPic() { //读取本地文件
f, err := os.Open("/Users/jiading/Documents/whiteblack.png")
if err != nil {
log.Fatal(err)
}
defer f.Close()
g, _, err := image.Decode(bufio.NewReader(f))
if err != nil {
log.Fatal(err)
return
} rect := g.Bounds()
size := rect.Size() picWidth = size.X
picHeight = size.Y fmt.Printf("图片宽度: %d __ 图片高度: %d\n", picWidth, picHeight) rgbaDataList = [][]color.Color{} for y := 0; y < picHeight; y++ { rgbaDataSingleList := []color.Color{}
for x := 0; x < picWidth; x++ {
pixelItem := g.At(x, y)
r0, _, _, _ := pixelItem.RGBA()
if r0 == 0x0000 {
//white 0
} else if r0 == 0xffff { //black 1
}
rgbaDataSingleList = append(rgbaDataSingleList, pixelItem)
}
rgbaDataList = append(rgbaDataList, rgbaDataSingleList)
} // writeLocalFile(pixelData, txtName) writePngFile()
} func writePngFile() { //创建新图片
f, err := os.Create("/Users/jiading/Documents/copypic.png")
if err != nil {
fmt.Println(err)
os.Exit(1)
} m := image.NewNRGBA(image.Rectangle{Min: image.Point{0, 0}, Max: image.Point{picWidth, picHeight}})
for y := 0; y < picHeight; y++ {
list1 := rgbaDataList[y] for x := 0; x < picWidth; x++ {
r0, g0, b0, a0 := list1[x].RGBA()
m.SetNRGBA(x, y, color.NRGBA{uint8(r0), uint8(g0), uint8(b0), uint8(a0)}) }
}
if err = png.Encode(f, m); err != nil {
fmt.Println(err)
os.Exit(1)
} } func writeLocalFile(val string, filePath string) bool { var content = []byte(val)
err := ioutil.WriteFile(filePath, content, 0644)
if err != nil {
fmt.Printf("%s\n", err)
panic(err)
return false
} fmt.Println("==写文件成功: " + filePath + "==")
return true }
====================================================================================================================
2017_7_16,在win10上测试读取png图片信息时返回错误unkown format类似语句,是因为用到了image.Decode(),改成png.Decode()即可在win10上跑起来。
用GO扫描图片像素,复制图片的更多相关文章
- 复制图片链接和标题生成Markdown文本
写Markdown的时候常常会需要复制图片链接和标题以插入图片,不借助其他工具的话,一般需要先在Markdown文件中输入插入图片的格式,然后在浏览器中复制图片链接和标题将其依次粘贴到Markdown ...
- java IO流复制图片
一.使用字节流复制图片 //字节流方法 public static void copyFile()throws IOException { //1.获取目标路径 //(1)可以通过字符串 // Str ...
- CefBrowser 复制图片解决办法
使用的是CefSharp控件,开放出的功能比较多,但是还是有一些封闭的.例如复制图片到Clipbord,库没有提供. VC虽然看得懂,但托管代码没搞过,看得很蛋痛,而且如果有CefSharp有新版本还 ...
- java 21 - 9 复制图片的4种方式
需求:复制图片 分析: 因为图片我们用记事本打开后无法读懂,所以用字节流 并且字节流复制有4种方式,所以我们尝试4种方式. 推荐第四种:缓冲字节流一次读取一个字节数组 首先写main方法: publi ...
- Android 使用ContentProvider扫描手机中的图片,仿微信显示本地图片效果
版权声明:本文为博主原创文章,未经博主允许不得转载. 转载请注明本文出自xiaanming的博客(http://blog.csdn.net/xiaanming/article/details/1873 ...
- java基础知识回顾之javaIO类---FileInputStream和FileOutputStream字节流复制图片
package com.lp.ecjtu; import java.io.FileInputStream; import java.io.FileNotFoundException; import j ...
- gd库复制图片做水印
将复制源图片的某个位置复制到目标图片中,不能调整大小 imagecopy(目标图片画布,复制源画布,目标画布左上角x,y,源画布左上角x,y,复制图片的宽,高); 允许调整大小 imagecopyre ...
- Java基础知识强化之IO流笔记44:IO流练习之 复制图片的 4 种方式案例
1. 复制图片的 4 种方式案例: 分析: 复制数据,如果我们知道用记事本打开并能够读懂,就用字符流,否则用字节流. 通过该原理,我们知道我们应该采用字节流. 而字节流有4种方式,所以做这个题目我们有 ...
- 织梦cms网上复制图片不可用的解决方法
背景描述: 织梦cms采集图片集时, 需要使用织梦cms提供的"网上复制图片"的功能, 好像我这里这个功能一直不可用, 今天下定决心研究了下源代码并进行了适当修改, 将我的修改提供 ...
随机推荐
- asp.net网站运行出错:the underlying provider failed on open的解决
在登录系统,通过linq查询时发生错误,the underlying provider failed on open,如何解决,请看: Step 1:Open Internet Information ...
- mysql与sqlserver之间的关系转换
sqlserver中的数据类型与mysql之间的对应 --sqlserver = 只复制表结构 = 复制表结构和表数据 --mysql create table xx like xx; 只复制表结构 ...
- Jquery挂事件与移除事件
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- js中,全局变量与直接添加在window属性的区别
在js中定义的全局变量是挂在window下的,而window的属性也一样,那么这两者有什么区别呢? 其实这两者还是有小小的区别的,全局变量是不能通过delete操作符删除的,而直接定义在window上 ...
- linux环境下安装jdk
1.查看系统自带的jdk #RPM -qa|grep jdk 若存在则删除 jdk-1.7.0_67-fcs.x86_64 #rpm -e --nodeps jdk-1.7.0_67-fcs.x86_ ...
- 黑马程序员——C语言基础 枚举 宏定义 自定义 static exterm
Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) (一)枚举 1)枚举类型的定义 枚举是C语言中的一种基本数据类型,并不是构 ...
- TPS40305 ——开关电源芯片20160901
TPS4030X芯片共有3款,区别在于开关频率不同. 学习笔记: 1.当开关频率越高,所使用的电感的容量越小,电路越稳定. 2.对于mos管源极的地,尽量和mos管漏极的电源输入的地接近,并且与最终的 ...
- VS 工程的 输出路径和工作路径的区别
输出路径,是vs编译项目生成可执行文件的路径:工作路径是环境变量,比如我们在程序中写相对路径,就是以这个路径为基础的.在默认情况下,输出路径和工作路径都不写的话,默认是程序的bin下面的debug或者 ...
- 作业七:团队项目——Alpha版本冲刺阶段009
今日安排:组内成员讨论 今日进度:组内成员讨论分工细节以及可能遇到的问题,并提出解决方案
- The guard was taken to hospital in a critical condition.
The Prince George's County Fire Department said the guard was taken to hospital in a critical condit ...