diff --git a/go.mod b/go.mod new file mode 100644 index 00000000..d7d65458 --- /dev/null +++ b/go.mod @@ -0,0 +1,11 @@ +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 + golang.org/x/tools v0.4.0 // indirect +) diff --git a/go.sum b/go.sum new file mode 100644 index 00000000..f69bdcab --- /dev/null +++ b/go.sum @@ -0,0 +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/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 diff --git a/kadai1/kenboo0426/imgconv/convert.go b/kadai1/kenboo0426/imgconv/convert.go new file mode 100644 index 00000000..e44abc8a --- /dev/null +++ b/kadai1/kenboo0426/imgconv/convert.go @@ -0,0 +1,77 @@ +package imgconv + +import ( + "fmt" + "image" + "image/gif" + "image/jpeg" + "image/png" + "log" + "os" + "path/filepath" + "strings" +) + +// 画像の拡張子を変更する +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 ext := strings.Replace(filepath.Ext(path), ".", "", -1); info.IsDir() || ext != from_ex { + return nil + } + + convert(path, to_ex) + return nil + }) + + if err != nil { + panic(err) + } +} + +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) + defer func() { + if err := f.Close(); err != nil { + log.Fatal(err) + } + }() + 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 func() { + if err := fso.Close(); err != nil { + log.Fatal(err) + } + }() + if err != nil { + fmt.Println("create:", err) + return + } + + switch before_ex { + case "jpeg", "jpg": + err = jpeg.Encode(fso, img, &jpeg.Options{}) + case "png": + err = png.Encode(fso, img) + case "gif": + 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 new file mode 100644 index 00000000..7bfbc235 --- /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", "/", "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("Enter the path") + } + + imgconv.ConvertExtensions(*dirpath, *from, *to) +}