关键是使用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. EF6 CodeFirst+Repository+Ninject+MVC4+EasyUI实践(一)

    前言 本系列源自对EF6 CodeFirst的探索,但后来发现在自己项目中构建的时候遇到了一些问题以及一些解决方法,因此想作为一个系列写下来. 本系列并不是教你怎么做架构设计,但可以参照一下里面的方法 ...

  2. 记一次联想A820t救砖线刷

    因为是看着教程刷的(有大神放出教程,只管伸手拿来就好啦)但是照着教程做的过程中出现了一些问题还是值得注意的,在这里总结一下,给新手提供一点建议 教程比较长,我放到博客的文件中,需要的自己下载一下.或者 ...

  3. jquery_datatables

    环境准备 1.dataTables 下载:http://download.csdn.net/detail/marskuroky/8173839 2.jsonObject 下载:http://downl ...

  4. sqlserver行列转换问题(网上搜集)

    (列->行) 一.FOR XML PATH 简单介绍              那么还是首先来介绍一下FOR XML PATH ,假设现在有一张兴趣爱好表(hobby)用来存放兴趣爱好,表结构如 ...

  5. linux学习 命令ll后字段的解释(转)

    原文链接:http://jz20080153.blog.sohu.com/161554070.html ls -l 列表信息详解 我们平时用ls -l 命令查看一个目录下的文件和子目录的详悉信息时,会 ...

  6. iOS网络推送消息

    在iOS项目的appdelegate.m文件中: - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOpti ...

  7. MySQL主主复制

    MySQL5. 主主复制 环境如下: CentOS6.4_64 MySQL5. master1:192.168.10.11 master2:192.168.10.12 1.1 配置 master1 a ...

  8. pdsh使用

    原文地址:http://bbs.chinaunix.net/thread-2002080-1-1.html 当我们管理数以十计或者更多的集群系统时,往往需要在每台机器上执行同样的命令,或者拷贝同样的文 ...

  9. BOOL和bool的区别

    一. 1.类型不同 BOOL为int型 bool为布尔型 2.长度不同 bool只有一个字节 BOOL长度视实际环境来定,一般可认为是4个字节 3.取值不同 bool取值false和true,是0和1 ...

  10. 使用Volley执行网络数据传输

    首先需要实例化一个RequestQueue RequestQueue queue = Volley.newRequestQueue(this); 然后是根据提供的URL请求字符串响应 String u ...