Golang官方图片库
Golang 的图片出来通过提供操作每一个像素点设置颜色(http://www.cnblogs.com/ghj1976/p/3441536.html) 和 提供通过可选蒙版图片重叠操作 (http://www.cnblogs.com/ghj1976/p/3443638.html) 这两种基础方式,这样任何想要的效果都可以自己实现, 但是旋转、缩放等相关的图像算法也是比较麻烦的,这时候我们就需要借助官方提供的图片包处理了,图片包在:https://code.google.com/p/graphics-go
获取方法: go get code.google.com/p/graphics-go/graphics
它支持的几个效果举例:
图片旋转
效果:一个旋转前,一个旋转后

代码例子:
1: package main
2:
3: import (
4: "code.google.com/p/graphics-go/graphics"
5: "fmt"
6: "image"
7: "image/png"
8: "log"
9: "os"
10: )
11:
12: func main() {
13: src, err := LoadImage("348.png")
14: if err != nil {
15: log.Fatal(err)
16: }
17:
18: dst := image.NewRGBA(image.Rect(0, 0, 350, 400))
19:
20: err = graphics.Rotate(dst, src, &graphics.RotateOptions{3.5})
21: if err != nil {
22: log.Fatal(err)
23: }
24:
25: // 需要保存的文件
26: imgcounter := 123
27: saveImage(fmt.Sprintf("%03d.png", imgcounter), dst)
28: }
29:
30: // LoadImage decodes an image from a file.
31: func LoadImage(path string) (img image.Image, err error) {
32: file, err := os.Open(path)
33: if err != nil {
34: return
35: }
36: defer file.Close()
37: img, _, err = image.Decode(file)
38: return
39: }
40:
41: // 保存Png图片
42: func saveImage(path string, img image.Image) (err error) {
43: // 需要保存的文件
44: imgfile, err := os.Create(path)
45: defer imgfile.Close()
46:
47: // 以PNG格式保存文件
48: err = png.Encode(imgfile, img)
49: if err != nil {
50: log.Fatal(err)
51: }
52: return
53: }
代码说明:
旋转的参数是顺时针旋转的弧度,弧度相关的介绍如下:
http://youthpasses.blog.51cto.com/2909834/799353
每个角度对应的弧度可以看下面图。

代码参考:http://stackoverflow.com/questions/12430874/image-manipulation-in-golang
图片模糊处理
效果:
下面一个是清晰版本,一个是模糊出来后的版本。

仔细对比细节是可以看到模糊效果的。
代码:
1: package main
2:
3: import (
4: "code.google.com/p/graphics-go/graphics"
5: "fmt"
6: "image"
7: "image/png"
8: "log"
9: "os"
10: )
11:
12: func main() {
13: src, err := LoadImage("348.png")
14: if err != nil {
15: log.Fatal(err)
16: }
17:
18: dst := image.NewRGBA(image.Rect(0, 0, 350, 400))
19:
20: err = graphics.Blur(dst, src, &graphics.BlurOptions{StdDev: 1.1})
21: if err != nil {
22: log.Fatal(err)
23: }
24:
25: // 需要保存的文件
26: imgcounter := 510
27: saveImage(fmt.Sprintf("%03d.png", imgcounter), dst)
28: }
29:
30: // LoadImage decodes an image from a file.
31: func LoadImage(path string) (img image.Image, err error) {
32: file, err := os.Open(path)
33: if err != nil {
34: return
35: }
36: defer file.Close()
37: img, _, err = image.Decode(file)
38: return
39: }
40:
41: // 保存Png图片
42: func saveImage(path string, img image.Image) (err error) {
43: // 需要保存的文件
44: imgfile, err := os.Create(path)
45: defer imgfile.Close()
46:
47: // 以PNG格式保存文件
48: err = png.Encode(imgfile, img)
49: if err != nil {
50: log.Fatal(err)
51: }
52: return
53: }
代码说明:
模糊参数:
1: // BlurOptions are the blurring parameters.
2: // StdDev is the standard deviation of the normal, higher is blurrier.
3: // StdDev 是正常的标准偏差, 值越大越虚化
4: // Size is the size of the kernel. If zero, it is set to Ceil(6 * StdDev).
5: //
6: type BlurOptions struct {
7: StdDev float64
8: Size int
9: }
缩略图
原始图:

确保数据完整的缩放,效果如下:

相关代码:
1: package main
2:
3: import (
4: "code.google.com/p/graphics-go/graphics"
5: "fmt"
6: "image"
7: "image/png"
8: "log"
9: "os"
10: )
11:
12: func main() {
13: src, err := LoadImage("348.png")
14: if err != nil {
15: log.Fatal(err)
16: }
17:
18: // 缩略图的大小
19: dst := image.NewRGBA(image.Rect(0, 0, 20, 80))
20:
21: // 产生缩略图,等比例缩放
22: err = graphics.Scale(dst, src)
23: if err != nil {
24: log.Fatal(err)
25: }
26:
27: // 需要保存的文件
28: imgcounter := 734
29: saveImage(fmt.Sprintf("%03d.png", imgcounter), dst)
30: }
31:
32: // LoadImage decodes an image from a file.
33: func LoadImage(path string) (img image.Image, err error) {
34: file, err := os.Open(path)
35: if err != nil {
36: return
37: }
38: defer file.Close()
39: img, _, err = image.Decode(file)
40: return
41: }
42:
43: // 保存Png图片
44: func saveImage(path string, img image.Image) (err error) {
45: // 需要保存的文件
46: imgfile, err := os.Create(path)
47: defer imgfile.Close()
48:
49: // 以PNG格式保存文件
50: err = png.Encode(imgfile, img)
51: if err != nil {
52: log.Fatal(err)
53: }
54: return
55: }
图片数据可以丢弃的缩放效果:

相关代码:
1: package main
2:
3: import (
4: "code.google.com/p/graphics-go/graphics"
5: "fmt"
6: "image"
7: "image/png"
8: "log"
9: "os"
10: )
11:
12: func main() {
13: src, err := LoadImage("348.png")
14: if err != nil {
15: log.Fatal(err)
16: }
17:
18: // 缩略图的大小
19: dst := image.NewRGBA(image.Rect(0, 0, 20, 80))
20:
21: // 产生缩略图
22: err = graphics.Thumbnail(dst, src)
23: if err != nil {
24: log.Fatal(err)
25: }
26:
27: // 需要保存的文件
28: imgcounter := 670
29: saveImage(fmt.Sprintf("%03d.png", imgcounter), dst)
30: }
31:
32: // LoadImage decodes an image from a file.
33: func LoadImage(path string) (img image.Image, err error) {
34: file, err := os.Open(path)
35: if err != nil {
36: return
37: }
38: defer file.Close()
39: img, _, err = image.Decode(file)
40: return
41: }
42:
43: // 保存Png图片
44: func saveImage(path string, img image.Image) (err error) {
45: // 需要保存的文件
46: imgfile, err := os.Create(path)
47: defer imgfile.Close()
48:
49: // 以PNG格式保存文件
50: err = png.Encode(imgfile, img)
51: if err != nil {
52: log.Fatal(err)
53: }
54: return
55: }
更多相关资料请看下面地址:
Golang官方图片库的更多相关文章
- Golang官方log包详解
Golang官方log包详解 以下全是代码, 详解在注释中, 请从头到尾看 // Copyright 2009 The Go Authors. All rights reserved. // Use ...
- golang官方实现如何对httpserver做频率限制(最大连接数限制)
一般海量处理服务,都会对服务做个最大连接数限制,超过该限制之后,拒绝服务,避免发生雪崩,压坏服务. 使用golang来编写httpserver时,如何进行呢?官方已经有实现好的包. 使用示例: imp ...
- 【GoLang】GoLang 官方 对 error 处理的意见
The Go Blog Errors are values 12 January 2015 A common point of discussion among Go programmers, esp ...
- golang官方嵌入文件到可执行程序
目录 前言 示例程序 嵌入文件直接访问 嵌入文件列表 总结 前言 在go官方出嵌入文件的方法前我在网上找过,并且自己还研究过,虽然没有问题,但是既然官方支持还是用起来吧. 看了下go源码embed/e ...
- 【GoLang】GoLang 错误处理 -- 官方推荐方式 示例
最严谨的方式,Always检查error,并做相应的处理 项目结构: 代码: common.go: package common import ( "github.com/pkg/error ...
- 【GoLang】转载:我为什么放弃Go语言,哈哈
我为什么放弃Go语言 作者:庄晓立(Liigo) 日期:2014年3月 原创链接:http://blog.csdn.NET/liigo/article/details/23699459 转载请注明出处 ...
- Golang 绘图基础 -绘制简单图形
前一节讲的是 绘图到不同输出源,请看地址: http://www.cnblogs.com/ghj1976/p/3440856.html 上一节的例子效果是通过设置每一个点的的RGBA属性来实现的,这是 ...
- golang(5):编写WebSocket服务,client和html5调用
本文的原文连接是: http://blog.csdn.net/freewebsys/article/details/46882777 转载请必须注明出处! 1.关于websocket HTML5定义了 ...
- 组织Golang代码
本月初golang官方blog(需要自己搭梯子)上发布了一篇文章,简要介绍了近几个月Go在一 些技术会议上(比如Google I/O.Gopher SummerFest等)的主题分享并伴有slide链 ...
随机推荐
- JMS基本概念
原文:http://blog.csdn.net/jiuqiyuliang/article/details/46701559 The Java Message Service (JMS) API is ...
- 【查找结构5】多路查找树/B~树/B+树
在前面专题中讲的BST.AVL.RBT都是典型的二叉查找树结构,其查找的时间复杂度与树高相关.那么降低树高自然对查找效率是有所帮助的.另外还有一个比较实际的问题:就是大量数据存储中,实现查询这样一个实 ...
- CentOS禁用root本地或远程ssh登录
有些特殊的情况我们需要禁止root在本地或远程使用ssh登录,以增加安全性. 禁止root本地登录 修改/etc/pam.d/login文件增加下面一行auth required pam_succee ...
- 页面关键词Meta Keywords和描述Description的优化作用
前几日有两三个童鞋们问我为什么文章目录页面没有设置关键词,我原先还以为什么关键词,后来才明白是问我为什么不添加Meta Keywords.关于这个问题我直接回应他们说目录页面Meta Keywords ...
- Highcharts axja 获取json对象动态生成报表生成
最近做个项目,项目经理想做一个统计报表,在网上查看些资料就选用Highchars 这里和大家分享下使用心得. 重点说明此代码是针对一个报表显示多个项对比显示. 直接贴代码:web端 <scrip ...
- Data Base sqlServer 组合主键
sqlServer 组合主键 创建表时: create table Person ( Name1 ) not null ,Name2 ) not null primary key(Name1,Na ...
- OOP数据库操作方法
一.数据库操作 连接MYSQL数据 面向对象访问数据库e.g. 造对象 $dx=new MySQLi("localhost","root","123& ...
- php实现新闻页面
首页 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8& ...
- 2-Medium下的MultipleCommandAssembly
1.首先创建一个控制台项目 2.添加引用[红色的都是将项目添加为引用,其中蓝色的log4net是直接从源代码下的Reference文件夹下引用的dll] 3.写代码 1)首先将config配置好[ht ...
- R语言实战读书笔记(一)R语言介绍
1.3.3 工作空间 getwd():显示当前工作目录 setwd():设置当前工作目录 ls():列出当前工作空间中的对象 rm():删除对象 1.3.4 输入与输出 source():执行脚本