Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package main
- import (
- "bytes"
- "fmt"
- "image"
- "image/color"
- "image/draw"
- "image/jpeg"
- "io/ioutil"
- "log"
- "os"
- )
- func main() {
- f, err := os.Open("resources/image.jpg")
- if err != nil {
- log.Fatal(err)
- }
- img, str, err := image.Decode(f)
- if err != nil {
- log.Fatal(err)
- }
- fmt.Println(str)
- resImg := resize(img, 3)
- fmt.Println(resImg)
- imgBytes := imgToBytes(resImg)
- fmt.Println(imgBytes)
- err = ioutil.WriteFile("resources/test.jpg", imgBytes, 0777)
- if err != nil {
- log.Fatal(err)
- }
- }
- func resize(img image.Image, scale int) image.Image {
- imgRect := image.Rect(img.Bounds().Min.X/scale, img.Bounds().Min.Y/scale, img.Bounds().Max.X/scale, img.Bounds().Max.Y/scale)
- resImg := image.NewRGBA(imgRect)
- draw.Draw(resImg, resImg.Bounds(), &image.Uniform{C: color.White}, image.ZP, draw.Src)
- for y := img.Bounds().Min.Y; y < img.Bounds().Max.Y; y += scale {
- for x := img.Bounds().Min.X; x < img.Bounds().Max.X; x += scale {
- resImg.Set(x/scale, y/scale, img.At(x, y))
- }
- }
- return resImg
- }
- func imgToBytes(img image.Image) []byte {
- var opt jpeg.Options
- opt.Quality = 80
- buff := bytes.NewBuffer(nil)
- err := jpeg.Encode(buff, img, &opt) // put quality to 80%
- if err != nil {
- log.Fatal(err)
- }
- return buff.Bytes()
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement