用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提供的"网上复制图片"的功能, 好像我这里这个功能一直不可用, 今天下定决心研究了下源代码并进行了适当修改, 将我的修改提供 ...
随机推荐
- 多项目开发下的dll文件管理
阅读目录: DS01:为什么要对生成的dll文件进行管理? DS02:首先介绍以下两个DOS命令 DS03:第一种实现方法(xcopy) DS04:第二种实现方法(attrib) DS05:分享一个有 ...
- javasript_数据结构和算法_栈
//-----------------------------------存储结构为数组-------------------------------------------- function St ...
- JavaScript 字符串常用操作
JavaScript 字符串用于存储和处理文本.因此在编写 JS 代码之时她总如影随形,在你处理用户的输入数据的时候,在读取或设置 DOM 对象的属性时,在操作 Cookie 时,在转换各种不同 Da ...
- mybatis3.2.3+spring3 控制台打印sql解决办法
学习mybatis的时候遇到打印不出sql 的问题,在这里做个总结: 1:首先log4j.properties这样配置: log4j.rootLogger=DEBUG,console,R log4j. ...
- 获取数据库表详细信息、存储过程、视图、的sql
select s.[name] + '.' + t.[name] as tablename from sys.tables as t,sys.schemas as s where t.schema_i ...
- 场景9 深入RAC运行原理
场景9 深入RAC运行原理 OPS(Oracle Parallel Server)通过磁盘的节点判定数据是否最新 —> Data Guard —> RAC(Real Ap ...
- Linux Shell脚本编程--Head/Tail命令详解
head 与 tail 就像它的名字一样的浅显易懂,它是用来显示开头或结尾某个数量的文字区块,head 用来显示档案的开头至标准输出中,而 tail 想当然尔就是看档案的结尾,看看下面的范例:## ( ...
- S5PV210之GPIO模拟I2c时序之pcf8591与at24xx linux3.0.8驱动
目录:一. 说明 二. 驱动程序说明及问题 三. 案例一 四. 案例二 一. 说明 mini210开发板上带了at24c08, 看了linux内核自带的at24.c的驱动程序,编译下载到看 ...
- ubuntu 13.04 telnet 详细配置
1. sudo vi /etc/xinetd.d/telnet并加入以下内容:# default: on# description: The telnet server serves telnet s ...
- 自顶而下设计FPGA
对IC设计而言,FPGA设计层级大致包括:系统级和行为级,RTL级,门级和晶体管级.然而更普遍的情况,FPGA只是用作实时数据采集控制.某些快速处理算法.PCIe\DDR3等高速数据通道,甚至某些简单 ...