You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
94 lines
1.9 KiB
Go
94 lines
1.9 KiB
Go
package main
|
|
|
|
import (
|
|
"bytes"
|
|
"fmt"
|
|
"image"
|
|
"image/jpeg"
|
|
_ "image/jpeg"
|
|
_ "image/png"
|
|
"io/fs"
|
|
"io/ioutil"
|
|
"os"
|
|
"path/filepath"
|
|
"strconv"
|
|
"strings"
|
|
|
|
"github.com/nfnt/resize"
|
|
)
|
|
|
|
func resizeImage(originalImage *bytes.Buffer, width uint, ext string) (*bytes.Buffer, error) {
|
|
image, _, err := image.Decode(originalImage)
|
|
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
//newImage := resize.Thumbnail(width, width, image, resize.NearestNeighbor)
|
|
newImage := resize.Resize(width, 0, image, resize.NearestNeighbor)
|
|
|
|
out := new(bytes.Buffer)
|
|
/*
|
|
switch ext {
|
|
case ".png":
|
|
png.Encode(out, newImage)
|
|
case ".jpg", ".jpeg":
|
|
}*/
|
|
jpeg.Encode(out, newImage, nil)
|
|
|
|
return out, nil
|
|
}
|
|
|
|
func main() {
|
|
//out := os.Stdout
|
|
if !(len(os.Args) == 3) {
|
|
panic("usage go run main.go . [width]")
|
|
}
|
|
path := os.Args[1]
|
|
|
|
width, err := strconv.ParseUint(os.Args[2], 10, 0)
|
|
|
|
if err != nil {
|
|
panic("Wrong value for image width")
|
|
}
|
|
|
|
files, err := os.ReadDir(path)
|
|
|
|
if err != nil {
|
|
panic("Wrong value for image width")
|
|
}
|
|
|
|
err = os.MkdirAll("output"+string(os.PathSeparator)+strconv.FormatUint(width, 10), 0777)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
for _, file := range files {
|
|
if !file.IsDir() {
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
fmt.Print(file.Name(), " => ")
|
|
switch filepath.Ext(file.Name()) {
|
|
case ".png", ".jpg", ".jpeg":
|
|
originalImage, err := ioutil.ReadFile(path + string(os.PathSeparator) + file.Name())
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
newImage, err := resizeImage(bytes.NewBuffer(originalImage), uint(width), filepath.Ext(file.Name()))
|
|
|
|
filename := file.Name()
|
|
filename = strings.Replace(filename, ".png", ".jpg", 1)
|
|
filename = strings.Replace(filename, ".jpeg", ".jpg", 1)
|
|
filename = "output" + string(os.PathSeparator) + strconv.FormatUint(width, 10) + string(os.PathSeparator) + filename
|
|
fmt.Println(filename)
|
|
err = os.WriteFile(filename, newImage.Bytes(), fs.ModePerm)
|
|
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|