From fb20d89adbd748cffa06f451493b8f4741d84420 Mon Sep 17 00:00:00 2001 From: suaaa7 Date: Thu, 11 Jul 2019 22:14:53 +0900 Subject: [PATCH 01/13] Add README.md --- kadai1/pei/README.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 kadai1/pei/README.md diff --git a/kadai1/pei/README.md b/kadai1/pei/README.md new file mode 100644 index 0000000..5afd9ea --- /dev/null +++ b/kadai1/pei/README.md @@ -0,0 +1 @@ +# 課題1 画像変換コマンドを作ろう From afb5ef090018328ec8e5b6ee8ee449f675f404a5 Mon Sep 17 00:00:00 2001 From: suaaa7 Date: Sun, 14 Jul 2019 13:53:57 +0900 Subject: [PATCH 02/13] Update README.md --- kadai1/pei/README.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/kadai1/pei/README.md b/kadai1/pei/README.md index 5afd9ea..2bdd1c7 100644 --- a/kadai1/pei/README.md +++ b/kadai1/pei/README.md @@ -1 +1,13 @@ # 課題1 画像変換コマンドを作ろう + +- 次の仕様を満たすコマンドを作って下さい + - ディレクトリを指定する + - 指定したディレクトリ以下のJPGファイルをPNGに変換(デフォルト) + - ディレクトリ以下は再帰的に処理する + - 変換前と変換後の画像形式を指定できる(オプション) +- 以下を満たすように開発してください + - mainパッケージと分離する + - 自作パッケージと標準パッケージと準標準パッケージのみ使う + - 準標準パッケージ:golang.org/x以下のパッケージ + - ユーザ定義型を作ってみる + - GoDocを生成してみる From 3b5803f0f7645ab483692742c708cddd846ecb9b Mon Sep 17 00:00:00 2001 From: suaaa7 Date: Mon, 15 Jul 2019 07:33:29 +0900 Subject: [PATCH 03/13] Add pkg/imgconv --- kadai1/pei/pkg/imgconv/imgconv.go | 75 ++++++++++++++++++++++++++ kadai1/pei/pkg/imgconv/imgconv_test.go | 51 ++++++++++++++++++ kadai1/pei/pkg/imgconv/imgext.go | 46 ++++++++++++++++ 3 files changed, 172 insertions(+) create mode 100644 kadai1/pei/pkg/imgconv/imgconv.go create mode 100644 kadai1/pei/pkg/imgconv/imgconv_test.go create mode 100644 kadai1/pei/pkg/imgconv/imgext.go diff --git a/kadai1/pei/pkg/imgconv/imgconv.go b/kadai1/pei/pkg/imgconv/imgconv.go new file mode 100644 index 0000000..abe0f4e --- /dev/null +++ b/kadai1/pei/pkg/imgconv/imgconv.go @@ -0,0 +1,75 @@ +package imgconv + +import ( + "fmt" + "image" + "image/gif" + "image/jpeg" + "image/png" + "log" + "os" +) + +// ImgConverter struct has 2 paths and 2 extensions for input and output. +type ImgConverter struct { + // + InputPath string + InputExtension ImgExtension + OutputPath string + OutputExtension ImgExtension +} + +// Convert image file. +func (ic *ImgConverter) Convert() error { + inFile, err := os.Open(ic.InputPath) + if err != nil { + log.Fatal(err) + } + defer inFile.Close() + + inImg, err := decodeImg(inFile, ic.InputExtension) + if err != nil { + log.Fatal(err) + } + + outFile, err := os.Create(ic.OutputPath) + if err != nil { + log.Fatal(err) + } + defer outFile.Close() + + err = encodeImg(outFile, ic.OutputExtension, &inImg) + if err != nil { + log.Fatal(err) + } + + return nil +} + +func encodeImg(file *os.File, ext ImgExtension, img *image.Image) (err error) { + switch ext { + case JPEG: + err = jpeg.Encode(file, *img, nil) + case PNG: + err = png.Encode(file, *img) + case GIF: + err = gif.Encode(file, *img, nil) + default: + err = fmt.Errorf("%s is not supported", ext) + } + return +} + +func decodeImg(file *os.File, ext ImgExtension) (img image.Image, err error) { + switch ext { + case JPEG: + img, err = jpeg.Decode(file) + case PNG: + img, err = png.Decode(file) + case GIF: + img, err = gif.Decode(file) + default: + err = fmt.Errorf("%s is not supported", ext) + } + return +} diff --git a/kadai1/pei/pkg/imgconv/imgconv_test.go b/kadai1/pei/pkg/imgconv/imgconv_test.go new file mode 100644 index 0000000..8d3be91 --- /dev/null +++ b/kadai1/pei/pkg/imgconv/imgconv_test.go @@ -0,0 +1,51 @@ +package imgconv_test + +import ( + "os" + "testing" + + "github.com/gopherdojo/dojo6/kadai1/pei/pkg/imgconv" +) + +func TestImgConverter_Convert(t *testing.T) { + const ( + jpgfile = "../../testdata/sample.jpg" + pngfile = "../../testdata/sample.png" + giffile = "../../testdata/sample.gif" + + errorMessage = "Unexpected behavior" + ) + defer func() { + os.Remove(pngfile) + os.Remove(giffile) + }() + + var ( + ic imgconv.ImgConverter + err error + ) + + // jpg -> png + ic = imgconv.ImgConverter{ + InputPath: jpgfile, + InputExtension: imgconv.JPEG, + OutputPath: pngfile, + OutputExtension: imgconv.PNG, + } + err = ic.Convert() + if err != nil { + t.Errorf(errorMessage) + } + + // png -> gif + ic = imgconv.ImgConverter{ + InputPath: pngfile, + InputExtension: imgconv.PNG, + OutputPath: giffile, + OutputExtension: imgconv.GIF, + } + err = ic.Convert() + if err != nil { + t.Errorf(errorMessage) + } +} diff --git a/kadai1/pei/pkg/imgconv/imgext.go b/kadai1/pei/pkg/imgconv/imgext.go new file mode 100644 index 0000000..65c1f0b --- /dev/null +++ b/kadai1/pei/pkg/imgconv/imgext.go @@ -0,0 +1,46 @@ +package imgconv + +import ( + "strings" +) + +// ImgExtension is enum type for image extension. +type ImgExtension int + +const ( + UNDEF ImgExtension = iota + JPEG + PNG + GIF +) + +// ImgExtension => String +func (ie ImgExtension) String() string { + switch ie { + case JPEG: + return "jpeg" + case PNG: + return "png" + case GIF: + return "gif" + default: + return "undefined" + } +} + +// String => ImgExtension +func ParseImgExtension(s string) ImgExtension { + stringList := strings.Split(s, ".") + ext := stringList[len(stringList)-1] + ext = strings.ToLower(ext) + switch ext { + case "jpg", "jpeg": + return JPEG + case "png": + return PNG + case "gif": + return GIF + default: + return UNDEF + } +} From e5a21290b062e9f3db35ddd919a324227fd78e16 Mon Sep 17 00:00:00 2001 From: suaaa7 Date: Mon, 15 Jul 2019 07:33:48 +0900 Subject: [PATCH 04/13] Add testdata --- kadai1/pei/testdata/sample.jpg | Bin 0 -> 36298 bytes .../pei/testdata/testdir1/testdir2/sample.jpg | Bin 0 -> 36298 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100755 kadai1/pei/testdata/sample.jpg create mode 100755 kadai1/pei/testdata/testdir1/testdir2/sample.jpg diff --git a/kadai1/pei/testdata/sample.jpg b/kadai1/pei/testdata/sample.jpg new file mode 100755 index 0000000000000000000000000000000000000000..30a491dcf4a73bfaa14837004ea212bb7d3cc0e7 GIT binary patch literal 36298 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 literal 0 HcmV?d00001 diff --git a/kadai1/pei/testdata/testdir1/testdir2/sample.jpg b/kadai1/pei/testdata/testdir1/testdir2/sample.jpg new file mode 100755 index 0000000000000000000000000000000000000000..30a491dcf4a73bfaa14837004ea212bb7d3cc0e7 GIT binary patch literal 36298 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 literal 0 HcmV?d00001 From f96cbfc3163c6ea1b4817b755ec662c5fca998fa Mon Sep 17 00:00:00 2001 From: suaaa7 Date: Mon, 15 Jul 2019 18:54:10 +0900 Subject: [PATCH 05/13] Add LeaveInput option --- kadai1/pei/pkg/imgconv/imgconv.go | 5 +++++ kadai1/pei/pkg/imgconv/imgconv_test.go | 2 ++ 2 files changed, 7 insertions(+) diff --git a/kadai1/pei/pkg/imgconv/imgconv.go b/kadai1/pei/pkg/imgconv/imgconv.go index abe0f4e..89ec40f 100644 --- a/kadai1/pei/pkg/imgconv/imgconv.go +++ b/kadai1/pei/pkg/imgconv/imgconv.go @@ -17,6 +17,7 @@ type ImgConverter struct { InputExtension ImgExtension OutputPath string OutputExtension ImgExtension + LeaveInput bool } // Convert image file. @@ -43,6 +44,10 @@ func (ic *ImgConverter) Convert() error { log.Fatal(err) } + if !ic.LeaveInput { + os.Remove(ic.InputPath) + } + return nil } diff --git a/kadai1/pei/pkg/imgconv/imgconv_test.go b/kadai1/pei/pkg/imgconv/imgconv_test.go index 8d3be91..4fdf9c9 100644 --- a/kadai1/pei/pkg/imgconv/imgconv_test.go +++ b/kadai1/pei/pkg/imgconv/imgconv_test.go @@ -31,6 +31,7 @@ func TestImgConverter_Convert(t *testing.T) { InputExtension: imgconv.JPEG, OutputPath: pngfile, OutputExtension: imgconv.PNG, + LeaveInput: true, } err = ic.Convert() if err != nil { @@ -43,6 +44,7 @@ func TestImgConverter_Convert(t *testing.T) { InputExtension: imgconv.PNG, OutputPath: giffile, OutputExtension: imgconv.GIF, + LeaveInput: false, } err = ic.Convert() if err != nil { From 0c05d0003dac012f19e969506d89c07a8ab2df82 Mon Sep 17 00:00:00 2001 From: suaaa7 Date: Mon, 15 Jul 2019 18:56:21 +0900 Subject: [PATCH 06/13] Add pkg/convdir --- kadai1/pei/pkg/convdir/convdir.go | 72 ++++++++++++++++++++++++++ kadai1/pei/pkg/convdir/convdir_test.go | 30 +++++++++++ 2 files changed, 102 insertions(+) create mode 100644 kadai1/pei/pkg/convdir/convdir.go create mode 100644 kadai1/pei/pkg/convdir/convdir_test.go diff --git a/kadai1/pei/pkg/convdir/convdir.go b/kadai1/pei/pkg/convdir/convdir.go new file mode 100644 index 0000000..6facef0 --- /dev/null +++ b/kadai1/pei/pkg/convdir/convdir.go @@ -0,0 +1,72 @@ +package convdir + +import ( + "fmt" + "log" + "os" + "path/filepath" + "strings" + + "github.com/gopherdojo/dojo6/kadai1/pei/pkg/imgconv" +) + +// ImgConverter With Directory struct has target directory and 2 extention and option. +type ConverterWithDir struct { + Dir string + InputExtension imgconv.ImgExtension + OutputExtension imgconv.ImgExtension + LeaveInput bool +} + +// Result struct has output image path. +type ConvertedResult struct { + OutputPath string +} + +// Convert image file in target directory. +func (cd ConverterWithDir) Convert() (results []ConvertedResult) { + files, err := cd.getImageFilePaths() + if err != nil { + log.Fatal(err) + } + + for _, f := range files { + + inputPath := fmt.Sprintf("%s/%s", cd.Dir, f) + outputPath := fmt.Sprintf("%s.%s", strings.TrimSuffix(inputPath, filepath.Ext(inputPath)), cd.OutputExtension) + + ic := imgconv.ImgConverter{ + InputPath: inputPath, + InputExtension: cd.InputExtension, + OutputPath: outputPath, + OutputExtension: cd.OutputExtension, + LeaveInput: cd.LeaveInput, + } + err = ic.Convert() + if err != nil { + log.Fatal(err) + } + + results = append(results, ConvertedResult{OutputPath: outputPath}) + } + + return +} + +func (cd ConverterWithDir) getImageFilePaths() (files []string, err error) { + _, err = os.Stat(cd.Dir) + if err != nil { + return + } + + err = filepath.Walk(cd.Dir, + func(path string, info os.FileInfo, err error) error { + relPath, err := filepath.Rel(cd.Dir, path) + if !info.IsDir() && err == nil && imgconv.ParseImgExtension(relPath) == cd.InputExtension { + files = append(files, relPath) + } + return nil + }) + + return +} diff --git a/kadai1/pei/pkg/convdir/convdir_test.go b/kadai1/pei/pkg/convdir/convdir_test.go new file mode 100644 index 0000000..a8b7458 --- /dev/null +++ b/kadai1/pei/pkg/convdir/convdir_test.go @@ -0,0 +1,30 @@ +package convdir_test + +import ( + "os" + "reflect" + "testing" + + "github.com/gopherdojo/dojo6/kadai1/pei/pkg/convdir" + "github.com/gopherdojo/dojo6/kadai1/pei/pkg/imgconv" +) + +func TestConverterWithDir_Convert(t *testing.T) { + cd := convdir.ConverterWithDir{ + Dir: "../../testdata", + InputExtension: imgconv.JPEG, + OutputExtension: imgconv.PNG, + LeaveInput: true, + } + got := cd.Convert() + want := []convdir.ConvertedResult{ + {OutputPath: "../../testdata/sample.png"}, + {OutputPath: "../../testdata/testdir1/testdir2/sample.png"}, + } + if !reflect.DeepEqual(got, want) { + t.Errorf("got: %v, want: %v", got, want) + } + + os.Remove(want[0].OutputPath) + os.Remove(want[1].OutputPath) +} From 13fe1b6325bc43a3a47aa884a03adb8b6da0ef8e Mon Sep 17 00:00:00 2001 From: suaaa7 Date: Mon, 15 Jul 2019 19:01:46 +0900 Subject: [PATCH 07/13] Add cmd --- kadai1/pei/cmd/cli.go | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 kadai1/pei/cmd/cli.go diff --git a/kadai1/pei/cmd/cli.go b/kadai1/pei/cmd/cli.go new file mode 100644 index 0000000..88f806d --- /dev/null +++ b/kadai1/pei/cmd/cli.go @@ -0,0 +1,37 @@ +package main + +import ( + "flag" + "os" + + "github.com/gopherdojo/dojo6/kadai1/pei/pkg/convdir" + "github.com/gopherdojo/dojo6/kadai1/pei/pkg/imgconv" +) + +const ( + usageInExt = `input extension (jpg, png, gif)` + usageOutExt = `output extension (jpg, png, gif)` + usageLeave = `Whether to leave input` +) + +func main() { + var ( + inputExtension = flag.String("in_ext", "jpg", usageInExt) + outputExtension = flag.String("out_ext", "png", usageOutExt) + leaveInput = flag.Bool("leave", false, usageLeave) + ) + flag.Parse() + args := flag.Args() + + if len(args) == 0 { + os.Exit(1) + } + + cd := convdir.ConverterWithDir{ + Dir: args[0], + InputExtension: imgconv.ParseImgExtension(*inputExtension), + OutputExtension: imgconv.ParseImgExtension(*outputExtension), + LeaveInput: *leaveInput, + } + cd.Convert() +} From e369dcdfe9a5e62bf8f3bc807b992df0ff11e1a8 Mon Sep 17 00:00:00 2001 From: suaaa7 Date: Mon, 15 Jul 2019 20:06:00 +0900 Subject: [PATCH 08/13] Add Makefile --- kadai1/pei/Makefile | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 kadai1/pei/Makefile diff --git a/kadai1/pei/Makefile b/kadai1/pei/Makefile new file mode 100644 index 0000000..278a0d4 --- /dev/null +++ b/kadai1/pei/Makefile @@ -0,0 +1,17 @@ +ROOT=github.com/gopherdojo/dojo6/kadai1/pei +BIN=bin/imgconv +MAIN=cmd/cli.go +TEST=... + +.PHONY: build +build: ${MAIN} + go build -o ${BIN} ${GOPATH}/src/${ROOT}/$? + +.PHONY: test +test: + go test -v -cover ${ROOT}/${TEST} + +.PHONY: clean +clean: + rm ${BIN} + go clean From f1026673c842348d058963956fbdc6f1485ce37d Mon Sep 17 00:00:00 2001 From: suaaa7 Date: Mon, 15 Jul 2019 20:06:24 +0900 Subject: [PATCH 09/13] Update README --- kadai1/pei/README.md | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/kadai1/pei/README.md b/kadai1/pei/README.md index 2bdd1c7..cfb6136 100644 --- a/kadai1/pei/README.md +++ b/kadai1/pei/README.md @@ -11,3 +11,36 @@ - 準標準パッケージ:golang.org/x以下のパッケージ - ユーザ定義型を作ってみる - GoDocを生成してみる + +# imgconv + +## Usage + +``` +Usage: + imgconv [-in_ext] [-out_ext] [-leave] DIR +Arguments: + -in_ext input extension (jpg, png, gif) [default: jpg] + -out_ext output extension (jpg, png, gif) [default: png] + -leave whether to leave input [default: fasle] +``` + +## Development + +### Build + +``` +make build +``` + +### Test + +``` +make test +``` + +### Clean + +``` +make clean +``` From e56fdd2c43564a9ea63431de0145df5f3c671d2b Mon Sep 17 00:00:00 2001 From: suaaa7 Date: Mon, 15 Jul 2019 20:10:25 +0900 Subject: [PATCH 10/13] go fmt ./... --- kadai1/pei/cmd/cli.go | 14 +++++++------- kadai1/pei/pkg/convdir/convdir.go | 14 +++++++------- kadai1/pei/pkg/convdir/convdir_test.go | 6 +++--- kadai1/pei/pkg/imgconv/imgconv.go | 10 +++++----- kadai1/pei/pkg/imgconv/imgconv_test.go | 18 +++++++++--------- 5 files changed, 31 insertions(+), 31 deletions(-) diff --git a/kadai1/pei/cmd/cli.go b/kadai1/pei/cmd/cli.go index 88f806d..2482ab7 100644 --- a/kadai1/pei/cmd/cli.go +++ b/kadai1/pei/cmd/cli.go @@ -9,16 +9,16 @@ import ( ) const ( - usageInExt = `input extension (jpg, png, gif)` + usageInExt = `input extension (jpg, png, gif)` usageOutExt = `output extension (jpg, png, gif)` - usageLeave = `Whether to leave input` + usageLeave = `whether to leave input` ) func main() { var ( - inputExtension = flag.String("in_ext", "jpg", usageInExt) + inputExtension = flag.String("in_ext", "jpg", usageInExt) outputExtension = flag.String("out_ext", "png", usageOutExt) - leaveInput = flag.Bool("leave", false, usageLeave) + leaveInput = flag.Bool("leave", false, usageLeave) ) flag.Parse() args := flag.Args() @@ -28,10 +28,10 @@ func main() { } cd := convdir.ConverterWithDir{ - Dir: args[0], - InputExtension: imgconv.ParseImgExtension(*inputExtension), + Dir: args[0], + InputExtension: imgconv.ParseImgExtension(*inputExtension), OutputExtension: imgconv.ParseImgExtension(*outputExtension), - LeaveInput: *leaveInput, + LeaveInput: *leaveInput, } cd.Convert() } diff --git a/kadai1/pei/pkg/convdir/convdir.go b/kadai1/pei/pkg/convdir/convdir.go index 6facef0..a05eb35 100644 --- a/kadai1/pei/pkg/convdir/convdir.go +++ b/kadai1/pei/pkg/convdir/convdir.go @@ -12,10 +12,10 @@ import ( // ImgConverter With Directory struct has target directory and 2 extention and option. type ConverterWithDir struct { - Dir string - InputExtension imgconv.ImgExtension + Dir string + InputExtension imgconv.ImgExtension OutputExtension imgconv.ImgExtension - LeaveInput bool + LeaveInput bool } // Result struct has output image path. @@ -36,11 +36,11 @@ func (cd ConverterWithDir) Convert() (results []ConvertedResult) { outputPath := fmt.Sprintf("%s.%s", strings.TrimSuffix(inputPath, filepath.Ext(inputPath)), cd.OutputExtension) ic := imgconv.ImgConverter{ - InputPath: inputPath, - InputExtension: cd.InputExtension, - OutputPath: outputPath, + InputPath: inputPath, + InputExtension: cd.InputExtension, + OutputPath: outputPath, OutputExtension: cd.OutputExtension, - LeaveInput: cd.LeaveInput, + LeaveInput: cd.LeaveInput, } err = ic.Convert() if err != nil { diff --git a/kadai1/pei/pkg/convdir/convdir_test.go b/kadai1/pei/pkg/convdir/convdir_test.go index a8b7458..a86000b 100644 --- a/kadai1/pei/pkg/convdir/convdir_test.go +++ b/kadai1/pei/pkg/convdir/convdir_test.go @@ -11,10 +11,10 @@ import ( func TestConverterWithDir_Convert(t *testing.T) { cd := convdir.ConverterWithDir{ - Dir: "../../testdata", - InputExtension: imgconv.JPEG, + Dir: "../../testdata", + InputExtension: imgconv.JPEG, OutputExtension: imgconv.PNG, - LeaveInput: true, + LeaveInput: true, } got := cd.Convert() want := []convdir.ConvertedResult{ diff --git a/kadai1/pei/pkg/imgconv/imgconv.go b/kadai1/pei/pkg/imgconv/imgconv.go index 89ec40f..b64322b 100644 --- a/kadai1/pei/pkg/imgconv/imgconv.go +++ b/kadai1/pei/pkg/imgconv/imgconv.go @@ -12,12 +12,12 @@ import ( // ImgConverter struct has 2 paths and 2 extensions for input and output. type ImgConverter struct { - // - InputPath string - InputExtension ImgExtension - OutputPath string + // + InputPath string + InputExtension ImgExtension + OutputPath string OutputExtension ImgExtension - LeaveInput bool + LeaveInput bool } // Convert image file. diff --git a/kadai1/pei/pkg/imgconv/imgconv_test.go b/kadai1/pei/pkg/imgconv/imgconv_test.go index 4fdf9c9..8d5b3ad 100644 --- a/kadai1/pei/pkg/imgconv/imgconv_test.go +++ b/kadai1/pei/pkg/imgconv/imgconv_test.go @@ -21,17 +21,17 @@ func TestImgConverter_Convert(t *testing.T) { }() var ( - ic imgconv.ImgConverter + ic imgconv.ImgConverter err error ) // jpg -> png ic = imgconv.ImgConverter{ - InputPath: jpgfile, - InputExtension: imgconv.JPEG, - OutputPath: pngfile, + InputPath: jpgfile, + InputExtension: imgconv.JPEG, + OutputPath: pngfile, OutputExtension: imgconv.PNG, - LeaveInput: true, + LeaveInput: true, } err = ic.Convert() if err != nil { @@ -40,11 +40,11 @@ func TestImgConverter_Convert(t *testing.T) { // png -> gif ic = imgconv.ImgConverter{ - InputPath: pngfile, - InputExtension: imgconv.PNG, - OutputPath: giffile, + InputPath: pngfile, + InputExtension: imgconv.PNG, + OutputPath: giffile, OutputExtension: imgconv.GIF, - LeaveInput: false, + LeaveInput: false, } err = ic.Convert() if err != nil { From fd00327cb053dcf28830025ecfdeae948d726563 Mon Sep 17 00:00:00 2001 From: suaaa7 Date: Mon, 15 Jul 2019 20:19:51 +0900 Subject: [PATCH 11/13] Change package name of test --- kadai1/pei/pkg/convdir/convdir_test.go | 7 +++---- kadai1/pei/pkg/imgconv/imgconv_test.go | 18 ++++++++---------- 2 files changed, 11 insertions(+), 14 deletions(-) diff --git a/kadai1/pei/pkg/convdir/convdir_test.go b/kadai1/pei/pkg/convdir/convdir_test.go index a86000b..a143047 100644 --- a/kadai1/pei/pkg/convdir/convdir_test.go +++ b/kadai1/pei/pkg/convdir/convdir_test.go @@ -1,23 +1,22 @@ -package convdir_test +package convdir import ( "os" "reflect" "testing" - "github.com/gopherdojo/dojo6/kadai1/pei/pkg/convdir" "github.com/gopherdojo/dojo6/kadai1/pei/pkg/imgconv" ) func TestConverterWithDir_Convert(t *testing.T) { - cd := convdir.ConverterWithDir{ + cd := ConverterWithDir{ Dir: "../../testdata", InputExtension: imgconv.JPEG, OutputExtension: imgconv.PNG, LeaveInput: true, } got := cd.Convert() - want := []convdir.ConvertedResult{ + want := []ConvertedResult{ {OutputPath: "../../testdata/sample.png"}, {OutputPath: "../../testdata/testdir1/testdir2/sample.png"}, } diff --git a/kadai1/pei/pkg/imgconv/imgconv_test.go b/kadai1/pei/pkg/imgconv/imgconv_test.go index 8d5b3ad..6e09208 100644 --- a/kadai1/pei/pkg/imgconv/imgconv_test.go +++ b/kadai1/pei/pkg/imgconv/imgconv_test.go @@ -1,10 +1,8 @@ -package imgconv_test +package imgconv import ( "os" "testing" - - "github.com/gopherdojo/dojo6/kadai1/pei/pkg/imgconv" ) func TestImgConverter_Convert(t *testing.T) { @@ -21,16 +19,16 @@ func TestImgConverter_Convert(t *testing.T) { }() var ( - ic imgconv.ImgConverter + ic ImgConverter err error ) // jpg -> png - ic = imgconv.ImgConverter{ + ic = ImgConverter{ InputPath: jpgfile, - InputExtension: imgconv.JPEG, + InputExtension: JPEG, OutputPath: pngfile, - OutputExtension: imgconv.PNG, + OutputExtension: PNG, LeaveInput: true, } err = ic.Convert() @@ -39,11 +37,11 @@ func TestImgConverter_Convert(t *testing.T) { } // png -> gif - ic = imgconv.ImgConverter{ + ic = ImgConverter{ InputPath: pngfile, - InputExtension: imgconv.PNG, + InputExtension: PNG, OutputPath: giffile, - OutputExtension: imgconv.GIF, + OutputExtension: GIF, LeaveInput: false, } err = ic.Convert() From edb31d0f110a8ee667b01637042cc131706dd8dc Mon Sep 17 00:00:00 2001 From: suaaa7 Date: Wed, 31 Jul 2019 07:10:25 +0900 Subject: [PATCH 12/13] cp -r kadai1 kadai2 --- kadai2/.gitkeep | 0 kadai2/pei/Makefile | 17 ++++ kadai2/pei/README.md | 46 ++++++++++ kadai2/pei/cmd/cli.go | 37 ++++++++ kadai2/pei/pkg/convdir/convdir.go | 72 ++++++++++++++++ kadai2/pei/pkg/convdir/convdir_test.go | 29 +++++++ kadai2/pei/pkg/imgconv/imgconv.go | 80 ++++++++++++++++++ kadai2/pei/pkg/imgconv/imgconv_test.go | 51 +++++++++++ kadai2/pei/pkg/imgconv/imgext.go | 46 ++++++++++ kadai2/pei/testdata/sample.jpg | Bin 0 -> 36298 bytes .../pei/testdata/testdir1/testdir2/sample.jpg | Bin 0 -> 36298 bytes 11 files changed, 378 insertions(+) create mode 100644 kadai2/.gitkeep create mode 100644 kadai2/pei/Makefile create mode 100644 kadai2/pei/README.md create mode 100644 kadai2/pei/cmd/cli.go create mode 100644 kadai2/pei/pkg/convdir/convdir.go create mode 100644 kadai2/pei/pkg/convdir/convdir_test.go create mode 100644 kadai2/pei/pkg/imgconv/imgconv.go create mode 100644 kadai2/pei/pkg/imgconv/imgconv_test.go create mode 100644 kadai2/pei/pkg/imgconv/imgext.go create mode 100755 kadai2/pei/testdata/sample.jpg create mode 100755 kadai2/pei/testdata/testdir1/testdir2/sample.jpg diff --git a/kadai2/.gitkeep b/kadai2/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/kadai2/pei/Makefile b/kadai2/pei/Makefile new file mode 100644 index 0000000..278a0d4 --- /dev/null +++ b/kadai2/pei/Makefile @@ -0,0 +1,17 @@ +ROOT=github.com/gopherdojo/dojo6/kadai1/pei +BIN=bin/imgconv +MAIN=cmd/cli.go +TEST=... + +.PHONY: build +build: ${MAIN} + go build -o ${BIN} ${GOPATH}/src/${ROOT}/$? + +.PHONY: test +test: + go test -v -cover ${ROOT}/${TEST} + +.PHONY: clean +clean: + rm ${BIN} + go clean diff --git a/kadai2/pei/README.md b/kadai2/pei/README.md new file mode 100644 index 0000000..cfb6136 --- /dev/null +++ b/kadai2/pei/README.md @@ -0,0 +1,46 @@ +# 課題1 画像変換コマンドを作ろう + +- 次の仕様を満たすコマンドを作って下さい + - ディレクトリを指定する + - 指定したディレクトリ以下のJPGファイルをPNGに変換(デフォルト) + - ディレクトリ以下は再帰的に処理する + - 変換前と変換後の画像形式を指定できる(オプション) +- 以下を満たすように開発してください + - mainパッケージと分離する + - 自作パッケージと標準パッケージと準標準パッケージのみ使う + - 準標準パッケージ:golang.org/x以下のパッケージ + - ユーザ定義型を作ってみる + - GoDocを生成してみる + +# imgconv + +## Usage + +``` +Usage: + imgconv [-in_ext] [-out_ext] [-leave] DIR +Arguments: + -in_ext input extension (jpg, png, gif) [default: jpg] + -out_ext output extension (jpg, png, gif) [default: png] + -leave whether to leave input [default: fasle] +``` + +## Development + +### Build + +``` +make build +``` + +### Test + +``` +make test +``` + +### Clean + +``` +make clean +``` diff --git a/kadai2/pei/cmd/cli.go b/kadai2/pei/cmd/cli.go new file mode 100644 index 0000000..2482ab7 --- /dev/null +++ b/kadai2/pei/cmd/cli.go @@ -0,0 +1,37 @@ +package main + +import ( + "flag" + "os" + + "github.com/gopherdojo/dojo6/kadai1/pei/pkg/convdir" + "github.com/gopherdojo/dojo6/kadai1/pei/pkg/imgconv" +) + +const ( + usageInExt = `input extension (jpg, png, gif)` + usageOutExt = `output extension (jpg, png, gif)` + usageLeave = `whether to leave input` +) + +func main() { + var ( + inputExtension = flag.String("in_ext", "jpg", usageInExt) + outputExtension = flag.String("out_ext", "png", usageOutExt) + leaveInput = flag.Bool("leave", false, usageLeave) + ) + flag.Parse() + args := flag.Args() + + if len(args) == 0 { + os.Exit(1) + } + + cd := convdir.ConverterWithDir{ + Dir: args[0], + InputExtension: imgconv.ParseImgExtension(*inputExtension), + OutputExtension: imgconv.ParseImgExtension(*outputExtension), + LeaveInput: *leaveInput, + } + cd.Convert() +} diff --git a/kadai2/pei/pkg/convdir/convdir.go b/kadai2/pei/pkg/convdir/convdir.go new file mode 100644 index 0000000..a05eb35 --- /dev/null +++ b/kadai2/pei/pkg/convdir/convdir.go @@ -0,0 +1,72 @@ +package convdir + +import ( + "fmt" + "log" + "os" + "path/filepath" + "strings" + + "github.com/gopherdojo/dojo6/kadai1/pei/pkg/imgconv" +) + +// ImgConverter With Directory struct has target directory and 2 extention and option. +type ConverterWithDir struct { + Dir string + InputExtension imgconv.ImgExtension + OutputExtension imgconv.ImgExtension + LeaveInput bool +} + +// Result struct has output image path. +type ConvertedResult struct { + OutputPath string +} + +// Convert image file in target directory. +func (cd ConverterWithDir) Convert() (results []ConvertedResult) { + files, err := cd.getImageFilePaths() + if err != nil { + log.Fatal(err) + } + + for _, f := range files { + + inputPath := fmt.Sprintf("%s/%s", cd.Dir, f) + outputPath := fmt.Sprintf("%s.%s", strings.TrimSuffix(inputPath, filepath.Ext(inputPath)), cd.OutputExtension) + + ic := imgconv.ImgConverter{ + InputPath: inputPath, + InputExtension: cd.InputExtension, + OutputPath: outputPath, + OutputExtension: cd.OutputExtension, + LeaveInput: cd.LeaveInput, + } + err = ic.Convert() + if err != nil { + log.Fatal(err) + } + + results = append(results, ConvertedResult{OutputPath: outputPath}) + } + + return +} + +func (cd ConverterWithDir) getImageFilePaths() (files []string, err error) { + _, err = os.Stat(cd.Dir) + if err != nil { + return + } + + err = filepath.Walk(cd.Dir, + func(path string, info os.FileInfo, err error) error { + relPath, err := filepath.Rel(cd.Dir, path) + if !info.IsDir() && err == nil && imgconv.ParseImgExtension(relPath) == cd.InputExtension { + files = append(files, relPath) + } + return nil + }) + + return +} diff --git a/kadai2/pei/pkg/convdir/convdir_test.go b/kadai2/pei/pkg/convdir/convdir_test.go new file mode 100644 index 0000000..a143047 --- /dev/null +++ b/kadai2/pei/pkg/convdir/convdir_test.go @@ -0,0 +1,29 @@ +package convdir + +import ( + "os" + "reflect" + "testing" + + "github.com/gopherdojo/dojo6/kadai1/pei/pkg/imgconv" +) + +func TestConverterWithDir_Convert(t *testing.T) { + cd := ConverterWithDir{ + Dir: "../../testdata", + InputExtension: imgconv.JPEG, + OutputExtension: imgconv.PNG, + LeaveInput: true, + } + got := cd.Convert() + want := []ConvertedResult{ + {OutputPath: "../../testdata/sample.png"}, + {OutputPath: "../../testdata/testdir1/testdir2/sample.png"}, + } + if !reflect.DeepEqual(got, want) { + t.Errorf("got: %v, want: %v", got, want) + } + + os.Remove(want[0].OutputPath) + os.Remove(want[1].OutputPath) +} diff --git a/kadai2/pei/pkg/imgconv/imgconv.go b/kadai2/pei/pkg/imgconv/imgconv.go new file mode 100644 index 0000000..b64322b --- /dev/null +++ b/kadai2/pei/pkg/imgconv/imgconv.go @@ -0,0 +1,80 @@ +package imgconv + +import ( + "fmt" + "image" + "image/gif" + "image/jpeg" + "image/png" + "log" + "os" +) + +// ImgConverter struct has 2 paths and 2 extensions for input and output. +type ImgConverter struct { + // + InputPath string + InputExtension ImgExtension + OutputPath string + OutputExtension ImgExtension + LeaveInput bool +} + +// Convert image file. +func (ic *ImgConverter) Convert() error { + inFile, err := os.Open(ic.InputPath) + if err != nil { + log.Fatal(err) + } + defer inFile.Close() + + inImg, err := decodeImg(inFile, ic.InputExtension) + if err != nil { + log.Fatal(err) + } + + outFile, err := os.Create(ic.OutputPath) + if err != nil { + log.Fatal(err) + } + defer outFile.Close() + + err = encodeImg(outFile, ic.OutputExtension, &inImg) + if err != nil { + log.Fatal(err) + } + + if !ic.LeaveInput { + os.Remove(ic.InputPath) + } + + return nil +} + +func encodeImg(file *os.File, ext ImgExtension, img *image.Image) (err error) { + switch ext { + case JPEG: + err = jpeg.Encode(file, *img, nil) + case PNG: + err = png.Encode(file, *img) + case GIF: + err = gif.Encode(file, *img, nil) + default: + err = fmt.Errorf("%s is not supported", ext) + } + return +} + +func decodeImg(file *os.File, ext ImgExtension) (img image.Image, err error) { + switch ext { + case JPEG: + img, err = jpeg.Decode(file) + case PNG: + img, err = png.Decode(file) + case GIF: + img, err = gif.Decode(file) + default: + err = fmt.Errorf("%s is not supported", ext) + } + return +} diff --git a/kadai2/pei/pkg/imgconv/imgconv_test.go b/kadai2/pei/pkg/imgconv/imgconv_test.go new file mode 100644 index 0000000..6e09208 --- /dev/null +++ b/kadai2/pei/pkg/imgconv/imgconv_test.go @@ -0,0 +1,51 @@ +package imgconv + +import ( + "os" + "testing" +) + +func TestImgConverter_Convert(t *testing.T) { + const ( + jpgfile = "../../testdata/sample.jpg" + pngfile = "../../testdata/sample.png" + giffile = "../../testdata/sample.gif" + + errorMessage = "Unexpected behavior" + ) + defer func() { + os.Remove(pngfile) + os.Remove(giffile) + }() + + var ( + ic ImgConverter + err error + ) + + // jpg -> png + ic = ImgConverter{ + InputPath: jpgfile, + InputExtension: JPEG, + OutputPath: pngfile, + OutputExtension: PNG, + LeaveInput: true, + } + err = ic.Convert() + if err != nil { + t.Errorf(errorMessage) + } + + // png -> gif + ic = ImgConverter{ + InputPath: pngfile, + InputExtension: PNG, + OutputPath: giffile, + OutputExtension: GIF, + LeaveInput: false, + } + err = ic.Convert() + if err != nil { + t.Errorf(errorMessage) + } +} diff --git a/kadai2/pei/pkg/imgconv/imgext.go b/kadai2/pei/pkg/imgconv/imgext.go new file mode 100644 index 0000000..65c1f0b --- /dev/null +++ b/kadai2/pei/pkg/imgconv/imgext.go @@ -0,0 +1,46 @@ +package imgconv + +import ( + "strings" +) + +// ImgExtension is enum type for image extension. +type ImgExtension int + +const ( + UNDEF ImgExtension = iota + JPEG + PNG + GIF +) + +// ImgExtension => String +func (ie ImgExtension) String() string { + switch ie { + case JPEG: + return "jpeg" + case PNG: + return "png" + case GIF: + return "gif" + default: + return "undefined" + } +} + +// String => ImgExtension +func ParseImgExtension(s string) ImgExtension { + stringList := strings.Split(s, ".") + ext := stringList[len(stringList)-1] + ext = strings.ToLower(ext) + switch ext { + case "jpg", "jpeg": + return JPEG + case "png": + return PNG + case "gif": + return GIF + default: + return UNDEF + } +} diff --git a/kadai2/pei/testdata/sample.jpg b/kadai2/pei/testdata/sample.jpg new file mode 100755 index 0000000000000000000000000000000000000000..30a491dcf4a73bfaa14837004ea212bb7d3cc0e7 GIT binary patch literal 36298 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 literal 0 HcmV?d00001 diff --git a/kadai2/pei/testdata/testdir1/testdir2/sample.jpg b/kadai2/pei/testdata/testdir1/testdir2/sample.jpg new file mode 100755 index 0000000000000000000000000000000000000000..30a491dcf4a73bfaa14837004ea212bb7d3cc0e7 GIT binary patch literal 36298 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 literal 0 HcmV?d00001 From 1c4544d497be933edf0b28f47a633a9daa876081 Mon Sep 17 00:00:00 2001 From: suaaa7 Date: Wed, 31 Jul 2019 07:24:59 +0900 Subject: [PATCH 13/13] kadai1 -> kadai2 --- kadai2/pei/Makefile | 2 +- kadai2/pei/cmd/cli.go | 4 ++-- kadai2/pei/pkg/convdir/convdir.go | 2 +- kadai2/pei/pkg/convdir/convdir_test.go | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/kadai2/pei/Makefile b/kadai2/pei/Makefile index 278a0d4..f6a44f4 100644 --- a/kadai2/pei/Makefile +++ b/kadai2/pei/Makefile @@ -1,4 +1,4 @@ -ROOT=github.com/gopherdojo/dojo6/kadai1/pei +ROOT=github.com/gopherdojo/dojo6/kadai2/pei BIN=bin/imgconv MAIN=cmd/cli.go TEST=... diff --git a/kadai2/pei/cmd/cli.go b/kadai2/pei/cmd/cli.go index 2482ab7..2bfb9b4 100644 --- a/kadai2/pei/cmd/cli.go +++ b/kadai2/pei/cmd/cli.go @@ -4,8 +4,8 @@ import ( "flag" "os" - "github.com/gopherdojo/dojo6/kadai1/pei/pkg/convdir" - "github.com/gopherdojo/dojo6/kadai1/pei/pkg/imgconv" + "github.com/gopherdojo/dojo6/kadai2/pei/pkg/convdir" + "github.com/gopherdojo/dojo6/kadai2/pei/pkg/imgconv" ) const ( diff --git a/kadai2/pei/pkg/convdir/convdir.go b/kadai2/pei/pkg/convdir/convdir.go index a05eb35..fdee69c 100644 --- a/kadai2/pei/pkg/convdir/convdir.go +++ b/kadai2/pei/pkg/convdir/convdir.go @@ -7,7 +7,7 @@ import ( "path/filepath" "strings" - "github.com/gopherdojo/dojo6/kadai1/pei/pkg/imgconv" + "github.com/gopherdojo/dojo6/kadai2/pei/pkg/imgconv" ) // ImgConverter With Directory struct has target directory and 2 extention and option. diff --git a/kadai2/pei/pkg/convdir/convdir_test.go b/kadai2/pei/pkg/convdir/convdir_test.go index a143047..9118d2f 100644 --- a/kadai2/pei/pkg/convdir/convdir_test.go +++ b/kadai2/pei/pkg/convdir/convdir_test.go @@ -5,7 +5,7 @@ import ( "reflect" "testing" - "github.com/gopherdojo/dojo6/kadai1/pei/pkg/imgconv" + "github.com/gopherdojo/dojo6/kadai2/pei/pkg/imgconv" ) func TestConverterWithDir_Convert(t *testing.T) {