zoukankan      html  css  js  c++  java
  • go图片灰度化

    package main
    
    import (
    	"image"
    	"image/color"
    	"image/gif"
    	"image/jpeg"
    	"image/png"
    	"os"
    	"strings"
    )
    
    func main() {
    
    	imagePath := "你图片的名字"
    
    	file, err := os.Open(imagePath)
    
    	defer file.Close()
    
    	if err != nil {
    		panic(err)
    	}
    
    	decode, _, err := image.Decode(file)
    
    	if err != nil {
    		panic(err)
    	}
    
    	rgba := grayingImage(decode)
    
    	newFileName := "输出图片的名字"
    
    	outFile, _ := os.Create(newFileName)
    
    	defer outFile.Close()
    
    	if err := imageEncode(newFileName, outFile, rgba); err != nil {
    		panic(err)
    	}
    
    }
    
    func grayingImage(m image.Image) *image.RGBA {
    	bounds := m.Bounds()
    
    	dx := bounds.Dx()
    
    	dy := bounds.Dy()
    
    	newRgba := image.NewRGBA(bounds)
    
    	for x := 0; x < dx; x++ {
    
    		for y := 0; y < dy; y++ {
    
    			colorRgb := m.At(x, y)
    
    			_, g, _, a := colorRgb.RGBA()
    
    			newG := uint8(g >> 8)
    
    			newA := uint8(a >> 8)
    
    			// 将每个点的设置为灰度值
    			newRgba.SetRGBA(x, y, color.RGBA{R: newG, G: newG, B: newG, A: newA})
    		}
    	}
    
    	return newRgba
    }
    
    func imageEncode(fileName string, file *os.File, rgba *image.RGBA) error {
    
    	// 将图片和扩展名分离
    	stringSlice := strings.Split(fileName, ".")
    
    	// 根据图片的扩展名来运用不同的处理
    	switch stringSlice[len(stringSlice)-1] {
    	case "jpg":
    		return jpeg.Encode(file, rgba, nil)
    	case "jpeg":
    		return jpeg.Encode(file, rgba, nil)
    	case "gif":
    		return gif.Encode(file, rgba, nil)
    	case "png":
    		return png.Encode(file, rgba)
    	default:
    		panic("不支持的图片类型")
    	}
    }
    
    
  • 相关阅读:
    同花顺笔试碰到的一道前端编程题
    闭包会造成内存泄漏吗?
    动态添加和删除节点元素,函数封装
    58同城2018校招前端笔试题总结
    拼多多2018提前批前端笔试总结
    根据字符串字符的个数排序输出
    ES6数组对象新增方法
    【转】浅析BFC及其作用
    《具体数学》学习笔记
    KMP总结
  • 原文地址:https://www.cnblogs.com/ivy-blogs/p/13829000.html
Copyright © 2011-2022 走看看