add jpeg encoder
This commit is contained in:
16
image.go
16
image.go
@@ -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
|
||||||
|
@@ -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()
|
||||||
|
2
video.go
2
video.go
@@ -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,
|
||||||
|
Reference in New Issue
Block a user