From 719d38ca7c9a82b1c002cf4f8311f493ecd830d2 Mon Sep 17 00:00:00 2001 From: kenboo0426 Date: Mon, 26 Dec 2022 22:43:44 +0900 Subject: [PATCH 1/8] def convert method --- kadai1/kenboo0426/imgconv/convert.go | 67 ++++++++++++++++++++++++++++ kadai1/kenboo0426/main.go | 20 +++++++++ 2 files changed, 87 insertions(+) create mode 100644 kadai1/kenboo0426/imgconv/convert.go create mode 100644 kadai1/kenboo0426/main.go diff --git a/kadai1/kenboo0426/imgconv/convert.go b/kadai1/kenboo0426/imgconv/convert.go new file mode 100644 index 00000000..da11fe1c --- /dev/null +++ b/kadai1/kenboo0426/imgconv/convert.go @@ -0,0 +1,67 @@ +package imgconv + +import ( + "fmt" + "image" + "image/gif" + "image/jpeg" + "image/png" + "os" + "path/filepath" + "strings" +) + +func Cmd(dirpath string, from_ex string, to_ex string) { + err := filepath.Walk(dirpath, func(path string, info os.FileInfo, err error) error { + if err != nil { + return err + } + + if arr := strings.Split(path, "."); info.IsDir() || arr[len(arr)-1] != from_ex { + return nil + } + + convert(path, to_ex) + return nil + }) + + if err != nil { + panic(err) + } +} + +func convert(before_path string, to_ex string) { + arr := strings.Split(before_path, ".") + // 拡張子以外"ドット"を使っていないと仮定 + after_path := arr[0] + "." + to_ex + before_ex := arr[len(arr)-1] + f, err := os.Open(before_path) + fmt.Println(before_path, "before_path") + defer f.Close() + if err != nil { + fmt.Println("open:", err) + return + } + img, _, err := image.Decode(f) + if err != nil { + fmt.Println("decode:", err) + return + } + fso, err := os.Create(after_path) + defer fso.Close() + if err != nil { + fmt.Println("create:", err) + return + } + + switch before_ex { + case "jpeg", "jpg": + jpeg.Encode(fso, img, &jpeg.Options{}) + case "png": + png.Encode(fso, img) + case "gif": + gif.Encode(fso, img, &gif.Options{}) + default: + fmt.Println("その変換前の形式は対応していません") + } +} diff --git a/kadai1/kenboo0426/main.go b/kadai1/kenboo0426/main.go new file mode 100644 index 00000000..a459fa38 --- /dev/null +++ b/kadai1/kenboo0426/main.go @@ -0,0 +1,20 @@ +package main + +import ( + "flag" + "gopherdojo-studyroom/kadai1/kenboo0426/imgconv" + "log" +) + +func main() { + dirpath := flag.String("path", "/", "パスを指定する") + from := flag.String("from", "jpg", "変換前の形式を指定する") + to := flag.String("to", "png", "変換後の形式を指定する") + flag.Parse() + + if dirpath == nil { + log.Fatal("パスを指定する") + } + + imgconv.Cmd(*dirpath, *from, *to) +} From 2ccce427534d61276a4ce93a13f6cfe3553647c6 Mon Sep 17 00:00:00 2001 From: kenboo0426 Date: Mon, 26 Dec 2022 22:43:51 +0900 Subject: [PATCH 2/8] build mod --- go.mod | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 go.mod diff --git a/go.mod b/go.mod new file mode 100644 index 00000000..f8b77fb5 --- /dev/null +++ b/go.mod @@ -0,0 +1,3 @@ +module gopherdojo-studyroom + +go 1.19 From 394e9fbce2ea24fb1f213c23123cc5949819c56a Mon Sep 17 00:00:00 2001 From: kenboo0426 Date: Mon, 26 Dec 2022 23:37:59 +0900 Subject: [PATCH 3/8] convert to filepath.ext from strings.split for windows --- kadai1/kenboo0426/imgconv/convert.go | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/kadai1/kenboo0426/imgconv/convert.go b/kadai1/kenboo0426/imgconv/convert.go index da11fe1c..fb9e1ef3 100644 --- a/kadai1/kenboo0426/imgconv/convert.go +++ b/kadai1/kenboo0426/imgconv/convert.go @@ -11,13 +11,14 @@ import ( "strings" ) -func Cmd(dirpath string, from_ex string, to_ex string) { +// 画像の拡張子を変更する +func ConvertExtensions(dirpath string, from_ex string, to_ex string) { err := filepath.Walk(dirpath, func(path string, info os.FileInfo, err error) error { if err != nil { return err } - if arr := strings.Split(path, "."); info.IsDir() || arr[len(arr)-1] != from_ex { + if ext := strings.Replace(filepath.Ext(path), ".", "", -1); info.IsDir() || ext != from_ex { return nil } @@ -31,10 +32,8 @@ func Cmd(dirpath string, from_ex string, to_ex string) { } func convert(before_path string, to_ex string) { - arr := strings.Split(before_path, ".") - // 拡張子以外"ドット"を使っていないと仮定 - after_path := arr[0] + "." + to_ex - before_ex := arr[len(arr)-1] + before_ex := strings.Replace(filepath.Ext(before_path), ".", "", -1) + after_path := strings.Replace(before_path, before_ex, to_ex, -1) f, err := os.Open(before_path) fmt.Println(before_path, "before_path") defer f.Close() From 86f6000f44cb84f231255e36de64ce4e3123cba2 Mon Sep 17 00:00:00 2001 From: kenboo0426 Date: Mon, 26 Dec 2022 23:38:11 +0900 Subject: [PATCH 4/8] edit message --- kadai1/kenboo0426/main.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/kadai1/kenboo0426/main.go b/kadai1/kenboo0426/main.go index a459fa38..678372df 100644 --- a/kadai1/kenboo0426/main.go +++ b/kadai1/kenboo0426/main.go @@ -7,14 +7,14 @@ import ( ) func main() { - dirpath := flag.String("path", "/", "パスを指定する") - from := flag.String("from", "jpg", "変換前の形式を指定する") - to := flag.String("to", "png", "変換後の形式を指定する") + dirpath := flag.String("path", "/", "Enter the path") + from := flag.String("from", "jpg", "Enter the img extension before conversion") + to := flag.String("to", "png", "Enter the img extension after conversion") flag.Parse() if dirpath == nil { log.Fatal("パスを指定する") } - imgconv.Cmd(*dirpath, *from, *to) + imgconv.ConvertExtensions(*dirpath, *from, *to) } From 92b4e63d574d5029b532ca67f3946f9085596e95 Mon Sep 17 00:00:00 2001 From: kenboo0426 Date: Mon, 26 Dec 2022 23:38:31 +0900 Subject: [PATCH 5/8] go get godoc --- go.mod | 7 +++++++ go.sum | 8 ++++++++ 2 files changed, 15 insertions(+) create mode 100644 go.sum diff --git a/go.mod b/go.mod index f8b77fb5..9be8d5c0 100644 --- a/go.mod +++ b/go.mod @@ -1,3 +1,10 @@ module gopherdojo-studyroom go 1.19 + +require ( + github.com/yuin/goldmark v1.4.13 // indirect + golang.org/x/mod v0.7.0 // indirect + golang.org/x/sys v0.3.0 // indirect + golang.org/x/tools v0.4.0 // indirect +) diff --git a/go.sum b/go.sum new file mode 100644 index 00000000..009f4e64 --- /dev/null +++ b/go.sum @@ -0,0 +1,8 @@ +github.com/yuin/goldmark v1.4.13 h1:fVcFKWvrslecOb/tg+Cc05dkeYx540o0FuFt3nUVDoE= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +golang.org/x/mod v0.7.0 h1:LapD9S96VoQRhi/GrNTqeBJFrUjs5UHCAtTlgwA5oZA= +golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/sys v0.3.0 h1:w8ZOecv6NaNa/zC8944JTU3vz4u6Lagfk4RPQxv92NQ= +golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/tools v0.4.0 h1:7mTAgkunk3fr4GAloyyCasadO6h9zSsQZbwvcaIciV4= +golang.org/x/tools v0.4.0/go.mod h1:UE5sM2OK9E/d67R0ANs2xJizIymRP5gJU295PvKXxjQ= From f3f44aef44bf3dc73d3f98cd55eff797d47b00d5 Mon Sep 17 00:00:00 2001 From: kenboo0426 Date: Tue, 27 Dec 2022 00:05:14 +0900 Subject: [PATCH 6/8] add errcheck --- go.mod | 1 + go.sum | 27 +++++++++++++++++++++++++++ kadai1/kenboo0426/imgconv/convert.go | 22 +++++++++++++++++----- kadai1/kenboo0426/main.go | 2 +- 4 files changed, 46 insertions(+), 6 deletions(-) diff --git a/go.mod b/go.mod index 9be8d5c0..d7d65458 100644 --- a/go.mod +++ b/go.mod @@ -3,6 +3,7 @@ module gopherdojo-studyroom go 1.19 require ( + github.com/kisielk/errcheck v1.6.2 // indirect github.com/yuin/goldmark v1.4.13 // indirect golang.org/x/mod v0.7.0 // indirect golang.org/x/sys v0.3.0 // indirect diff --git a/go.sum b/go.sum index 009f4e64..f69bdcab 100644 --- a/go.sum +++ b/go.sum @@ -1,8 +1,35 @@ +github.com/kisielk/errcheck v1.6.2 h1:uGQ9xI8/pgc9iOoCe7kWQgRE6SBTrCGmTSf0LrEtY7c= +github.com/kisielk/errcheck v1.6.2/go.mod h1:nXw/i/MfnvRHqXa7XXmQMUB0oNFGuBrNI8d8NLy0LPw= +github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.13 h1:fVcFKWvrslecOb/tg+Cc05dkeYx540o0FuFt3nUVDoE= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY= golang.org/x/mod v0.7.0 h1:LapD9S96VoQRhi/GrNTqeBJFrUjs5UHCAtTlgwA5oZA= golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.3.0 h1:w8ZOecv6NaNa/zC8944JTU3vz4u6Lagfk4RPQxv92NQ= golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E= golang.org/x/tools v0.4.0 h1:7mTAgkunk3fr4GAloyyCasadO6h9zSsQZbwvcaIciV4= golang.org/x/tools v0.4.0/go.mod h1:UE5sM2OK9E/d67R0ANs2xJizIymRP5gJU295PvKXxjQ= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= diff --git a/kadai1/kenboo0426/imgconv/convert.go b/kadai1/kenboo0426/imgconv/convert.go index fb9e1ef3..4ff635cf 100644 --- a/kadai1/kenboo0426/imgconv/convert.go +++ b/kadai1/kenboo0426/imgconv/convert.go @@ -6,6 +6,7 @@ import ( "image/gif" "image/jpeg" "image/png" + "log" "os" "path/filepath" "strings" @@ -36,7 +37,11 @@ func convert(before_path string, to_ex string) { after_path := strings.Replace(before_path, before_ex, to_ex, -1) f, err := os.Open(before_path) fmt.Println(before_path, "before_path") - defer f.Close() + defer func() { + if err := f.Close(); err != nil { + log.Fatal(err) + } + }() if err != nil { fmt.Println("open:", err) return @@ -47,7 +52,11 @@ func convert(before_path string, to_ex string) { return } fso, err := os.Create(after_path) - defer fso.Close() + defer func() { + if err := fso.Close(); err != nil { + log.Fatal(err) + } + }() if err != nil { fmt.Println("create:", err) return @@ -55,12 +64,15 @@ func convert(before_path string, to_ex string) { switch before_ex { case "jpeg", "jpg": - jpeg.Encode(fso, img, &jpeg.Options{}) + err = jpeg.Encode(fso, img, &jpeg.Options{}) case "png": - png.Encode(fso, img) + err = png.Encode(fso, img) case "gif": - gif.Encode(fso, img, &gif.Options{}) + err = gif.Encode(fso, img, &gif.Options{}) default: fmt.Println("その変換前の形式は対応していません") } + if err != nil { + fmt.Println("encode:", err) + } } diff --git a/kadai1/kenboo0426/main.go b/kadai1/kenboo0426/main.go index 678372df..7bfbc235 100644 --- a/kadai1/kenboo0426/main.go +++ b/kadai1/kenboo0426/main.go @@ -13,7 +13,7 @@ func main() { flag.Parse() if dirpath == nil { - log.Fatal("パスを指定する") + log.Fatal("Enter the path") } imgconv.ConvertExtensions(*dirpath, *from, *to) From b3902e304001260c4de9318fd6644f961e29ae63 Mon Sep 17 00:00:00 2001 From: kenboo0426 Date: Tue, 27 Dec 2022 00:05:34 +0900 Subject: [PATCH 7/8] summarize to readme --- kadai1/kenboo0426/README.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 kadai1/kenboo0426/README.md diff --git a/kadai1/kenboo0426/README.md b/kadai1/kenboo0426/README.md new file mode 100644 index 00000000..d36daaa3 --- /dev/null +++ b/kadai1/kenboo0426/README.md @@ -0,0 +1,12 @@ +## Options + +| Options | Default | Description | +|--------|--------|---------------------| +| -path | ./ | convert extension under the path | +| -from | jpg | image extension before conversion | +| -to | png | image extension after conversion | + +## Usage +```bash +$ go run main.go -path=hoge -from=jpg -to=png +``` \ No newline at end of file From a501920d343cde721680ab000967cec713940008 Mon Sep 17 00:00:00 2001 From: kenboo0426 Date: Tue, 27 Dec 2022 00:11:48 +0900 Subject: [PATCH 8/8] delete print --- kadai1/kenboo0426/imgconv/convert.go | 1 - 1 file changed, 1 deletion(-) diff --git a/kadai1/kenboo0426/imgconv/convert.go b/kadai1/kenboo0426/imgconv/convert.go index 4ff635cf..e44abc8a 100644 --- a/kadai1/kenboo0426/imgconv/convert.go +++ b/kadai1/kenboo0426/imgconv/convert.go @@ -36,7 +36,6 @@ func convert(before_path string, to_ex string) { before_ex := strings.Replace(filepath.Ext(before_path), ".", "", -1) after_path := strings.Replace(before_path, before_ex, to_ex, -1) f, err := os.Open(before_path) - fmt.Println(before_path, "before_path") defer func() { if err := f.Close(); err != nil { log.Fatal(err)