我想处理本地图像以使尺寸为高度= 380 PX,宽度= 380 px ,并且尺寸小于 20kb 。
我有以下代码,该代码读取文件,然后将尺寸乘以380更改为380,然后尝试减小尺寸。
但是如果原始文件很大,有时大小会超过20 KB。如何确保该文件始终小于20 KB?
如何在尺寸更改后检查图像尺寸以及质量降低后的图像尺寸?这样我就可以循环运行。
package main
import (
"bufio"
"bytes"
"fmt"
"image"
"image/jpeg"
"image/png"
"os"
"github.com/davecgh/go-spew/spew"
"github.com/nfnt/resize"
)
func main() {
// Read Local file
mainFile, err := os.Open("C://c.jpg")
if err != nil {
fmt.Println("Erro Occured")
spew.Dump(err)
return
}
defer mainFile.Close()
originalimage, _, err := image.Decode(mainFile)
if err != nil {
fmt.Println("Error ", err)
originalimage, err2 := png.Decode(mainFile)
print(err2)
print(originalimage)
}
// Create new file with reduced dimentions - height width as 380
newImage := resize.Resize(380, 380, originalimage, resize.Lanczos3)
// Create new file with reduced size - Quality down by 50%
var b bytes.Buffer
w1 := bufio.NewWriter(&b)
jpeg.Encode(w1, newImage, &jpeg.Options{50})
f2, err := os.OpenFile("C://temp5.png", os.O_WRONLY|os.O_CREATE, 0666)
if err != nil {
panic(err)
}
defer f2.Close()
b.WriteTo(f2)
}