diff --git a/image.go b/image.go index fbc86f7..7ed023f 100644 --- a/image.go +++ b/image.go @@ -4,6 +4,7 @@ import ( "errors" "image" "image/color" + "image/jpeg" "image/png" "io" ) @@ -15,8 +16,19 @@ func createBarnsleyFernPng(s *settings, w io.Writer) error { drawBarnsleyFern(img, newColorFunc(s.CM), s.Dots) - if err := png.Encode(w, img); err != nil { - return errors.Join(errEncodePng, err) + switch s.OM { + case outputjpeg: + opts := &jpeg.Options{ + Quality: 100, + } + if err := jpeg.Encode(w, img, opts); err != nil { + return errors.Join(errEncodePng, err) + } + + case outputpng: + if err := png.Encode(w, img); err != nil { + return errors.Join(errEncodePng, err) + } } return nil diff --git a/settings.go b/settings.go index 8b67c6f..a0b9b9e 100644 --- a/settings.go +++ b/settings.go @@ -2,6 +2,7 @@ package main import ( "flag" + "fmt" "image/color" ) @@ -18,6 +19,7 @@ type outputmode int const ( outputpng outputmode = iota + outputjpeg outputvideo ) @@ -42,8 +44,8 @@ func parseSettings() *settings { flag.IntVar(&x, "x", 1920, "размер картинки по горизонтали") flag.IntVar(&y, "y", 1080, "размер картинки по вертикали") flag.IntVar(&dots, "d", 100000, "сколько точек рисовать") - flag.IntVar(&cmode, "color", 0, "color mode: 0 - default green, 1 - random, 2 - timed, 3 - rainbow") - flag.IntVar(&output, "o", 0, "режим вывода: 0 - изображение png, 1 - видео") + flag.IntVar(&cmode, "c", 0, "color mode: 0 - default green, 1 - random, 2 - timed, 3 - rainbow") + flag.IntVar(&output, "o", 0, fmt.Sprintf("режим вывода: %d - png, %d - jpeg, %d - видео", outputpng, outputjpeg, outputvideo)) flag.StringVar(&fname, "out", "barnsley-fern.png", "полный путь файла для записи изображения") flag.Parse() diff --git a/video.go b/video.go index d6f3d9b..2967974 100644 --- a/video.go +++ b/video.go @@ -11,6 +11,8 @@ import ( var erreEncodeVideo = errors.New("не удалось создать видео") func createBarnsLeyFernVideo(s *settings, w io.Writer) error { + s.OM = outputjpeg + opts := &vid.Options{ FPS: 1, Quality: 0,