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"
"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

View File

@@ -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()

View File

@@ -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,