add jpeg encoder

This commit is contained in:
Dmitry Fedotov
2025-03-26 22:11:52 +03:00
parent d72540d0c3
commit b5df6e8c39
3 changed files with 20 additions and 4 deletions

View File

@@ -4,6 +4,7 @@ import (
"errors" "errors"
"image" "image"
"image/color" "image/color"
"image/jpeg"
"image/png" "image/png"
"io" "io"
) )
@@ -15,8 +16,19 @@ func createBarnsleyFernPng(s *settings, w io.Writer) error {
drawBarnsleyFern(img, newColorFunc(s.CM), s.Dots) drawBarnsleyFern(img, newColorFunc(s.CM), s.Dots)
if err := png.Encode(w, img); err != nil { switch s.OM {
return errors.Join(errEncodePng, err) 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 return nil

View File

@@ -2,6 +2,7 @@ package main
import ( import (
"flag" "flag"
"fmt"
"image/color" "image/color"
) )
@@ -18,6 +19,7 @@ type outputmode int
const ( const (
outputpng outputmode = iota outputpng outputmode = iota
outputjpeg
outputvideo outputvideo
) )
@@ -42,8 +44,8 @@ func parseSettings() *settings {
flag.IntVar(&x, "x", 1920, "размер картинки по горизонтали") flag.IntVar(&x, "x", 1920, "размер картинки по горизонтали")
flag.IntVar(&y, "y", 1080, "размер картинки по вертикали") flag.IntVar(&y, "y", 1080, "размер картинки по вертикали")
flag.IntVar(&dots, "d", 100000, "сколько точек рисовать") flag.IntVar(&dots, "d", 100000, "сколько точек рисовать")
flag.IntVar(&cmode, "color", 0, "color mode: 0 - default green, 1 - random, 2 - timed, 3 - rainbow") flag.IntVar(&cmode, "c", 0, "color mode: 0 - default green, 1 - random, 2 - timed, 3 - rainbow")
flag.IntVar(&output, "o", 0, "режим вывода: 0 - изображение png, 1 - видео") flag.IntVar(&output, "o", 0, fmt.Sprintf("режим вывода: %d - png, %d - jpeg, %d - видео", outputpng, outputjpeg, outputvideo))
flag.StringVar(&fname, "out", "barnsley-fern.png", "полный путь файла для записи изображения") flag.StringVar(&fname, "out", "barnsley-fern.png", "полный путь файла для записи изображения")
flag.Parse() flag.Parse()

View File

@@ -11,6 +11,8 @@ import (
var erreEncodeVideo = errors.New("не удалось создать видео") var erreEncodeVideo = errors.New("не удалось создать видео")
func createBarnsLeyFernVideo(s *settings, w io.Writer) error { func createBarnsLeyFernVideo(s *settings, w io.Writer) error {
s.OM = outputjpeg
opts := &vid.Options{ opts := &vid.Options{
FPS: 1, FPS: 1,
Quality: 0, Quality: 0,