diff --git a/kadai1/itsumura/README.md b/kadai1/itsumura/README.md new file mode 100644 index 0000000..8b7dec8 --- /dev/null +++ b/kadai1/itsumura/README.md @@ -0,0 +1,40 @@ +imgChange +==== + +jpgファイルをpngに変換したり、pngファイルをjpgに変換するプログラムです。 + +## Requirement 依存性 +多分無し + +## Usage 使い方 +1. imgChangeファイルを画像があるフォルダと同じディレクトリに置きます。 + +2. コマンドからプログラムを起動します +``` +$ ./imgChange +``` +3. カレントディレクトリのファイル一覧が表示されるので、その中から画像ファイルが入っているフォルダ正しく入力します。 +``` +[changefunc imgChange.go pic] +pic ←入力する +``` + +4. 変換先のファイル形式を入力します +``` +変換先のファイル形式を選んで下さい +jpg or png +png ←入力する +``` + +5. 変換が実行されます。 + +## Install +imgChangeの実行ファイルを置くだけ。Linuxなら.shの拡張子を、Windowsなら.exeの拡張子をつけてください。 + +## Licence + +[MIT](https://github.com/tcnksm/tool/blob/master/LICENCE) + +## Author + +[dumblepy](https://github.com/dumblepy) \ No newline at end of file diff --git a/kadai1/itsumura/bin/imgChange b/kadai1/itsumura/bin/imgChange new file mode 100644 index 0000000..b98eae9 Binary files /dev/null and b/kadai1/itsumura/bin/imgChange differ diff --git a/kadai1/itsumura/pic/mysql.jpg b/kadai1/itsumura/pic/mysql.jpg new file mode 100644 index 0000000..972907b Binary files /dev/null and b/kadai1/itsumura/pic/mysql.jpg differ diff --git a/kadai1/itsumura/pic/mysql.png b/kadai1/itsumura/pic/mysql.png new file mode 100644 index 0000000..e38f61f Binary files /dev/null and b/kadai1/itsumura/pic/mysql.png differ diff --git a/kadai1/itsumura/pic/php.jpg b/kadai1/itsumura/pic/php.jpg new file mode 100644 index 0000000..249f744 Binary files /dev/null and b/kadai1/itsumura/pic/php.jpg differ diff --git a/kadai1/itsumura/pic/php.png b/kadai1/itsumura/pic/php.png new file mode 100644 index 0000000..7418a0c Binary files /dev/null and b/kadai1/itsumura/pic/php.png differ diff --git a/kadai1/itsumura/pic/pic2/docker.jpg b/kadai1/itsumura/pic/pic2/docker.jpg new file mode 100644 index 0000000..9ff3d0b Binary files /dev/null and b/kadai1/itsumura/pic/pic2/docker.jpg differ diff --git a/kadai1/itsumura/pic/pic2/docker.png b/kadai1/itsumura/pic/pic2/docker.png new file mode 100644 index 0000000..16d7fb8 Binary files /dev/null and b/kadai1/itsumura/pic/pic2/docker.png differ diff --git a/kadai1/itsumura/pic/pic2/pic3/gopher.jpg b/kadai1/itsumura/pic/pic2/pic3/gopher.jpg new file mode 100644 index 0000000..b3e9a1b Binary files /dev/null and b/kadai1/itsumura/pic/pic2/pic3/gopher.jpg differ diff --git a/kadai1/itsumura/pic/pic2/pic3/gopher.png b/kadai1/itsumura/pic/pic2/pic3/gopher.png new file mode 100644 index 0000000..df805ad Binary files /dev/null and b/kadai1/itsumura/pic/pic2/pic3/gopher.png differ diff --git a/kadai1/itsumura/pic/pic2/pic3/ruby.jpg b/kadai1/itsumura/pic/pic2/pic3/ruby.jpg new file mode 100644 index 0000000..01b7143 Binary files /dev/null and b/kadai1/itsumura/pic/pic2/pic3/ruby.jpg differ diff --git a/kadai1/itsumura/pic/pic2/pic3/ruby.png b/kadai1/itsumura/pic/pic2/pic3/ruby.png new file mode 100644 index 0000000..114c454 Binary files /dev/null and b/kadai1/itsumura/pic/pic2/pic3/ruby.png differ diff --git a/kadai1/itsumura/pic/pic2/python.jpg b/kadai1/itsumura/pic/pic2/python.jpg new file mode 100644 index 0000000..df18da4 Binary files /dev/null and b/kadai1/itsumura/pic/pic2/python.jpg differ diff --git a/kadai1/itsumura/pic/pic2/python.png b/kadai1/itsumura/pic/pic2/python.png new file mode 100644 index 0000000..6ac7057 Binary files /dev/null and b/kadai1/itsumura/pic/pic2/python.png differ diff --git a/kadai1/itsumura/pic/tux.jpg b/kadai1/itsumura/pic/tux.jpg new file mode 100644 index 0000000..c6c418e Binary files /dev/null and b/kadai1/itsumura/pic/tux.jpg differ diff --git a/kadai1/itsumura/pic/tux.png b/kadai1/itsumura/pic/tux.png new file mode 100644 index 0000000..2d8d05b Binary files /dev/null and b/kadai1/itsumura/pic/tux.png differ diff --git a/kadai1/itsumura/src/changefunc/jpgToPng.go b/kadai1/itsumura/src/changefunc/jpgToPng.go new file mode 100644 index 0000000..300b320 --- /dev/null +++ b/kadai1/itsumura/src/changefunc/jpgToPng.go @@ -0,0 +1,73 @@ +/* +Package changefunc :Encode jpg or png data to other type of image. + +jpgまたはpngファイルを、他方のファイル形式に変換します。 + +jpg => png + +png => jpg + +*/ +package changefunc + +import ( + "fmt" + "image" + "image/png" + "os" + "strings" +) + +//If error happen, fire panic. +//エラーが起きた時にpanicを起こす関数 +func ec(err *error) { + if *err != nil { + fmt.Println(*err) + panic(*err) + } +} + +// JpgToPng :Encode Jpg file to Png file and return number of files which are successed to encode.JpgをPngに変換する関数 +func JpgToPng(paths []string, filetype string) int { + success := 0 + fmt.Println("jpgToPng実行") + + for _, inputPath := range paths { + newFileNameSlice := strings.Split(inputPath, ".") + + var err error + + //try + if newFileNameSlice[len(newFileNameSlice)-1] != "jpg" && + newFileNameSlice[len(newFileNameSlice)-1] != "jpeg" { + fmt.Println(inputPath + "はjpgファイルでないためスキップ") + continue + } + + //ファイル名を変更 + outputPath := "" + for i := 0; i < len(newFileNameSlice)-1; i++ { + outputPath += newFileNameSlice[i] + } + outputPath = outputPath + ".png" + fmt.Println(inputPath + "から" + outputPath + "を作成しています") + + //出力ファイル生成 + out, err := os.Create(outputPath) + + //入力ファイルを開く + file, err := os.Open(inputPath) + + //画像のバイナリデータ + img, _, err := image.Decode(file) + + if err == nil { + err := png.Encode(out, img) + if err == nil { + success++ + } + } + ec(&err) + } + return success +} diff --git a/kadai1/itsumura/src/changefunc/pngToJpg.go b/kadai1/itsumura/src/changefunc/pngToJpg.go new file mode 100644 index 0000000..a4085b9 --- /dev/null +++ b/kadai1/itsumura/src/changefunc/pngToJpg.go @@ -0,0 +1,58 @@ +package changefunc + +import ( + "fmt" + "image" + "image/jpeg" + "os" + "strings" +) + +//PngToJpg :Encode Png file to Jpg file and return number of files which are successed to encode. +func PngToJpg(paths []string, filetype string) int { + success := 0 + fmt.Println("PngToJpg実行") + + for _, inputPath := range paths { + newFileNameSlice := strings.Split(inputPath, ".") + + var err error + + //try + if newFileNameSlice[len(newFileNameSlice)-1] != "png" { + fmt.Println(inputPath + "はpngファイルでないためスキップ") + continue + } + + //ファイル名を変更 + outputPath := "" + for i := 0; i < len(newFileNameSlice)-1; i++ { + outputPath += newFileNameSlice[i] + } + outputPath = outputPath + ".jpg" + fmt.Println(inputPath + "から" + outputPath + "を作成しています") + + //出力ファイル生成 + out, err := os.Create(outputPath) + + //入力ファイルを開く + file, err := os.Open(inputPath) + + //画像のバイナリデータ + img, _, err := image.Decode(file) + + //変換のオプション 初期値nil + opts := &jpeg.Options{Quality: 100} + + if err == nil { + err := jpeg.Encode(out, img, opts) + if err == nil { + success++ + } + } + if err != nil { + continue + } + } + return success +} diff --git a/kadai1/itsumura/src/imgChange.go b/kadai1/itsumura/src/imgChange.go new file mode 100644 index 0000000..e86b82e --- /dev/null +++ b/kadai1/itsumura/src/imgChange.go @@ -0,0 +1,139 @@ +/* +ディレクトリを指定する +指定したディレクトリ以下のJPGファイルをPNGに変換 +ディレクトリ以下は再帰的に処理する +変換前と変換後の画像形式を指定できる + +mainパッケージと分離する +自作パッケージと標準パッケージと準標準パッケージのみ使う +準標準パッケージ:golang.org/x以下のパッケージ +ユーザ定義型を作ってみる +GoDocを生成してみる +*/ + +package main + +import ( + "fmt" + "io/ioutil" + "path/filepath" + "strings" + + "./changefunc" +) + +//エラーハンドリング +func ec(err *error) { + if *err != nil { + fmt.Println(*err) + panic(*err) + } +} + +//ユーザー定義型 +type fileName string + +//拡張子を表示 +func (fileName fileName) Extension() string { + return strings.Split(string(fileName), ".")[1] +} + +func main() { + + for { + fmt.Println("以下の中から画像を変換するディレクトリを選んでください") + + var fileNameSlice []string + files, _ := ioutil.ReadDir("./") //カレントディレクトリをls + for _, file := range files { + fileNameSlice = append(fileNameSlice, file.Name()) + } + fmt.Println(fileNameSlice) //カレントディレクトリのファイル一覧を表示 + + var input string + fmt.Scan(&input) //標準入力から文字列取得 + + //検索 + var err error + results, err := searchDir(input) + //エラーが起きたらもう一度 + if err != nil { + fmt.Println("正しく入力してください") + continue + } + + fmt.Println(results) //選択したディレクトリ以下のファイルを全表示 + check := true + + for _, result := range results { + filename := fileName(result) + + if filename.Extension() != "jpg" && + filename.Extension() != "jpeg" && + filename.Extension() != "png" { + check = false + } + /*newFileNameSlice := strings.Split(result, ".") + + if newFileNameSlice[len(newFileNameSlice)-1] != "jpg" && + newFileNameSlice[len(newFileNameSlice)-1] != "jpeg" && + newFileNameSlice[len(newFileNameSlice)-1] != "png" { + check = false + } + */ + } + if check == false { + fmt.Println("変換可能な画像ファイルがありません") + continue + } + + //resultに入ってるパスの画像を変換 + input = "" + for { + fmt.Println("変換先のファイル形式を選んで下さい") + fmt.Println("jpg or png") + + fmt.Scan(&input) //標準入力から文字列取得 + + if input != "jpg" && + input != "png" { + fmt.Println("正しく入力してください") + continue + } else { + break + } + } + fmt.Println(input + "を選択") //変換ファイル形式 + + //画像変換処理 + success := 0 + if input == "jpg" { + success = changefunc.PngToJpg(results, input) + } else if input == "png" { + success = changefunc.JpgToPng(results, input) + } + + if success > 0 { + fmt.Println("完了") + break + } else { + continue + } + } +} + +func searchDir(dir string) ([]string, error) { + files, err := ioutil.ReadDir(dir) + + var paths []string + for _, file := range files { + if file.IsDir() { + var path []string + path, err = searchDir(filepath.Join(dir, file.Name())) + paths = append(paths, path...) + continue + } + paths = append(paths, filepath.Join(dir, file.Name())) + } + return paths, err +} diff --git a/kadai2/itsumura/README.md b/kadai2/itsumura/README.md new file mode 100644 index 0000000..6a512a5 --- /dev/null +++ b/kadai2/itsumura/README.md @@ -0,0 +1,19 @@ +# テスト + +実行コマンド +``` +go test -run "" +``` + +テストカバレッジ表示 +``` +go test -cover "" +``` + +# io.Readerとio.Writer +## 標準パッケージでの使われ方 +- 標準パッケージでの関数で、引数として使われていた +- 引数として渡された値は、Readerではbufio.NewReader()やbufio.NewScanner()で読み込まれていた + +## メリット +- 成功したか否かを取得し、エラーハンドリングを用意にするため? diff --git a/kadai2/itsumura/bin/imgChange b/kadai2/itsumura/bin/imgChange new file mode 100644 index 0000000..b98eae9 Binary files /dev/null and b/kadai2/itsumura/bin/imgChange differ diff --git a/kadai2/itsumura/pic/mysql.jpg b/kadai2/itsumura/pic/mysql.jpg new file mode 100644 index 0000000..972907b Binary files /dev/null and b/kadai2/itsumura/pic/mysql.jpg differ diff --git a/kadai2/itsumura/pic/mysql.png b/kadai2/itsumura/pic/mysql.png new file mode 100644 index 0000000..e38f61f Binary files /dev/null and b/kadai2/itsumura/pic/mysql.png differ diff --git a/kadai2/itsumura/pic/php.jpg b/kadai2/itsumura/pic/php.jpg new file mode 100644 index 0000000..249f744 Binary files /dev/null and b/kadai2/itsumura/pic/php.jpg differ diff --git a/kadai2/itsumura/pic/php.png b/kadai2/itsumura/pic/php.png new file mode 100644 index 0000000..7418a0c Binary files /dev/null and b/kadai2/itsumura/pic/php.png differ diff --git a/kadai2/itsumura/pic/pic2/docker.jpg b/kadai2/itsumura/pic/pic2/docker.jpg new file mode 100644 index 0000000..9ff3d0b Binary files /dev/null and b/kadai2/itsumura/pic/pic2/docker.jpg differ diff --git a/kadai2/itsumura/pic/pic2/docker.png b/kadai2/itsumura/pic/pic2/docker.png new file mode 100644 index 0000000..16d7fb8 Binary files /dev/null and b/kadai2/itsumura/pic/pic2/docker.png differ diff --git a/kadai2/itsumura/pic/pic2/pic3/gopher.jpg b/kadai2/itsumura/pic/pic2/pic3/gopher.jpg new file mode 100644 index 0000000..b3e9a1b Binary files /dev/null and b/kadai2/itsumura/pic/pic2/pic3/gopher.jpg differ diff --git a/kadai2/itsumura/pic/pic2/pic3/gopher.png b/kadai2/itsumura/pic/pic2/pic3/gopher.png new file mode 100644 index 0000000..df805ad Binary files /dev/null and b/kadai2/itsumura/pic/pic2/pic3/gopher.png differ diff --git a/kadai2/itsumura/pic/pic2/pic3/ruby.jpg b/kadai2/itsumura/pic/pic2/pic3/ruby.jpg new file mode 100644 index 0000000..01b7143 Binary files /dev/null and b/kadai2/itsumura/pic/pic2/pic3/ruby.jpg differ diff --git a/kadai2/itsumura/pic/pic2/pic3/ruby.png b/kadai2/itsumura/pic/pic2/pic3/ruby.png new file mode 100644 index 0000000..114c454 Binary files /dev/null and b/kadai2/itsumura/pic/pic2/pic3/ruby.png differ diff --git a/kadai2/itsumura/pic/pic2/python.jpg b/kadai2/itsumura/pic/pic2/python.jpg new file mode 100644 index 0000000..df18da4 Binary files /dev/null and b/kadai2/itsumura/pic/pic2/python.jpg differ diff --git a/kadai2/itsumura/pic/pic2/python.png b/kadai2/itsumura/pic/pic2/python.png new file mode 100644 index 0000000..6ac7057 Binary files /dev/null and b/kadai2/itsumura/pic/pic2/python.png differ diff --git a/kadai2/itsumura/pic/tux.jpg b/kadai2/itsumura/pic/tux.jpg new file mode 100644 index 0000000..c6c418e Binary files /dev/null and b/kadai2/itsumura/pic/tux.jpg differ diff --git a/kadai2/itsumura/pic/tux.png b/kadai2/itsumura/pic/tux.png new file mode 100644 index 0000000..2d8d05b Binary files /dev/null and b/kadai2/itsumura/pic/tux.png differ diff --git a/kadai2/itsumura/src/changefunc/jpgToPng.go b/kadai2/itsumura/src/changefunc/jpgToPng.go new file mode 100644 index 0000000..300b320 --- /dev/null +++ b/kadai2/itsumura/src/changefunc/jpgToPng.go @@ -0,0 +1,73 @@ +/* +Package changefunc :Encode jpg or png data to other type of image. + +jpgまたはpngファイルを、他方のファイル形式に変換します。 + +jpg => png + +png => jpg + +*/ +package changefunc + +import ( + "fmt" + "image" + "image/png" + "os" + "strings" +) + +//If error happen, fire panic. +//エラーが起きた時にpanicを起こす関数 +func ec(err *error) { + if *err != nil { + fmt.Println(*err) + panic(*err) + } +} + +// JpgToPng :Encode Jpg file to Png file and return number of files which are successed to encode.JpgをPngに変換する関数 +func JpgToPng(paths []string, filetype string) int { + success := 0 + fmt.Println("jpgToPng実行") + + for _, inputPath := range paths { + newFileNameSlice := strings.Split(inputPath, ".") + + var err error + + //try + if newFileNameSlice[len(newFileNameSlice)-1] != "jpg" && + newFileNameSlice[len(newFileNameSlice)-1] != "jpeg" { + fmt.Println(inputPath + "はjpgファイルでないためスキップ") + continue + } + + //ファイル名を変更 + outputPath := "" + for i := 0; i < len(newFileNameSlice)-1; i++ { + outputPath += newFileNameSlice[i] + } + outputPath = outputPath + ".png" + fmt.Println(inputPath + "から" + outputPath + "を作成しています") + + //出力ファイル生成 + out, err := os.Create(outputPath) + + //入力ファイルを開く + file, err := os.Open(inputPath) + + //画像のバイナリデータ + img, _, err := image.Decode(file) + + if err == nil { + err := png.Encode(out, img) + if err == nil { + success++ + } + } + ec(&err) + } + return success +} diff --git a/kadai2/itsumura/src/changefunc/pngToJpg.go b/kadai2/itsumura/src/changefunc/pngToJpg.go new file mode 100644 index 0000000..a4085b9 --- /dev/null +++ b/kadai2/itsumura/src/changefunc/pngToJpg.go @@ -0,0 +1,58 @@ +package changefunc + +import ( + "fmt" + "image" + "image/jpeg" + "os" + "strings" +) + +//PngToJpg :Encode Png file to Jpg file and return number of files which are successed to encode. +func PngToJpg(paths []string, filetype string) int { + success := 0 + fmt.Println("PngToJpg実行") + + for _, inputPath := range paths { + newFileNameSlice := strings.Split(inputPath, ".") + + var err error + + //try + if newFileNameSlice[len(newFileNameSlice)-1] != "png" { + fmt.Println(inputPath + "はpngファイルでないためスキップ") + continue + } + + //ファイル名を変更 + outputPath := "" + for i := 0; i < len(newFileNameSlice)-1; i++ { + outputPath += newFileNameSlice[i] + } + outputPath = outputPath + ".jpg" + fmt.Println(inputPath + "から" + outputPath + "を作成しています") + + //出力ファイル生成 + out, err := os.Create(outputPath) + + //入力ファイルを開く + file, err := os.Open(inputPath) + + //画像のバイナリデータ + img, _, err := image.Decode(file) + + //変換のオプション 初期値nil + opts := &jpeg.Options{Quality: 100} + + if err == nil { + err := jpeg.Encode(out, img, opts) + if err == nil { + success++ + } + } + if err != nil { + continue + } + } + return success +} diff --git a/kadai2/itsumura/src/imgChange.go b/kadai2/itsumura/src/imgChange.go new file mode 100644 index 0000000..e86b82e --- /dev/null +++ b/kadai2/itsumura/src/imgChange.go @@ -0,0 +1,139 @@ +/* +ディレクトリを指定する +指定したディレクトリ以下のJPGファイルをPNGに変換 +ディレクトリ以下は再帰的に処理する +変換前と変換後の画像形式を指定できる + +mainパッケージと分離する +自作パッケージと標準パッケージと準標準パッケージのみ使う +準標準パッケージ:golang.org/x以下のパッケージ +ユーザ定義型を作ってみる +GoDocを生成してみる +*/ + +package main + +import ( + "fmt" + "io/ioutil" + "path/filepath" + "strings" + + "./changefunc" +) + +//エラーハンドリング +func ec(err *error) { + if *err != nil { + fmt.Println(*err) + panic(*err) + } +} + +//ユーザー定義型 +type fileName string + +//拡張子を表示 +func (fileName fileName) Extension() string { + return strings.Split(string(fileName), ".")[1] +} + +func main() { + + for { + fmt.Println("以下の中から画像を変換するディレクトリを選んでください") + + var fileNameSlice []string + files, _ := ioutil.ReadDir("./") //カレントディレクトリをls + for _, file := range files { + fileNameSlice = append(fileNameSlice, file.Name()) + } + fmt.Println(fileNameSlice) //カレントディレクトリのファイル一覧を表示 + + var input string + fmt.Scan(&input) //標準入力から文字列取得 + + //検索 + var err error + results, err := searchDir(input) + //エラーが起きたらもう一度 + if err != nil { + fmt.Println("正しく入力してください") + continue + } + + fmt.Println(results) //選択したディレクトリ以下のファイルを全表示 + check := true + + for _, result := range results { + filename := fileName(result) + + if filename.Extension() != "jpg" && + filename.Extension() != "jpeg" && + filename.Extension() != "png" { + check = false + } + /*newFileNameSlice := strings.Split(result, ".") + + if newFileNameSlice[len(newFileNameSlice)-1] != "jpg" && + newFileNameSlice[len(newFileNameSlice)-1] != "jpeg" && + newFileNameSlice[len(newFileNameSlice)-1] != "png" { + check = false + } + */ + } + if check == false { + fmt.Println("変換可能な画像ファイルがありません") + continue + } + + //resultに入ってるパスの画像を変換 + input = "" + for { + fmt.Println("変換先のファイル形式を選んで下さい") + fmt.Println("jpg or png") + + fmt.Scan(&input) //標準入力から文字列取得 + + if input != "jpg" && + input != "png" { + fmt.Println("正しく入力してください") + continue + } else { + break + } + } + fmt.Println(input + "を選択") //変換ファイル形式 + + //画像変換処理 + success := 0 + if input == "jpg" { + success = changefunc.PngToJpg(results, input) + } else if input == "png" { + success = changefunc.JpgToPng(results, input) + } + + if success > 0 { + fmt.Println("完了") + break + } else { + continue + } + } +} + +func searchDir(dir string) ([]string, error) { + files, err := ioutil.ReadDir(dir) + + var paths []string + for _, file := range files { + if file.IsDir() { + var path []string + path, err = searchDir(filepath.Join(dir, file.Name())) + paths = append(paths, path...) + continue + } + paths = append(paths, filepath.Join(dir, file.Name())) + } + return paths, err +} diff --git a/kadai2/itsumura/src/imgChange_test.go b/kadai2/itsumura/src/imgChange_test.go new file mode 100644 index 0000000..54906a2 --- /dev/null +++ b/kadai2/itsumura/src/imgChange_test.go @@ -0,0 +1,46 @@ +package main + +import ( + "testing" +) + +func TestExtension(t *testing.T) { + var f fileName = "aaa.txt" + ex := f.Extension() + if ex != "txt" { + t.Fatal(ex) + } +} + +func TestSearchDir(t *testing.T) { + dir := "../pic" + results, err := searchDir(dir) + if err != nil { + t.Fatal("failed test") + t.Fatal(results) + } + + //エラー + dir = "aaa" + results, err = searchDir(dir) + if err != nil { + t.Fatal("failed test") + t.Fatal(results) + } + + //テーブル駆動型 + cases := []struct{ + dir string + }{ + {dir: "../pic"}, + {dir : "aaa"}, //エラー + } + + for _, c := range cases{ + results, err = searchDir(c.dir) + if err != nil { + t.Fatal("failed test") + t.Fatal(results) + } + } +}