关键是使用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扫描图片像素,复制图片的更多相关文章

  1. 复制图片链接和标题生成Markdown文本

    写Markdown的时候常常会需要复制图片链接和标题以插入图片,不借助其他工具的话,一般需要先在Markdown文件中输入插入图片的格式,然后在浏览器中复制图片链接和标题将其依次粘贴到Markdown ...

  2. java IO流复制图片

    一.使用字节流复制图片 //字节流方法 public static void copyFile()throws IOException { //1.获取目标路径 //(1)可以通过字符串 // Str ...

  3. CefBrowser 复制图片解决办法

    使用的是CefSharp控件,开放出的功能比较多,但是还是有一些封闭的.例如复制图片到Clipbord,库没有提供. VC虽然看得懂,但托管代码没搞过,看得很蛋痛,而且如果有CefSharp有新版本还 ...

  4. java 21 - 9 复制图片的4种方式

    需求:复制图片 分析: 因为图片我们用记事本打开后无法读懂,所以用字节流 并且字节流复制有4种方式,所以我们尝试4种方式. 推荐第四种:缓冲字节流一次读取一个字节数组 首先写main方法: publi ...

  5. Android 使用ContentProvider扫描手机中的图片,仿微信显示本地图片效果

    版权声明:本文为博主原创文章,未经博主允许不得转载. 转载请注明本文出自xiaanming的博客(http://blog.csdn.net/xiaanming/article/details/1873 ...

  6. java基础知识回顾之javaIO类---FileInputStream和FileOutputStream字节流复制图片

    package com.lp.ecjtu; import java.io.FileInputStream; import java.io.FileNotFoundException; import j ...

  7. gd库复制图片做水印

    将复制源图片的某个位置复制到目标图片中,不能调整大小 imagecopy(目标图片画布,复制源画布,目标画布左上角x,y,源画布左上角x,y,复制图片的宽,高); 允许调整大小 imagecopyre ...

  8. Java基础知识强化之IO流笔记44:IO流练习之 复制图片的 4 种方式案例

    1. 复制图片的 4 种方式案例: 分析: 复制数据,如果我们知道用记事本打开并能够读懂,就用字符流,否则用字节流. 通过该原理,我们知道我们应该采用字节流. 而字节流有4种方式,所以做这个题目我们有 ...

  9. 织梦cms网上复制图片不可用的解决方法

    背景描述: 织梦cms采集图片集时, 需要使用织梦cms提供的"网上复制图片"的功能, 好像我这里这个功能一直不可用, 今天下定决心研究了下源代码并进行了适当修改, 将我的修改提供 ...

随机推荐

  1. Eclipse 离线安装ADT

    由于小猪的Eclipse中ADT版本过低无法打开Android项目了,所以要更新ADT(Android Develop Tools),但是在国内由于谷歌与本国微妙的关系想自动安装总是卡在某个点上. 所 ...

  2. mysql数据库使用

    C#操作Mysql数据库的存储过程,网址 DATEDIFF() 函数返回两个日期之间的天数. 语法 DATEDIFF(date1,date2) date1 和 date2 参数是合法的日期或日期/时间 ...

  3. Pythonn 内置函数

    abs 绝对值 n = abs(-1) print(n) ========================= /usr/bin/python3.5 /home/liangml/pythonscript ...

  4. 写入标题使用依赖注入Title的setTitle方法

    1. 声明 Generator的声明方式类似一般的函数声明,只是多了个*号,并且一般可以在函数内看到yield关键字 function* showWords() { yield 'one'; yiel ...

  5. one recursive approach for 3, hdu 1016 (with an improved version) , permutations, N-Queens puzzle 分类: hdoj 2015-07-19 16:49 86人阅读 评论(0) 收藏

    one recursive approach to solve hdu 1016, list all permutations, solve N-Queens puzzle. reference: t ...

  6. solaris tar 命令exclude使用

    压缩时需要排除指定目录,不知道什么原因在solaris中 tar cvf a.tar a --exclude=a/b/log --exclude = a/c/mm7log不生效, 最后使用了如下方法 ...

  7. php序列化和反序列化

    一 使用系统函数serialize和unserilazie <?php class A { public $a = "aa"; public $b = 10; functio ...

  8. 例子:Database - Linq to sql

    DataContext类型(数据上下文)是System.Data.Linq命名空间下的重要类型,用于把查询句法翻译成SQL语句,以及把数据从数据库返回给调用方和把实体的修改写入数据库. DataCon ...

  9. ubuntu 16.04 搭建无线共享热点(PC 无线直连Android移动终端 调试,监控屏幕)

    由于android终端usb接口比较松,公司的无线网络使用人过多比较慢,所以想使用PC端无线直连 调试Android终端 配置无线共享 1 网卡要支持 2 安装 plasma-nm sudo apt- ...

  10. freeCAD预选项编辑器

    freeCAD的预选项系统在 Edit 目录 -> Preferences. freecad的功能分成不同的模块,每一模块负责一个特定的工作台工作.freecad还使用了一个概念叫晚加载,这意味 ...