package main import ( "fmt" comicconverter "go-comic-converter/internal/comic-converter" "io/fs" "path/filepath" "runtime" "sort" "strings" "sync" "github.com/bmaupin/go-epub" ) type Todo struct { Input string Output string } func addImages(doc *epub.Epub, imagesPath string) { wg := &sync.WaitGroup{} todos := make(chan Todo, runtime.NumCPU()) wg.Add(runtime.NumCPU()) for i := 0; i < runtime.NumCPU(); i++ { go func() { defer wg.Done() for todo := range todos { fmt.Printf("Processing %s\n", todo.Input) comicconverter.Save( comicconverter.Resize( comicconverter.CropMarging( comicconverter.Load(todo.Input), ), 1860, 2480), todo.Output, 75, ) } }() } dirname := "/Users/vincent/Downloads/Bleach T01 (Tite KUBO) [eBook officiel 1920]" filepath.WalkDir(dirname, func(path string, d fs.DirEntry, err error) error { if d.IsDir() { return nil } input := path ext := filepath.Ext(path) if strings.ToLower(ext) != ".jpg" { return nil } output := fmt.Sprintf("%s_gray%s", input[0:len(input)-len(ext)], ext) todos <- Todo{input, output} return nil }) close(todos) wg.Wait() } func getImages(dirname string) []string { images := make([]string, 0) filepath.WalkDir(dirname, func(path string, d fs.DirEntry, err error) error { if d.IsDir() { return nil } ext := filepath.Ext(path) if strings.ToLower(ext) != ".jpg" { return nil } images = append(images, path) return nil }) sort.Strings(images) return images } func main() { imagesPath := getImages("/Users/vincent/Downloads/Bleach T01 (Tite KUBO) [eBook officiel 1920]") doc := epub.NewEpub("Bleach T01 (Tite KUBO) [eBook officiel 1920]") doc.SetAuthor("Bachelier Vincent") for i, imagePath := range imagesPath { fmt.Printf("%04d / %04d\n", i+1, len(imagesPath)) name := filepath.Base(imagePath) ext := filepath.Ext(name) title := name[0 : len(name)-len(ext)] img := comicconverter.Convert(imagePath, true, 1860, 2480, 75) if i == 0 { doc.SetCover(img, "") } else { imgPath, _ := doc.AddImage(img, name) doc.AddSection(fmt.Sprintf("<img src=\"%s\" />", imgPath), title, fmt.Sprintf("%s.xhtml", title), "../css/cover.css") } } if err := doc.Write("/Users/vincent/Downloads/test.epub"); err != nil { panic(err) } }