From 0a1753c868750bbf861c9630936ad32941bb0117 Mon Sep 17 00:00:00 2001 From: akhr-77 Date: Tue, 3 Sep 2019 21:28:43 +0900 Subject: [PATCH 1/7] =?UTF-8?q?=E3=83=87=E3=82=A3=E3=83=AC=E3=82=AF?= =?UTF-8?q?=E3=83=88=E3=83=AA=E6=A7=8B=E6=88=90=E3=81=AE=E5=88=9D=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- kadai1/akhr77/README.md | 26 ++++++++++++++++++++++++++ kadai1/akhr77/cmd/imgconv/main.go | 5 +++++ kadai1/akhr77/pkg/imgconv/imgconv.go | 0 3 files changed, 31 insertions(+) create mode 100644 kadai1/akhr77/README.md create mode 100644 kadai1/akhr77/cmd/imgconv/main.go create mode 100644 kadai1/akhr77/pkg/imgconv/imgconv.go diff --git a/kadai1/akhr77/README.md b/kadai1/akhr77/README.md new file mode 100644 index 0000000..d826c20 --- /dev/null +++ b/kadai1/akhr77/README.md @@ -0,0 +1,26 @@ +# wordcount + +Gopher道場の課題1の実装です。 + +## 次の仕様を満たすコマンドを作って下さい +- ディレクトリを指定する +- 指定したディレクトリ以下のJPGファイルをPNGに変換(デフォルト) +- ディレクトリ以下は再帰的に処理する + +## 以下を満たすように開発してください +- mainパッケージと分離する +- 自作パッケージと標準パッケージと準標準パッケージのみ使う +- ユーザ定義型を作ってみる +- GoDocを生成してみる + +---------------------------------- + +## Installation + +```bash +$ go install github.com/gopherdojo/dojo7/kadai1/cmd/imgconv +``` + +## Usage +```bash +``` diff --git a/kadai1/akhr77/cmd/imgconv/main.go b/kadai1/akhr77/cmd/imgconv/main.go new file mode 100644 index 0000000..7905807 --- /dev/null +++ b/kadai1/akhr77/cmd/imgconv/main.go @@ -0,0 +1,5 @@ +package main + +func main() { + +} diff --git a/kadai1/akhr77/pkg/imgconv/imgconv.go b/kadai1/akhr77/pkg/imgconv/imgconv.go new file mode 100644 index 0000000..e69de29 From 4798313e81a3d2ea66585fda6837dbcb590c2a36 Mon Sep 17 00:00:00 2001 From: akhr-77 Date: Wed, 4 Sep 2019 07:31:24 +0900 Subject: [PATCH 2/7] =?UTF-8?q?=E3=82=BF=E3=82=A4=E3=83=9D=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- kadai1/akhr77/README.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/kadai1/akhr77/README.md b/kadai1/akhr77/README.md index d826c20..8395eb3 100644 --- a/kadai1/akhr77/README.md +++ b/kadai1/akhr77/README.md @@ -1,6 +1,4 @@ -# wordcount - -Gopher道場の課題1の実装です。 +# Gopher道場課題1 ## 次の仕様を満たすコマンドを作って下さい - ディレクトリを指定する From ecd54f18c62055063c0ff377d154148fc286b79f Mon Sep 17 00:00:00 2001 From: akhr-77 Date: Wed, 11 Sep 2019 07:31:30 +0900 Subject: [PATCH 3/7] add Makefile and gomod --- kadai1/akhr77/Makefile | 21 +++++ kadai1/akhr77/README.md | 1 + kadai1/akhr77/cmd/imgconv/main.go | 8 ++ kadai1/akhr77/go.mod | 3 + kadai1/akhr77/go.sum | 1 + kadai1/akhr77/pkg/imgconv/imgconv.go | 117 +++++++++++++++++++++++++++ 6 files changed, 151 insertions(+) create mode 100644 kadai1/akhr77/Makefile create mode 100644 kadai1/akhr77/go.mod create mode 100644 kadai1/akhr77/go.sum diff --git a/kadai1/akhr77/Makefile b/kadai1/akhr77/Makefile new file mode 100644 index 0000000..32e5abd --- /dev/null +++ b/kadai1/akhr77/Makefile @@ -0,0 +1,21 @@ +GOCMD=go +GOFMT=$(GOCMD) fmt +GOVET=$(GOCMD) vet +GOLINT=golint +GOTEST=$(GOCMD) test + +export GO111MODULE=on + +all:imgconv + +imgconv: + go build -o imgconv -v + +fmt: + ${GOFMT} ./... + ${GOVET} ./... + ${GOLINT} ./... + +check: + ${GOTEST} ./... -v + ${GOTEST} ./... -cover diff --git a/kadai1/akhr77/README.md b/kadai1/akhr77/README.md index 8395eb3..f7e8ab3 100644 --- a/kadai1/akhr77/README.md +++ b/kadai1/akhr77/README.md @@ -21,4 +21,5 @@ $ go install github.com/gopherdojo/dojo7/kadai1/cmd/imgconv ## Usage ```bash + ``` diff --git a/kadai1/akhr77/cmd/imgconv/main.go b/kadai1/akhr77/cmd/imgconv/main.go index 7905807..d249c73 100644 --- a/kadai1/akhr77/cmd/imgconv/main.go +++ b/kadai1/akhr77/cmd/imgconv/main.go @@ -1,5 +1,13 @@ package main +import ( + "os" + + "github.com/akhr77/dojo7/kadai1/akhr77/pkg/imgconv" +) + func main() { + cli := &imgconv.CLI{OutStream: os.Stdout, ErrStream: os.Stderr} + os.Exit(cli.Run(os.Args)) } diff --git a/kadai1/akhr77/go.mod b/kadai1/akhr77/go.mod new file mode 100644 index 0000000..f0a8f85 --- /dev/null +++ b/kadai1/akhr77/go.mod @@ -0,0 +1,3 @@ +module github.com/akhr77/dojo7/kadai1/akhr77 + +go 1.12 diff --git a/kadai1/akhr77/go.sum b/kadai1/akhr77/go.sum new file mode 100644 index 0000000..a2e96a9 --- /dev/null +++ b/kadai1/akhr77/go.sum @@ -0,0 +1 @@ +github.com/akhr77/dojo7 v0.0.0-20190903044302-61a8a3542956 h1:b07X0SoAQ/4uCLySeGBe96nqfKFRogBRM2xcpR1iWgo= diff --git a/kadai1/akhr77/pkg/imgconv/imgconv.go b/kadai1/akhr77/pkg/imgconv/imgconv.go index e69de29..6373eba 100644 --- a/kadai1/akhr77/pkg/imgconv/imgconv.go +++ b/kadai1/akhr77/pkg/imgconv/imgconv.go @@ -0,0 +1,117 @@ +package imgconv + +import ( + "flag" + "fmt" + "image" + "image/jpeg" + "image/png" + "io" + "os" + "path/filepath" + "strings" +) + +// return Code +const ( + ExitCodeOK = 0 + ExitCodeError = 1 +) + +// CLI struct +type CLI struct { + OutStream, ErrStream io.Writer +} + +var ( + src string + from string + to string +) + +// Run is implements function +func (c *CLI) Run(args []string) int { + flags := flag.NewFlagSet(args[0], flag.ContinueOnError) + flags.SetOutput(c.ErrStream) + // ショートオプション + flags.StringVar(&src, "s", "", "変換したい画像のファイルパスを指定") + flags.StringVar(&from, "f", "jpg", "変換前の画像形式を指定") + flags.StringVar(&to, "t", "png", "変換後の画像形式を指定") + // ロングオプション + flags.StringVar(&src, "src", "", "変換したい画像のファイルパスを指定") + flags.StringVar(&from, "from", "jpg", "変換前の画像形式を指定") + flags.StringVar(&to, "to", "png", "変換後の画像形式を指定") + + if err := flags.Parse(args[1:]); err != nil { + fmt.Fprintf(c.ErrStream, "解析処理でエラーになりました") + return ExitCodeError + } + + err := walk(src, from, to) + if err != nil { + return ExitCodeError + } + + return ExitCodeOK +} + +// walkは第一引数以下のディレクトリを再帰的に処理する +func walk(root, beforeExt, afterExt string) error { + err := filepath.Walk(root, func(path string, info os.FileInfo, err error) error { + if err != nil { + return err + } + n := info.Name() + if strings.HasSuffix(n, beforeExt) { + src, err := os.Open(path) + if err != nil { + return err + } + defer src.Close() + + // extentionを含まないファイル名 + n := filepath.Base(n[:len(n)-len(filepath.Ext(n))]) + dir := filepath.Dir(path) + dest, err := os.Create(filepath.Join(dir, n+"."+afterExt)) + if err != nil { + return err + } + + err = convert(src, dest, afterExt) + if err != nil { + // 変換処理に失敗した場合、不要なファイルが作成されてしまうため、削除する + dest.Close() + e := os.Remove(filepath.Join(dir, n+"."+afterExt)) + if e != nil { + return e + } + return err + } + } + return nil + }) + if err != nil { + return err + } + return nil +} + +func convert(src io.Reader, dest io.Writer, extention string) error { + img, _, err := image.Decode(src) + if err != nil { + return err + } + + switch extention { + case "jpg", "jpeg": + err = jpeg.Encode(dest, img, nil) + case "png": + err = png.Encode(dest, img) + case "default": + err = fmt.Errorf("supportしていないformatです") + } + if err != nil { + return err + } + return nil +} From b431ed084cd1737350b35ec406cf56335df34e3d Mon Sep 17 00:00:00 2001 From: akhr-77 Date: Wed, 11 Sep 2019 13:53:13 +0900 Subject: [PATCH 4/7] add testdata --- kadai1/akhr77/.gitignore | 1 + kadai1/akhr77/Makefile | 11 +++++------ kadai1/akhr77/README.md | 2 +- kadai1/akhr77/go.mod | 3 --- kadai1/akhr77/go.sum | 1 - kadai1/akhr77/pkg/imgconv/imgconv.go | 21 ++++++++++++++++++--- kadai1/akhr77/testdata/testdata_1.jpeg | Bin 0 -> 25253 bytes kadai1/akhr77/testdata/testdata_2.jpeg | Bin 0 -> 25253 bytes kadai1/akhr77/testdata/testdata_3.jpeg | Bin 0 -> 25253 bytes 9 files changed, 25 insertions(+), 14 deletions(-) create mode 100644 kadai1/akhr77/.gitignore delete mode 100644 kadai1/akhr77/go.mod delete mode 100644 kadai1/akhr77/go.sum create mode 100644 kadai1/akhr77/testdata/testdata_1.jpeg create mode 100644 kadai1/akhr77/testdata/testdata_2.jpeg create mode 100644 kadai1/akhr77/testdata/testdata_3.jpeg diff --git a/kadai1/akhr77/.gitignore b/kadai1/akhr77/.gitignore new file mode 100644 index 0000000..ae3c172 --- /dev/null +++ b/kadai1/akhr77/.gitignore @@ -0,0 +1 @@ +/bin/ diff --git a/kadai1/akhr77/Makefile b/kadai1/akhr77/Makefile index 32e5abd..c4a13db 100644 --- a/kadai1/akhr77/Makefile +++ b/kadai1/akhr77/Makefile @@ -3,14 +3,13 @@ GOFMT=$(GOCMD) fmt GOVET=$(GOCMD) vet GOLINT=golint GOTEST=$(GOCMD) test +BINARYNAME=bin/imgconv -export GO111MODULE=on - -all:imgconv - -imgconv: - go build -o imgconv -v +export GO111MODULE=off +.PHONY: build +build: ## go build + go build -o ${BINARYNAME} cmd/imgconv/main.go fmt: ${GOFMT} ./... ${GOVET} ./... diff --git a/kadai1/akhr77/README.md b/kadai1/akhr77/README.md index f7e8ab3..95adac7 100644 --- a/kadai1/akhr77/README.md +++ b/kadai1/akhr77/README.md @@ -16,7 +16,7 @@ ## Installation ```bash -$ go install github.com/gopherdojo/dojo7/kadai1/cmd/imgconv +$ cd ``` ## Usage diff --git a/kadai1/akhr77/go.mod b/kadai1/akhr77/go.mod deleted file mode 100644 index f0a8f85..0000000 --- a/kadai1/akhr77/go.mod +++ /dev/null @@ -1,3 +0,0 @@ -module github.com/akhr77/dojo7/kadai1/akhr77 - -go 1.12 diff --git a/kadai1/akhr77/go.sum b/kadai1/akhr77/go.sum deleted file mode 100644 index a2e96a9..0000000 --- a/kadai1/akhr77/go.sum +++ /dev/null @@ -1 +0,0 @@ -github.com/akhr77/dojo7 v0.0.0-20190903044302-61a8a3542956 h1:b07X0SoAQ/4uCLySeGBe96nqfKFRogBRM2xcpR1iWgo= diff --git a/kadai1/akhr77/pkg/imgconv/imgconv.go b/kadai1/akhr77/pkg/imgconv/imgconv.go index 6373eba..b439063 100644 --- a/kadai1/akhr77/pkg/imgconv/imgconv.go +++ b/kadai1/akhr77/pkg/imgconv/imgconv.go @@ -4,6 +4,7 @@ import ( "flag" "fmt" "image" + "image/gif" "image/jpeg" "image/png" "io" @@ -33,6 +34,8 @@ var ( func (c *CLI) Run(args []string) int { flags := flag.NewFlagSet(args[0], flag.ContinueOnError) flags.SetOutput(c.ErrStream) + // todo: あとで消す + fmt.Println("Run開始") // ショートオプション flags.StringVar(&src, "s", "", "変換したい画像のファイルパスを指定") flags.StringVar(&from, "f", "jpg", "変換前の画像形式を指定") @@ -47,6 +50,13 @@ func (c *CLI) Run(args []string) int { return ExitCodeError } + if !supportFormat(from) { + fmt.Fprintf(c.ErrStream, "-fオポションで指定指定画像形式はサポートしていません") + } + if !supportFormat(to) { + fmt.Fprintf(c.ErrStream, "-tオポションで指定指定画像形式はサポートしていません") + } + err := walk(src, from, to) if err != nil { return ExitCodeError @@ -96,19 +106,24 @@ func walk(root, beforeExt, afterExt string) error { return nil } +func supportFormat(extention string) bool { + var supportedFormats = map[string]bool{"jpg": true, "jpeg": true, "png": true, "gif": true} + _, ok := supportedFormats[extention] + return ok +} + func convert(src io.Reader, dest io.Writer, extention string) error { img, _, err := image.Decode(src) if err != nil { return err } - switch extention { case "jpg", "jpeg": err = jpeg.Encode(dest, img, nil) case "png": err = png.Encode(dest, img) - case "default": - err = fmt.Errorf("supportしていないformatです") + case "gif": + err = gif.Encode(dest, img, nil) } if err != nil { return err diff --git a/kadai1/akhr77/testdata/testdata_1.jpeg b/kadai1/akhr77/testdata/testdata_1.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..f9b5a08d5577bfaf436984d20ee44c1446342649 GIT binary patch literal 25253 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 Date: Wed, 11 Sep 2019 19:46:23 +0900 Subject: [PATCH 5/7] modify image extention --- .../testdata/{testdata_1.jpeg => testdata_1.jpg} | Bin .../testdata/{testdata_2.jpeg => testdata_2.jpg} | Bin .../testdata/{testdata_3.jpeg => testdata_3.jpg} | Bin 3 files changed, 0 insertions(+), 0 deletions(-) rename kadai1/akhr77/testdata/{testdata_1.jpeg => testdata_1.jpg} (100%) rename kadai1/akhr77/testdata/{testdata_2.jpeg => testdata_2.jpg} (100%) rename kadai1/akhr77/testdata/{testdata_3.jpeg => testdata_3.jpg} (100%) diff --git a/kadai1/akhr77/testdata/testdata_1.jpeg b/kadai1/akhr77/testdata/testdata_1.jpg similarity index 100% rename from kadai1/akhr77/testdata/testdata_1.jpeg rename to kadai1/akhr77/testdata/testdata_1.jpg diff --git a/kadai1/akhr77/testdata/testdata_2.jpeg b/kadai1/akhr77/testdata/testdata_2.jpg similarity index 100% rename from kadai1/akhr77/testdata/testdata_2.jpeg rename to kadai1/akhr77/testdata/testdata_2.jpg diff --git a/kadai1/akhr77/testdata/testdata_3.jpeg b/kadai1/akhr77/testdata/testdata_3.jpg similarity index 100% rename from kadai1/akhr77/testdata/testdata_3.jpeg rename to kadai1/akhr77/testdata/testdata_3.jpg From 89604b2da5b81d6f3863d21060cd66f4d1160805 Mon Sep 17 00:00:00 2001 From: akhr-77 Date: Wed, 11 Sep 2019 19:47:27 +0900 Subject: [PATCH 6/7] add log --- kadai1/akhr77/cmd/imgconv/main.go | 1 - kadai1/akhr77/pkg/imgconv/imgconv.go | 6 ++++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/kadai1/akhr77/cmd/imgconv/main.go b/kadai1/akhr77/cmd/imgconv/main.go index d249c73..3779493 100644 --- a/kadai1/akhr77/cmd/imgconv/main.go +++ b/kadai1/akhr77/cmd/imgconv/main.go @@ -9,5 +9,4 @@ import ( func main() { cli := &imgconv.CLI{OutStream: os.Stdout, ErrStream: os.Stderr} os.Exit(cli.Run(os.Args)) - } diff --git a/kadai1/akhr77/pkg/imgconv/imgconv.go b/kadai1/akhr77/pkg/imgconv/imgconv.go index b439063..39e9604 100644 --- a/kadai1/akhr77/pkg/imgconv/imgconv.go +++ b/kadai1/akhr77/pkg/imgconv/imgconv.go @@ -8,6 +8,7 @@ import ( "image/jpeg" "image/png" "io" + "log" "os" "path/filepath" "strings" @@ -32,10 +33,9 @@ var ( // Run is implements function func (c *CLI) Run(args []string) int { + log.Printf("\x1b[33m%s\x1b[0m\n", "[imgconv start]") flags := flag.NewFlagSet(args[0], flag.ContinueOnError) flags.SetOutput(c.ErrStream) - // todo: あとで消す - fmt.Println("Run開始") // ショートオプション flags.StringVar(&src, "s", "", "変換したい画像のファイルパスを指定") flags.StringVar(&from, "f", "jpg", "変換前の画像形式を指定") @@ -62,6 +62,7 @@ func (c *CLI) Run(args []string) int { return ExitCodeError } + log.Printf("\x1b[33m%s\x1b[0m\n", "[imgconv end]") return ExitCodeOK } @@ -87,6 +88,7 @@ func walk(root, beforeExt, afterExt string) error { return err } + log.Printf("\x1b[33m%s%s -> %s\x1b[0m\n", "[replace file]", path, afterExt) err = convert(src, dest, afterExt) if err != nil { // 変換処理に失敗した場合、不要なファイルが作成されてしまうため、削除する From 0f33c1d0c982f59c5a868e21105615e201ce3902 Mon Sep 17 00:00:00 2001 From: akhr-77 Date: Wed, 11 Sep 2019 19:56:18 +0900 Subject: [PATCH 7/7] modify REE\ADME --- kadai1/akhr77/README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/kadai1/akhr77/README.md b/kadai1/akhr77/README.md index 95adac7..4ca7200 100644 --- a/kadai1/akhr77/README.md +++ b/kadai1/akhr77/README.md @@ -16,10 +16,11 @@ ## Installation ```bash -$ cd +$ make ``` ## Usage ```bash - +$ cd bin +$ ./imgconv -s ../testdata -f jpg -t png ```